<?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>218406</bug_id>
          
          <creation_ts>2020-10-30 16:06:24 -0700</creation_ts>
          <short_desc>[Concurrent display lists] Encode display list items directly into shared memory</short_desc>
          <delta_ts>2020-11-06 12:10:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>218516</dependson>
    
    <dependson>218517</dependson>
    
    <dependson>218518</dependson>
          <blocked>218425</blocked>
    
    <blocked>218586</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1703242</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-30 16:06:24 -0700</bug_when>
    <thetext>The first step towards allowing the GPU and web processes to read and write display list items concurrently.

(more details coming soon)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703259</commentid>
    <comment_count>1</comment_count>
      <attachid>412811</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-30 16:54:14 -0700</bug_when>
    <thetext>Created attachment 412811
Part 1 WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703399</commentid>
    <comment_count>2</comment_count>
      <attachid>412811</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-11-01 10:48:28 -0800</bug_when>
    <thetext>Comment on attachment 412811
Part 1 WIP

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

I realize this is a WIP, but I thought I would give some initial feedback. Looking really good!

Given how composable these parts are, I think it would be useful to write some unit tests for things like ItemBuffer and for the round trip encoding/decoding of display list items in TestWebKitAPI.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.h:81
&gt; +    WEBCORE_EXPORT void map(Function&lt;void(ItemHandle, Optional&lt;FloatRect&gt;&amp;&amp;)&gt;&amp;&amp;) const;

map feels a bit to abstract of a name for this to me, though if others like it I won&apos;t object. A more c++&apos;y way of doing this would be to expose a pair of iterators (or a WTF::IteratorRange) that a client can use.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.h:94
&gt; +    ItemType type() const
&gt; +    {
&gt; +        return static_cast&lt;ItemType&gt;(data[0]);
&gt; +    }

I would add a comment here explaining this and in general make sure the data layout is as well documented as possible, as this is where things will get tricky.

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:103
&gt; +            if (auto item = IPC::Decoder::decodeObject&lt;WebCore::DisplayList::ClipOutToPath&gt;(data, length)) {
&gt; +                new (handle.data + sizeof(WebCore::DisplayList::ItemType)) WebCore::DisplayList::ClipOutToPath(WTFMove(*item));
&gt; +                return true;
&gt; +            }
&gt; +            return false;

I would replace this repeated pattern with a helper like:

template&lt;typename T&gt; bool decodeAndCreate(const uint8_t* data, size_t length, WebCore::DisplayList::ItemHandle&amp; handle)
{
     if (auto item = IPC::Decoder::decodeObject&lt;T&gt;(data, length)) {
        new (handle.data + sizeof(WebCore::DisplayList::ItemType)) T(WTFMove(*item));
        return true;
    }
    return false;
}

Ideally, the whole function should probably return an Optional&lt;WebCore::DisplayList::ItemHandle&gt; as we have been trying to avoid out parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703404</commentid>
    <comment_count>3</comment_count>
      <attachid>412811</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-01 11:21:59 -0800</bug_when>
    <thetext>Comment on attachment 412811
Part 1 WIP

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

Thanks for taking a look! While this isn&apos;t quite ready for review, comments are certainly welcome and appreciated :)

I actually wrote a small standalone program to test some of the new display list functionality (namely by appending lots of random items and then dumping the results/sizes) that just links against WebCore. I should be able to adapt this into an API test suite, but I might want to split that out into a separate patch for review, since this part is already so huge :(

I think the WebKit encoding/decoding parts are more difficult to test in a standalone manner like this, but I&apos;ll look into ways to test it too.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.h:81
&gt;&gt; +    WEBCORE_EXPORT void map(Function&lt;void(ItemHandle, Optional&lt;FloatRect&gt;&amp;&amp;)&gt;&amp;&amp;) const;
&gt; 
&gt; map feels a bit to abstract of a name for this to me, though if others like it I won&apos;t object. A more c++&apos;y way of doing this would be to expose a pair of iterators (or a WTF::IteratorRange) that a client can use.

Sounds good — I&apos;ll give this a try.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.h:94
&gt;&gt; +    }
&gt; 
&gt; I would add a comment here explaining this and in general make sure the data layout is as well documented as possible, as this is where things will get tricky.

Good call! Added.

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:103
&gt;&gt; +            return false;
&gt; 
&gt; I would replace this repeated pattern with a helper like:
&gt; 
&gt; template&lt;typename T&gt; bool decodeAndCreate(const uint8_t* data, size_t length, WebCore::DisplayList::ItemHandle&amp; handle)
&gt; {
&gt;      if (auto item = IPC::Decoder::decodeObject&lt;T&gt;(data, length)) {
&gt;         new (handle.data + sizeof(WebCore::DisplayList::ItemType)) T(WTFMove(*item));
&gt;         return true;
&gt;     }
&gt;     return false;
&gt; }
&gt; 
&gt; Ideally, the whole function should probably return an Optional&lt;WebCore::DisplayList::ItemHandle&gt; as we have been trying to avoid out parameters.

👍🏻 will refactor this to return Optional&lt;WebCore::DisplayList::ItemHandle&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703714</commentid>
    <comment_count>4</comment_count>
      <attachid>412811</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-11-02 14:45:41 -0800</bug_when>
    <thetext>Comment on attachment 412811
Part 1 WIP

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

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:188
&gt; +    auto iterateItemsInRange = [&amp;] (uint8_t* initialOffset, size_t length) {

There are *much* faster ways to iterate and execute a bytecode. Let&apos;s keep our eyes out for evidence of this function being a bottleneck. If it is, we can make it faster. (But maybe it&apos;s fine, and all our time will be in graphics code instead.)

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:199
&gt; +            if (client &amp;&amp; client-&gt;requiresDecoding(itemType)) {

This kind of virtual function overhead is one example of needless cost.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:203
&gt; +                    : reinterpret_cast&lt;uint8_t*&gt;(malloc(sizeOfTypeAndItem));

Let&apos;s use fastMalloc.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:160
&gt; +void ItemHandle::destroy()
&gt; +{
&gt; +    switch (type()) {
&gt; +    case ItemType::ClipOutToPath:
&gt; +        return get&lt;ClipOutToPath&gt;().~ClipOutToPath();

This kind of destruction pattern is not great.

It&apos;s poor encapsulation because, if someone writes a new destructor and doesn&apos;t update this function, the destructor is broken and the error is not caught at compile time. Perhaps you can fix this by adding some kind of static_assert in the default case that a class has a deleted destructor.

It&apos;s also not great for performance that destruction must execute an independent switch statement. Perhaps you can combine decoding, mapped function execution, and destruction into a single member function in each display list item. Then the interpreter loop would just read the ItemType and call ItemType::doItAll(bytes, function). Inside doItAll(), any auxiliary data could be allocated as a local variable.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:299
&gt; +    auto* buffer = reinterpret_cast&lt;uint8_t*&gt;(malloc(newBufferCapacity));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703731</commentid>
    <comment_count>5</comment_count>
      <attachid>412979</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 15:30:50 -0800</bug_when>
    <thetext>Created attachment 412979
More WIP (address Sam&apos;s feedback and try to fix builds)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703749</commentid>
    <comment_count>6</comment_count>
      <attachid>412985</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 16:11:01 -0800</bug_when>
    <thetext>Created attachment 412985
More WIP (feedback + more build fixes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703750</commentid>
    <comment_count>7</comment_count>
      <attachid>412811</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 16:11:58 -0800</bug_when>
    <thetext>Comment on attachment 412811
Part 1 WIP

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:188
&gt;&gt; +    auto iterateItemsInRange = [&amp;] (uint8_t* initialOffset, size_t length) {
&gt; 
&gt; There are *much* faster ways to iterate and execute a bytecode. Let&apos;s keep our eyes out for evidence of this function being a bottleneck. If it is, we can make it faster. (But maybe it&apos;s fine, and all our time will be in graphics code instead.)

Ah, so I ended up rewriting this code to use C++ iterators, per Sam&apos;s earlier comment (though I think this comment still applies to my latest WIP patch that uses iterators). My gut feeling here is that the vast majority of work in these benchmarks is spent in other (graphics-related) parts of the code, though it&apos;s quite possible that we can squeeze a percent or so by tweaking the way we iterate.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:199
&gt;&gt; +            if (client &amp;&amp; client-&gt;requiresDecoding(itemType)) {
&gt; 
&gt; This kind of virtual function overhead is one example of needless cost.

So I introduced these client objects to keep as much of the encoding/decoding logic in WebKit2, and out of WebCore. I might be able to elide these virtual function calls by changing the client hooks a bit, so that the client (i.e. WebKit2) simply requests that &quot;all inline items should require custom encoding/decoding&quot;. That said, I&apos;m not sure if the overall cost of having these virtual client hooks is worth optimizing……at least, not yet :)

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:203
&gt;&gt; +                    : reinterpret_cast&lt;uint8_t*&gt;(malloc(sizeOfTypeAndItem));
&gt; 
&gt; Let&apos;s use fastMalloc.

Sounds good! Changed to use fastMalloc and fastFree.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:160
&gt;&gt; +        return get&lt;ClipOutToPath&gt;().~ClipOutToPath();
&gt; 
&gt; This kind of destruction pattern is not great.
&gt; 
&gt; It&apos;s poor encapsulation because, if someone writes a new destructor and doesn&apos;t update this function, the destructor is broken and the error is not caught at compile time. Perhaps you can fix this by adding some kind of static_assert in the default case that a class has a deleted destructor.
&gt; 
&gt; It&apos;s also not great for performance that destruction must execute an independent switch statement. Perhaps you can combine decoding, mapped function execution, and destruction into a single member function in each display list item. Then the interpreter loop would just read the ItemType and call ItemType::doItAll(bytes, function). Inside doItAll(), any auxiliary data could be allocated as a local variable.

I intentionally avoided using `default` switch cases for this reason (such that forgetting to update this function when introducing a new DL item type will result in a compiler error).

That said, it&apos;s a good point that someone could still put a OOL item type in the wrong place and forget to call the destructor, and then we&apos;d end up with mysterious leaks! I&apos;ll add static assertions here to check that the destructor is trivial in all the cases where we skip calling it. I also added static assertions to verify that every drawing item marked inline (T::isInlineItem is true) is also trivially destructible.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:299
&gt;&gt; +    auto* buffer = reinterpret_cast&lt;uint8_t*&gt;(malloc(newBufferCapacity));
&gt; 
&gt; Ditto.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703757</commentid>
    <comment_count>8</comment_count>
      <attachid>412987</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 16:35:13 -0800</bug_when>
    <thetext>Created attachment 412987
More WIP (more build fixes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703763</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-11-02 16:43:45 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:199
&gt; &gt;&gt; +            if (client &amp;&amp; client-&gt;requiresDecoding(itemType)) {
&gt; &gt; 
&gt; &gt; This kind of virtual function overhead is one example of needless cost.
&gt; 
&gt; So I introduced these client objects to keep as much of the
&gt; encoding/decoding logic in WebKit2, and out of WebCore. I might be able to
&gt; elide these virtual function calls by changing the client hooks a bit, so
&gt; that the client (i.e. WebKit2) simply requests that &quot;all inline items should
&gt; require custom encoding/decoding&quot;. That said, I&apos;m not sure if the overall
&gt; cost of having these virtual client hooks is worth optimizing……at least, not
&gt; yet :)

Setting aside cost for a moment, what is the purpose of all this ceremony? Do we intend to support multiple clients doing arbitrary things that radically transform display list behavior?

It&apos;s pretty obfuscatory and anti-encapsulation for core functionality like reading and writing a display list item to run through an abstract client interface. Perhaps an abstract client should allocate/deallocate the underlying buffer and do the wakeup IPC. But abstracting core item functionality through a client interface makes things hard to understand. (And, returning to cost for a moment, much harder to optimize.)

I remember the bad old days when WebCore called out to WebKit for most of its core functionality, including all loading, through abstract client interfaces, and then the only client (WebKit) just turned around and called right back into WebCore. I see some of that kind of design here. For example, ItemBufferWritingClient::requiresEncoding has only one implementation, and it just calls back into WebCore::DisplayList. So much ceremony to end up right back where you started!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703765</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 16:50:44 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #9)
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:199
&gt; &gt; &gt;&gt; +            if (client &amp;&amp; client-&gt;requiresDecoding(itemType)) {
&gt; &gt; &gt; 
&gt; &gt; &gt; This kind of virtual function overhead is one example of needless cost.
&gt; &gt; 
&gt; &gt; So I introduced these client objects to keep as much of the
&gt; &gt; encoding/decoding logic in WebKit2, and out of WebCore. I might be able to
&gt; &gt; elide these virtual function calls by changing the client hooks a bit, so
&gt; &gt; that the client (i.e. WebKit2) simply requests that &quot;all inline items should
&gt; &gt; require custom encoding/decoding&quot;. That said, I&apos;m not sure if the overall
&gt; &gt; cost of having these virtual client hooks is worth optimizing……at least, not
&gt; &gt; yet :)
&gt; 
&gt; Setting aside cost for a moment, what is the purpose of all this ceremony?
&gt; Do we intend to support multiple clients doing arbitrary things that
&gt; radically transform display list behavior?
&gt; 
&gt; It&apos;s pretty obfuscatory and anti-encapsulation for core functionality like
&gt; reading and writing a display list item to run through an abstract client
&gt; interface. Perhaps an abstract client should allocate/deallocate the
&gt; underlying buffer and do the wakeup IPC. But abstracting core item
&gt; functionality through a client interface makes things hard to understand.
&gt; (And, returning to cost for a moment, much harder to optimize.)
&gt; 
&gt; I remember the bad old days when WebCore called out to WebKit for most of
&gt; its core functionality, including all loading, through abstract client
&gt; interfaces, and then the only client (WebKit) just turned around and called
&gt; right back into WebCore. I see some of that kind of design here. For
&gt; example, ItemBufferWritingClient::requiresEncoding has only one
&gt; implementation, and it just calls back into WebCore::DisplayList. So much
&gt; ceremony to end up right back where you started!

That&apos;s true :P I agree the round trip just to tell WebCore that non-inline items require encoding is pretty unnecessary. That said, I think the client hook to actually do the encoding/decoding does need to be there, since WebCore shouldn&apos;t know about IPC/Encoder things.

I&apos;ll remove the client hooks for `requiresEncoding` and `requiresDecoding`, and replace it with a way for WebKit2 to simply tell the display list that it should delegate out to the client for non-inline items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703772</commentid>
    <comment_count>11</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 17:02:32 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #10)
&gt; (In reply to Geoffrey Garen from comment #9)
&gt; &gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:199
&gt; &gt; &gt; &gt;&gt; +            if (client &amp;&amp; client-&gt;requiresDecoding(itemType)) {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This kind of virtual function overhead is one example of needless cost.
&gt; &gt; &gt; 
&gt; &gt; &gt; So I introduced these client objects to keep as much of the
&gt; &gt; &gt; encoding/decoding logic in WebKit2, and out of WebCore. I might be able to
&gt; &gt; &gt; elide these virtual function calls by changing the client hooks a bit, so
&gt; &gt; &gt; that the client (i.e. WebKit2) simply requests that &quot;all inline items should
&gt; &gt; &gt; require custom encoding/decoding&quot;. That said, I&apos;m not sure if the overall
&gt; &gt; &gt; cost of having these virtual client hooks is worth optimizing……at least, not
&gt; &gt; &gt; yet :)
&gt; &gt; 
&gt; &gt; Setting aside cost for a moment, what is the purpose of all this ceremony?
&gt; &gt; Do we intend to support multiple clients doing arbitrary things that
&gt; &gt; radically transform display list behavior?
&gt; &gt; 
&gt; &gt; It&apos;s pretty obfuscatory and anti-encapsulation for core functionality like
&gt; &gt; reading and writing a display list item to run through an abstract client
&gt; &gt; interface. Perhaps an abstract client should allocate/deallocate the
&gt; &gt; underlying buffer and do the wakeup IPC. But abstracting core item
&gt; &gt; functionality through a client interface makes things hard to understand.
&gt; &gt; (And, returning to cost for a moment, much harder to optimize.)
&gt; &gt; 
&gt; &gt; I remember the bad old days when WebCore called out to WebKit for most of
&gt; &gt; its core functionality, including all loading, through abstract client
&gt; &gt; interfaces, and then the only client (WebKit) just turned around and called
&gt; &gt; right back into WebCore. I see some of that kind of design here. For
&gt; &gt; example, ItemBufferWritingClient::requiresEncoding has only one
&gt; &gt; implementation, and it just calls back into WebCore::DisplayList. So much
&gt; &gt; ceremony to end up right back where you started!
&gt; 
&gt; That&apos;s true :P I agree the round trip just to tell WebCore that non-inline
&gt; items require encoding is pretty unnecessary. That said, I think the client
&gt; hook to actually do the encoding/decoding does need to be there, since
&gt; WebCore shouldn&apos;t know about IPC/Encoder things.
&gt; 
&gt; I&apos;ll remove the client hooks for `requiresEncoding` and `requiresDecoding`,
&gt; and replace it with a way for WebKit2 to simply tell the display list that
&gt; it should delegate out to the client for non-inline items.

(Or perhaps, the presence of the client itself can mean &quot;ask the client to encode/decode OOL items&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703775</commentid>
    <comment_count>12</comment_count>
      <attachid>412991</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 17:10:53 -0800</bug_when>
    <thetext>Created attachment 412991
More WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703779</commentid>
    <comment_count>13</comment_count>
      <attachid>412991</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-02 17:28:26 -0800</bug_when>
    <thetext>Comment on attachment 412991
More WIP

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

Can you split out the non-virtual DisplayList item changes from the rest?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:115
&gt; +    stream &lt;&lt; &quot; extent &quot;;
&gt; +    if (extent)
&gt; +        stream &lt;&lt; *extent;
&gt; +    else
&gt; +        stream &lt;&lt; &quot;unknown&quot;;
&gt; +}

You can just pipe in the Optional&lt;&gt; and it will print &quot;null opt&quot; if not set.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.h:187
&gt; +        if (!T::isInlineItem &amp;&amp; m_writingClient) {
&gt; +            static uint8_t itemBuffer[sizeOfTypeAndItem];
&gt; +            itemBuffer[0] = static_cast&lt;uint8_t&gt;(T::itemType);
&gt; +            new (itemBuffer + sizeof(ItemType)) T(std::forward&lt;Args&gt;(args)...);
&gt; +            if (auto sharedBuffer = m_writingClient-&gt;encodeItem({ itemBuffer })) {
&gt; +                auto maxAdditionalCapacityForItem = sharedBuffer-&gt;size() + sizeof(ItemType) + sizeof(size_t) + alignof(uint64_t);
&gt; +                if (m_writtenNumberOfBytes + maxAdditionalCapacityForItem &gt; m_writableBuffer.capacity) {
&gt; +                    auto lastWritableBuffer = std::exchange(m_writableBuffer, { });
&gt; +                    lastWritableBuffer.capacity = std::exchange(m_writtenNumberOfBytes, 0);
&gt; +                    if (lastWritableBuffer.capacity)
&gt; +                        m_readOnlyBuffers.append(WTFMove(lastWritableBuffer));
&gt; +                    m_writableBuffer = createItemBuffer(maxAdditionalCapacityForItem);
&gt; +                }
&gt; +
&gt; +                m_writableBuffer.data[m_writtenNumberOfBytes] = static_cast&lt;uint8_t&gt;(T::itemType);
&gt; +                auto* startOfDataLength = m_writableBuffer.data + m_writtenNumberOfBytes + sizeof(ItemType);
&gt; +                reinterpret_cast&lt;size_t*&gt;(startOfDataLength)[0] = sharedBuffer-&gt;size();
&gt; +
&gt; +                auto* startOfPadding = startOfDataLength + sizeof(size_t);
&gt; +                size_t padding = (alignof(uint64_t) - reinterpret_cast&lt;uintptr_t&gt;(startOfPadding) % alignof(uint64_t)) % alignof(uint64_t);
&gt; +                auto* startOfData = startOfDataLength + sizeof(size_t) + padding;
&gt; +                memcpy(startOfData, sharedBuffer-&gt;dataAsUInt8Ptr(), sharedBuffer-&gt;size());
&gt; +
&gt; +                m_writtenNumberOfBytes += sizeof(ItemType) + sizeof(size_t) + padding + sharedBuffer-&gt;size();
&gt; +            }
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        if (m_writtenNumberOfBytes + sizeOfTypeAndItem &gt; m_writableBuffer.capacity) {
&gt; +            auto lastWritableBuffer = std::exchange(m_writableBuffer, { });
&gt; +            lastWritableBuffer.capacity = std::exchange(m_writtenNumberOfBytes, 0);
&gt; +            if (lastWritableBuffer.capacity)
&gt; +                m_readOnlyBuffers.append(WTFMove(lastWritableBuffer));
&gt; +            m_writableBuffer = createItemBuffer(sizeOfTypeAndItem);
&gt; +        }
&gt; +
&gt; +        auto* startOfItem = &amp;m_writableBuffer.data[m_writtenNumberOfBytes];
&gt; +        startOfItem[0] = static_cast&lt;uint8_t&gt;(T::itemType);
&gt; +        new (startOfItem + sizeof(ItemType)) T(std::forward&lt;Args&gt;(args)...);
&gt; +        m_writtenNumberOfBytes += sizeof(ItemType) + sizeOfItemInBytes(T::itemType);
&gt; +
&gt; +        if (!T::isInlineItem)
&gt; +            m_nonInlineItemsInAllocatedBuffers.append({ startOfItem });

It would be nice to pull as much of this code as possible out of the template. In general it would be best if the buffer management were isolated from code that knows about display list items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703782</commentid>
    <comment_count>14</comment_count>
      <attachid>412993</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 17:37:45 -0800</bug_when>
    <thetext>Created attachment 412993
More WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703783</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-11-02 17:54:40 -0800</bug_when>
    <thetext>&gt; That&apos;s true :P I agree the round trip just to tell WebCore that non-inline
&gt; items require encoding is pretty unnecessary. That said, I think the client
&gt; hook to actually do the encoding/decoding does need to be there, since
&gt; WebCore shouldn&apos;t know about IPC/Encoder things.

But WebCore already knows about IPC/Encoder things! All the display list items have encode() and decode() functions in them.

So, the real solution to this dilemma in the end is to stop treating out-of-line display list items as CoreIPC things, and start treating them as things the DisplayList class knows how to serialize / deserialize into a memory buffer. Perhaps we can&apos;t get all the way there in this patch; but that&apos;s what we want in the end.

&gt; I&apos;ll remove the client hooks for `requiresEncoding` and `requiresDecoding`,
&gt; and replace it with a way for WebKit2 to simply tell the display list that
&gt; it should delegate out to the client for non-inline items.

I don&apos;t think this should be a setting.

WebCore&apos;s display list should be in charge of its own architecture. If some items are inline, and some are out of line, and we need the client to provide some special functionality for some out of line items, OK. But that should all be driven by the display list, and not by an abstract setting that, if fully traced through lots of hoops, one eventually discovers to always by &apos;true&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1703790</commentid>
    <comment_count>16</comment_count>
      <attachid>412991</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-02 19:10:47 -0800</bug_when>
    <thetext>Comment on attachment 412991
More WIP

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

&gt; Can you split out the non-virtual DisplayList item changes from the rest?

This patch was already my attempt to split the non-virtual DL item changes away from the rest :/

I&apos;ll see if I can split away more (e.g. the IPC Decoder adjustment), but most of the pieces that I could be split away from this patch are going to be very small, relative to the size of this patch.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:115
&gt;&gt; +}
&gt; 
&gt; You can just pipe in the Optional&lt;&gt; and it will print &quot;null opt&quot; if not set.

Done!

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.h:187
&gt;&gt; +            m_nonInlineItemsInAllocatedBuffers.append({ startOfItem });
&gt; 
&gt; It would be nice to pull as much of this code as possible out of the template. In general it would be best if the buffer management were isolated from code that knows about display list items.

Sounds good — I think I can pull some of the &quot;out-of-capacity&quot; logic into a private helper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704261</commentid>
    <comment_count>17</comment_count>
      <attachid>413116</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-03 16:04:28 -0800</bug_when>
    <thetext>Created attachment 413116
More WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704298</commentid>
    <comment_count>18</comment_count>
      <attachid>413130</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-03 17:34:33 -0800</bug_when>
    <thetext>Created attachment 413130
More WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704303</commentid>
    <comment_count>19</comment_count>
      <attachid>413131</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-03 17:50:06 -0800</bug_when>
    <thetext>Created attachment 413131
More WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704981</commentid>
    <comment_count>20</comment_count>
      <attachid>413343</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-05 12:47:24 -0800</bug_when>
    <thetext>Created attachment 413343
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704984</commentid>
    <comment_count>21</comment_count>
      <attachid>413131</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-11-05 12:54:09 -0800</bug_when>
    <thetext>Comment on attachment 413131
More WIP

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

I skimmed the middle mechanical bits but the rest looks good.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:224
&gt; +    case ItemType::ClipToDrawingCommands:
&gt; +        return; // FIXME: Support the ability to clone display lists (this is currently only used for display list tracking).

Should this fail more loudly?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:352
&gt; +        m_currentItem = ItemHandle { m_cursor };

As you yourself suggested on slack, perhaps we should copy this out somewhere so it can&apos;t change between validation and application.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:579
&gt; +    constexpr size_t defaultItemBufferCapacity = 1 &lt;&lt; 10;

Should this be extracted out somewhere, or is it OK here?

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:815
&gt; +NO_RETURN

FWIW NO_RETURN_DUE_TO_ASSERT

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:840
&gt; +NO_RETURN

Ditto, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704990</commentid>
    <comment_count>22</comment_count>
      <attachid>413131</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-05 13:12:35 -0800</bug_when>
    <thetext>Comment on attachment 413131
More WIP

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

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:224
&gt;&gt; +        return; // FIXME: Support the ability to clone display lists (this is currently only used for display list tracking).
&gt; 
&gt; Should this fail more loudly?

Sounds good — I&apos;ll add an assertion here.

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayList.cpp:352
&gt;&gt; +        m_currentItem = ItemHandle { m_cursor };
&gt; 
&gt; As you yourself suggested on slack, perhaps we should copy this out somewhere so it can&apos;t change between validation and application.

👍🏻

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItemBuffer.cpp:579
&gt;&gt; +    constexpr size_t defaultItemBufferCapacity = 1 &lt;&lt; 10;
&gt; 
&gt; Should this be extracted out somewhere, or is it OK here?

Hm..I think this should be okay here (as it should only be consulted in this method).

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:449
&gt; +#if !defined(NDEBUG)
&gt; +NO_RETURN
&gt; +#endif

(Replaced this with NO_RETURN_DUE_TO_ASSERT too)

&gt;&gt; Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp:815
&gt;&gt; +NO_RETURN
&gt; 
&gt; FWIW NO_RETURN_DUE_TO_ASSERT

V. nice — changed these three to use NO_RETURN_DUE_TO_ASSERT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705043</commentid>
    <comment_count>23</comment_count>
      <attachid>413362</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-05 16:05:32 -0800</bug_when>
    <thetext>Created attachment 413362
Address feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705274</commentid>
    <comment_count>24</comment_count>
      <attachid>413436</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-06 09:12:16 -0800</bug_when>
    <thetext>Created attachment 413436
Rebase on trunk (after r269503)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705279</commentid>
    <comment_count>25</comment_count>
      <attachid>413437</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-06 09:21:04 -0800</bug_when>
    <thetext>Created attachment 413437
Add missing NO_RETURN_DUE_TO_ASSERT after rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705305</commentid>
    <comment_count>26</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-06 10:55:18 -0800</bug_when>
    <thetext>Committed r269525: &lt;https://trac.webkit.org/changeset/269525&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413437.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705306</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-06 10:56:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/71125743&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705345</commentid>
    <comment_count>28</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-11-06 12:06:53 -0800</bug_when>
    <thetext>Apple-Win-10-Debug-Build can&apos;t compile.

https://build.webkit.org/builders/Apple-Win-10-Debug-Build/builds/17046

&gt; C:\cygwin\home\buildbot\worker\win10-debug\build\Source\WebCore\platform/graphics/displaylists/DisplayListItems.cpp(448,47): error C2381: &apos;WebCore::DisplayList::DrawImageBuffer::apply&apos;: redefinition; &apos;__declspec(noreturn)&apos; or &apos;[[noreturn]]&apos; differs (compiling source file C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\DerivedSources\WebCore\unified-sources\UnifiedSource-3c72abbe-26.cpp) [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\worker\win10-debug\build\Source\WebCore\platform\graphics\displaylists\DisplayListItems.h(1331): message : see declaration of &apos;WebCore::DisplayList::DrawImageBuffer::apply&apos; (compiling source file C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\DerivedSources\WebCore\unified-sources\UnifiedSource-3c72abbe-26.cpp) [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705350</commentid>
    <comment_count>29</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-06 12:10:57 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #28)
&gt; Apple-Win-10-Debug-Build can&apos;t compile.
&gt; 
&gt; https://build.webkit.org/builders/Apple-Win-10-Debug-Build/builds/17046
&gt; 
&gt; &gt; C:\cygwin\home\buildbot\worker\win10-debug\build\Source\WebCore\platform/graphics/displaylists/DisplayListItems.cpp(448,47): error C2381: &apos;WebCore::DisplayList::DrawImageBuffer::apply&apos;: redefinition; &apos;__declspec(noreturn)&apos; or &apos;[[noreturn]]&apos; differs (compiling source file C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\DerivedSources\WebCore\unified-sources\UnifiedSource-3c72abbe-26.cpp) [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]
&gt; &gt; C:\cygwin\home\buildbot\worker\win10-debug\build\Source\WebCore\platform\graphics\displaylists\DisplayListItems.h(1331): message : see declaration of &apos;WebCore::DisplayList::DrawImageBuffer::apply&apos; (compiling source file C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\DerivedSources\WebCore\unified-sources\UnifiedSource-3c72abbe-26.cpp) [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\WebCore\WebCore.vcxproj]

Sorry about that — looking into this now.

From glancing at the error message, it looks like this version of MSVC requires NO_RETURN_DUE_TO_ASSERT in both the method definition and declaration...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412811</attachid>
            <date>2020-10-30 16:54:14 -0700</date>
            <delta_ts>2020-11-02 15:30:48 -0800</delta_ts>
            <desc>Part 1 WIP</desc>
            <filename>bug-218406-20201030165412.patch</filename>
            <type>text/plain</type>
            <size>376634</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY4MmI2YTZiNjg2ZjY4
NmM1MmYwYzM3MDYxNzNlYThmMGIxM2RjZS4uNTQwNjE5MTEzYTg2MDE1ZDljY2NjYTQwMWQyNzY1
NDEyYmI0N2ZkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0MyBAQAorMjAyMC0xMC0zMCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV0lQIG9ubHkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpjbGVhcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHVtcERyYXdpbmdJdGVtRXh0ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNUZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZHVtcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXNF
bXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
Oml0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OjpzZXRJdGVtQnVmZmVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjptYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRl
bUV4dGVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVtQnVmZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVt
QXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OjppdGVtQ291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6bGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6dGFrZURpc3BsYXlMaXN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhh
bmRsZTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Om1fYWxsb2NhdGVkQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
bV9yZWFkT25seUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fd3Jp
dGFibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fd3JpdGFibGVT
aXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpj
cmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVyOjpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlOjpvcGVyYXRvciBib29sIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlOjpv
cGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJIYW5kbGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlckhhbmRsZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpnZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1IYW5kbGU6OmlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVyV3JpdGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudDo6fkl0ZW1C
dWZmZXJSZWFkaW5nQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVyOjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVyOjpyZWFkT25seUJ1ZmZlcnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmlzSW5saW5lSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmls
bEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OkRyYXdHbHlwaHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZm
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFw
cGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6OkRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OkZpbGxSZWN0
V2l0aEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURh
dGE6OlB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRG
cmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06Okl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW06OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OlJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRl
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2Fw
OjpTZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OkNsZWFyU2hh
ZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlw
T3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9Q
YXRoOjpDbGlwT3V0VG9QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6Q2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2Nh
bEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNj
YWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1Bh
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpG
aWxsUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpGaWxsUm91bmRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OkZp
bGxJbmxpbmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUGF0aDo6RmlsbFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9r
ZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6
QXBwbHlTdHJva2VQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURl
dmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNhdmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlc3RvcmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6U2V0
SW5saW5lRmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OlNl
dElubGluZVN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOjpTZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0cm9rZVRoaWNrbmVzczo6dGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdGF0ZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwOjpTZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Q2FwOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZUNhcDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVEYXNoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6
OlNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRNaXRlckxpbWl0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcE91dDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Q2xpcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdHbHlwaHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZElt
YWdlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1RpbGVkSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6
c291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZl
SW1hZ2U6OmRlc3RpbmF0aW9uUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Bh
dHRlcm46OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lc0ZvclRleHQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
RWxsaXBzZTo6RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1
c1JpbmdSZWN0czo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3Q6OkZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aENvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSb3VuZGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxp
bmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbElubGluZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6
aW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6
U3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6
Q2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpB
cHBseVN0cm9rZVBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRl
cm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0l0ZW06OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6
bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdJdGVtOjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
b3RhdGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Um90YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNjYWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNjYWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNjYWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRDVE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRl
Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZUNhcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9Q
YXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2VCdWZmZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd05hdGl2ZUltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVk
UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElu
bGluZVBhdGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6
ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQ
YWludEZyYW1lRm9yTWVkaWE6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQ
YXRoOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZUlubGluZVBhdGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xl
YXJSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0
dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpB
cHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFj
dG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclNoYWRvdyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENU
TSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRl
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRp
ZEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjphcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpEZWxlZ2F0ZTo6d2lsbEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZTo6ZGlkQXBwZW5kSXRlbU9mVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6Oml0ZW1Db3VudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRl
Ojp3aWxsQXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OkRlbGVnYXRlOjpkaWRBcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OnJlcGxheSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGU6OmFw
cGx5KToKKwogMjAyMC0xMC0zMCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIEFYOiBJbmNvcnJlY3QgbGlzdCBvZiB2b2ljZXMgYmVpbmcgZGlzcGxheWVk
IG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBmZmQ0Y2U2ZTMzOWY4Y2U0YzI4OTBlYzk2Y2VlYTRjYjc3OGI1
YTcwLi4zOWU5MzJjZTY4YTE1ZGIzMTQ2MTZhYzkxNGM5ZDM3Y2U3MzI1MmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU1IEBACisyMDIwLTEwLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3BsYXkgbGlzdHNdIEVuY29kZSBk
aXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSVAgb25seS4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBH
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseVJlc291cmNlSXRlbSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlEaXNwbGF5TGlzdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxp
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3Bs
YXlMaXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6ZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpzaGFyZWRJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46CisgICAgICAg
ICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpEZWNv
ZGVyKToKKyAgICAgICAgKElQQzo6bV9idWZmZXJEZWFsbG9jYXRvcik6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL0RlY29kZXIuaDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0
KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkVu
Y29kZXI6OkVuY29kZXIpOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpyZWxlYXNlQXR0YWNobWVu
dHMpOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpoYXNBdHRhY2htZW50cyBjb25zdCk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RI
YW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaERyYXdp
bmdDb250ZXh0QW5kQ29tbWl0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VT
aGFyZWRJdGVtQnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94
eS5jcHA6CisKIDIwMjAtMTAtMzAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgQ29ycmVjdCBzYW5kYm94IHZpb2xhdGlvbnMgaW4gR1BVIFByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggNzZiYWYwOTE3MGE4ODgxYzk4OWRkNDBlMzVhMmI3NTQ5NjRjMDRjYS4u
MTk2Y2QxMmY0NjMwNjc4ZTgxNWNlYjVhYzYyYjEzMGRkZWZjODIwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTE5NjAsNiArMTk2MCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUxpZ2h0aW5nTkVPTi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bVR5cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3VyY2UuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmRlOTVhN2EyNjk4ODNkNTJjNmI5NzhmN2JhNWM0ZDFiZDEwZTAwYy4uYzM2ZWEwMGRm
N2MyZWRiZWU1Y2Q0MzhjOGQzMzBjNDVmMzUzZjU1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE1OCw2ICs1MTU4LDcgQEAK
IAkJRjNBQkZFMEMxMzBFOURBMDAwRTdGN0QxIC8qIEluc3RydW1lbnRpbmdBZ2VudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzQUJGRTBCMTMwRTlE
QTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggKi87IH07CiAJCUYzRDQ2MTQ5MTE2
MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjNENDYxNDcxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJy
b3JIYW5kbGVyLmggKi87IH07CiAJCUY0MDNFNzg3MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktl
eUhpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
MDNFNzg1MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDIyQjhCODI1M0Y3MUZDMDA0RTc3
RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRjQyOTI2MTgyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyOTI2
MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MzNFOTAzMURCQkRCQTIw
MEVGMEQxNCAvKiBTdGF0aWNQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFz
dGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUY0NDBFNzdBMjMzRDk0RDcwMDYzRjlBQiAvKiBOYXZpZ2F0b3JDbGlwYm9hcmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NDBFNzZGMjMzRDk0
RDMwMDYzRjlBQiAvKiBOYXZpZ2F0b3JDbGlwYm9hcmQuaCAqLzsgfTsKQEAgLTUxODIsNiArNTE4
Myw3IEBACiAJCUY0OEQyQTdFMjE1NzE4MjYwMEM2NzUyQiAvKiBGb250QXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBNzEyMTU2
REMwQTAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ4RDJBQTUyMTU5NzQwRDAwQzY3NTJCIC8qIENv
bG9yQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi87IH07CiAJCUY0OTc4
Njg4MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTc4Njg3MUZGNDVGQTUwMEUwNjBB
QiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlGNEE2RDZBNDI1NEM1MTJDMDBCNjVGQUEgLyogRGlzcGxheUxp
c3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjRBNkQ2QTMyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEI0MjJDNDIy
MEMwNTY4MDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjQyMkMyMjIwQzAwMDAwMDlFMUU3RCAvKiBET01Q
YXN0ZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUY0QkZCOTg1MUUxRERGOUIwMDg2MkMyNCAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMg
aW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0ODM4
OTgzMUUxRERGMkIwMDc2QjdFQSAvKiBEdW1wRWRpdGluZ0hpc3RvcnkuanMgKi87IH07CiAJCUY0
QkZCOTg2MUUxRERGOUIwMDg2MkMyNCAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgaW4gQ29weSBT
Y3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0ODM4OTg0MUUxRERG
MkIwMDc2QjdFQSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMgKi87IH07CkBAIC0xNjMwNSw2ICsx
NjMwNyw4IEBACiAJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9ySGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NTIzNjNCNThDMDAwNDQ1NTAgLyogRW50
ZXJLZXlIaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudGVyS2V5SGludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDAzRTc4NjIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVudGVyS2V5SGludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI2MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNw
bGF5TGlzdEl0ZW1CdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQyOTI2MTcyNTI2NEQ0
NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YVBsYXllcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQyQ0VC
NTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFz
dGVib2FyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNQYXN0ZWJv
YXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjM1OCw2ICsxNjM2Miw4IEBA
CiAJCUY0OEQyQUE0MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQ29sb3JDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYXN0ZWJvYXJkSXRlbUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjQ5RTk4RTQyMURFRTZDMTAwOUFFNTVFIC8qIEVkaXRBY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRWRpdEFjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0
QTZENkEzMjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0SXRlbVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjRBNkQ2QTYyNTRDNTFFOTAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0QjQyMkMyMjIwQzAwMDAwMDlFMUU3RCAvKiBET01QYXN0ZUFjY2Vz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01QYXN0ZUFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNEM1RjIwNTI0NzlFN0VFMDBFOUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjRDNUYyMDgyNDc5RTlDODAwRTlCNEY1IC8qIENsaXBib2FyZElt
YWdlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBib2FyZEltYWdlUmVhZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NjEwLDggKzE3NjE2LDEyIEBACiAJ
CQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
Y3BwICovLAogCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmggKi8sCiAJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLywKKwkJCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLywKKwkJCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTgg
LyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdB
MkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJRjRBNkQ2QTYyNTRDNTFFOTAwQjY1
RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwICovLAorCQkJCUY0QTZENkEzMjU0QzUxMkMw
MEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAogCQkJCTBGRTVGQkNGMUMz
REQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8sCiAJCQkJMEZFNUZCRDAx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwICovLApAQCAtMzE0MzEs
NyArMzE0NDEsOSBAQAogCQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5NDAyNDA4OTY0MDAwREU0RDJGIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNFMjQwODk2
MzUwMERFNEQyRiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNDIyQjhCODI1M0Y3MUZDMDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRBNkQ2QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERp
c3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1
RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDZhODBiODQ2MDBl
MGEyYmIwNTU1MjM5NTVmZTljYzYwYTlhZWMzY2IuLmY0N2RiZDJkOWY4YmUyZTg1NTVhYjZkOTY3
OGE5NWU2NjVkYTI4NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMDIxLDcgKzIwMjEs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkKICAgICBBU1NFUlQobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIAog
ICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdCgp
OwotICAgIGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkgeworICAgIGlmICghZGlzcGxheUxp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIERpc3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcigq
Y2FudmFzQmFzZSgpLmRyYXdpbmdDb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKICAgICAgICAgcmVw
bGF5ZXIucmVwbGF5KHsgRmxvYXRQb2ludDo6emVybygpLCBjYW52YXNCYXNlKCkuc2l6ZSgpIH0p
OwogICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAwZDFjYTkyZDYwNDVlYjM3
YTc4ZDNlMTg5N2MyNmY0MmI5Yzc2ZjNhLi41OWQzMjMwZTBlOGY0MzYwZDczZWIzMzY4MjUzNGEz
ZTQ5MGE2ODNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaApAQCAtMTYzLDEwICsxNjMsMTAgQEAgc3RydWN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlIHsKICAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsK
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUm
Jik7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFw
aGljc0NvbnRleHRTdGF0ZSYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51bSBDaGFu
Z2UgOiB1aW50MzJfdCB7CiAgICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAg
ICAgICAgICA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCmluZGV4IGZmZDlkNmRk
ZmI2MGFjMWEwOTcyMmRmYWRjODJmMTE1MzBlOTIwYTEuLmExNmU5MDgxOGYxNGMxY2M5ZTNmYzRl
N2Y0MmNlMTlkYWRiMzgyMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlz
dEl0ZW1zLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KQEAgLTQ4LDE3ICs0OSwzNyBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKCkgY29uc3QK
IH0KICNlbmRpZgogCitEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJiBvdGhl
cikKKyAgICA6IG1faXRlbXMoV1RGTW92ZShvdGhlci5tX2l0ZW1zKSkKK3sKK30KKworRGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0KEl0ZW1CdWZmZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAgICA6IG1f
aXRlbXMobWFrZVVuaXF1ZTxJdGVtQnVmZmVyPihXVEZNb3ZlKGhhbmRsZXMpKSkKK3sKK30KKwor
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KCkgPSBkZWZhdWx0OworRGlzcGxheUxpc3Q6On5EaXNw
bGF5TGlzdCgpID0gZGVmYXVsdDsKKworRGlzcGxheUxpc3QmIERpc3BsYXlMaXN0OjpvcGVyYXRv
cj0oRGlzcGxheUxpc3QmJiBvdGhlcikKK3sKKyAgICBtX2l0ZW1zID0gV1RGTW92ZShvdGhlci5t
X2l0ZW1zKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgRGlzcGxheUxpc3Q6OmNsZWFy
KCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9p
dGVtcy0+Y2xlYXIoKTsKIH0KIAotYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdz
KEFzVGV4dEZsYWdzIGZsYWdzLCBjb25zdCBJdGVtJiBpdGVtKQorYm9vbCBEaXNwbGF5TGlzdDo6
c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7
CiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRl
OgogICAgICAgICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVy
YXRpb25zKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gZG93bmNhc3Q8
U2V0U3RhdGU+KGl0ZW0pOworICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRl
bS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBk
cm9wIHRoZSBpdGVtIGlmIHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0t
c3BlY2lmaWMuCiAgICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkubV9jaGFuZ2VGbGFn
cyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hh
bmdlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgwLDE0ICsxMDEsMjcgQEAg
Ym9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBj
b25zdCBJdGVtJiBpdGVtKQogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBkdW1w
RHJhd2luZ0l0ZW1FeHRlbnQoVGV4dFN0cmVhbSYgc3RyZWFtLCBPcHRpb25hbDxGbG9hdFJlY3Q+
JiYgZXh0ZW50KQoreworICAgIHN0cmVhbSA8PCAiIGV4dGVudCAiOworICAgIGlmIChleHRlbnQp
CisgICAgICAgIHN0cmVhbSA8PCAqZXh0ZW50OworICAgIGVsc2UKKyAgICAgICAgc3RyZWFtIDw8
ICJ1bmtub3duIjsKK30KKwogU3RyaW5nIERpc3BsYXlMaXN0Ojphc1RleHQoQXNUZXh0RmxhZ3Mg
ZmxhZ3MpIGNvbnN0CiB7CiAgICAgVGV4dFN0cmVhbSBzdHJlYW0oVGV4dFN0cmVhbTo6TGluZU1v
ZGU6Ok11bHRpcGxlTGluZSwgVGV4dFN0cmVhbTo6Rm9ybWF0dGluZzo6U1ZHU3R5bGVSZWN0KTsK
LSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2xpc3QpIHsKKyAgICBtYXAoWyZdIChJdGVtSGFuZGxl
IGl0ZW0sIE9wdGlvbmFsPEZsb2F0UmVjdD4mJiBleHRlbnQpIHsKICAgICAgICAgaWYgKCFzaG91
bGREdW1wRm9yRmxhZ3MoZmxhZ3MsIGl0ZW0pKQotICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cChz
dHJlYW0pOwogICAgICAgICBzdHJlYW0gPDwgaXRlbTsKLSAgICB9CisgICAgICAgIGlmIChpdGVt
LmlzRHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIGR1bXBEcmF3aW5nSXRlbUV4dGVudChzdHJl
YW0sIFdURk1vdmUoZXh0ZW50KSk7CisgICAgfSk7CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNl
KCk7CiB9CiAKQEAgLTk2LDExICsxMzAsMTIgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0
U3RyZWFtJiB0cykgY29uc3QKICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsK
ICAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsKIAotICAgIHNpemVfdCBudW1JdGVtcyA9IG1fbGlz
dC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7Ci0g
ICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOwotICAgICAgICB0cyA8PCBp
IDw8ICIgIiA8PCBtX2xpc3RbaV0uZ2V0KCk7Ci0gICAgfQorICAgIG1hcChbJl0gKEl0ZW1IYW5k
bGUgaXRlbSwgT3B0aW9uYWw8RmxvYXRSZWN0PiYmIGV4dGVudCkgeworICAgICAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAg
aWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAgICAgZHVtcERyYXdpbmdJdGVtRXh0
ZW50KHRzLCBXVEZNb3ZlKGV4dGVudCkpOworICAgIH0pOwogICAgIHRzLnN0YXJ0R3JvdXAoKTsK
ICAgICB0cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOwogICAgIHRzLmVu
ZEdyb3VwKCk7CkBAIC0xMDgsMTEgKzE0MywyMjkgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKIAogc2l6ZV90IERpc3BsYXlMaXN0OjpzaXplSW5CeXRlcygp
IGNvbnN0CiB7Ci0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiByZWYgOiBt
X2xpc3QpCi0gICAgICAgIHJlc3VsdCArPSBJdGVtOjpzaXplSW5CeXRlcyhyZWYpOworICAgIHJl
dHVybiBtX2l0ZW1zID8gbV9pdGVtcy0+c2l6ZUluQnl0ZXMoKSA6IDA7Cit9CisKK2Jvb2wgRGlz
cGxheUxpc3Q6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pdGVtcyB8fCBtX2l0
ZW1zLT5pc0VtcHR5KCk7Cit9CisKK0l0ZW1CdWZmZXImIERpc3BsYXlMaXN0OjppdGVtQnVmZmVy
KCkKK3sKKyAgICBpZiAoIW1faXRlbXMpCisgICAgICAgIG1faXRlbXMgPSBtYWtlVW5pcXVlPEl0
ZW1CdWZmZXI+KCk7CisgICAgcmV0dXJuICptX2l0ZW1zOworfQogCi0gICAgcmV0dXJuIHJlc3Vs
dDsKK3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRp
bmdDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7
Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVu
dCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZv
aWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAg
IGlmIChtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3Zl
KG1hcEZ1bmN0aW9uKSk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Om1hcChGdW5jdGlvbjx2b2lk
KEl0ZW1IYW5kbGUsIE9wdGlvbmFsPEZsb2F0UmVjdD4mJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0
Cit7CisgICAgaWYgKCFtX2l0ZW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdGV4cHIg
c2l6ZV90IHNpemVPZkJ1ZmZlckZvck5vbklubGluZUl0ZW1zID0gMjU2OworICAgIHN0YXRpYyB1
aW50OF90IGZpeGVkQnVmZmVyRm9yTm9uSW5saW5lSXRlbXNbc2l6ZU9mQnVmZmVyRm9yTm9uSW5s
aW5lSXRlbXNdIHsgMCB9OworCisgICAgc2l6ZV90IGRyYXdpbmdJdGVtQ291bnQgPSAwOworICAg
IGF1dG8qIGNsaWVudCA9IG1faXRlbXMtPm1fcmVhZGluZ0NsaWVudDsKKworICAgIGF1dG8gaXRl
cmF0ZUl0ZW1zSW5SYW5nZSA9IFsmXSAodWludDhfdCogaW5pdGlhbE9mZnNldCwgc2l6ZV90IGxl
bmd0aCkgeworICAgICAgICBhdXRvKiBvZmZzZXQgPSBpbml0aWFsT2Zmc2V0OworICAgICAgICBh
dXRvKiBlbmRPZkJ1ZmZlciA9IG9mZnNldCArIGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKG9mZnNl
dCA8IGVuZE9mQnVmZmVyKSB7CisgICAgICAgICAgICBhdXRvIGl0ZW1UeXBlID0gc3RhdGljX2Nh
c3Q8SXRlbVR5cGU+KG9mZnNldFswXSk7CisgICAgICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGV4dGVudDsKKyAgICAgICAgICAgIGlmIChpc0RyYXdpbmdJdGVtKGl0ZW1UeXBlKSAmJiAhbV9k
cmF3aW5nSXRlbUV4dGVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZXh0ZW50ID0g
bV9kcmF3aW5nSXRlbUV4dGVudHNbZHJhd2luZ0l0ZW1Db3VudF07CisgICAgICAgICAgICAgICAg
ZHJhd2luZ0l0ZW1Db3VudCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2xp
ZW50ICYmIGNsaWVudC0+cmVxdWlyZXNEZWNvZGluZyhpdGVtVHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNpemVPZlR5cGVBbmRJdGVtID0gc2l6ZU9mSXRlbUluQnl0ZXMoaXRlbVR5cGUp
ICsgc2l6ZW9mKEl0ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzdGFydE9mVGVtcG9y
YXJ5SXRlbSA9IHNpemVPZlR5cGVBbmRJdGVtIDw9IHNpemVPZkJ1ZmZlckZvck5vbklubGluZUl0
ZW1zCisgICAgICAgICAgICAgICAgICAgID8gZml4ZWRCdWZmZXJGb3JOb25JbmxpbmVJdGVtcwor
ICAgICAgICAgICAgICAgICAgICA6IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1hbGxvYyhz
aXplT2ZUeXBlQW5kSXRlbSkpOworCisgICAgICAgICAgICAgICAgc3RhcnRPZlRlbXBvcmFyeUl0
ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihpdGVtVHlwZSk7CisKKyAgICAgICAgICAgICAg
ICBJdGVtSGFuZGxlIGl0ZW0geyBzdGFydE9mVGVtcG9yYXJ5SXRlbSB9OworCisgICAgICAgICAg
ICAgICAgYXV0byBzaXplT2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihvZmZzZXQg
KyBzaXplb2YoSXRlbVR5cGUpKVswXTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzdGFydE9mRGF0
YSA9IG9mZnNldCArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBzdGFydE9mRGF0YSArIHNpemVPZkRhdGE7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0IDw9IGVuZE9mQnVmZmVyKTsKKworICAgICAgICAgICAg
ICAgIGlmIChjbGllbnQtPmRlY29kZUl0ZW0oc3RhcnRPZkRhdGEsIHNpemVPZkRhdGEsIGl0ZW0p
KSB7CisgICAgICAgICAgICAgICAgICAgIG1hcEZ1bmN0aW9uKGl0ZW0sIFdURk1vdmUoZXh0ZW50
KSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGVzdHJveSgpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmIChzdGFydE9mVGVtcG9yYXJ5SXRlbSAhPSBmaXhlZEJ1
ZmZlckZvck5vbklubGluZUl0ZW1zKQorICAgICAgICAgICAgICAgICAgICBmcmVlKHN0YXJ0T2ZU
ZW1wb3JhcnlJdGVtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSXRl
bUhhbmRsZSBpdGVtIHsgb2Zmc2V0IH07CisgICAgICAgICAgICAgICAgbWFwRnVuY3Rpb24oaXRl
bSwgV1RGTW92ZShleHRlbnQpKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaXRlbS5zaXpl
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gZW5kT2ZCdWZm
ZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG9mZnNldCA8IGVuZE9mQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKGF1
dG8mIGJ1ZmZlciA6IG1faXRlbXMtPnJlYWRPbmx5QnVmZmVycygpKQorICAgICAgICBpdGVyYXRl
SXRlbXNJblJhbmdlKGJ1ZmZlci5kYXRhICsgYnVmZmVyLm9mZnNldCwgYnVmZmVyLmNhcGFjaXR5
KTsKKworICAgIGlmIChtX2l0ZW1zLT5tX3dyaXRhYmxlU2l6ZUluQnl0ZXMpIHsKKyAgICAgICAg
YXV0byYgd3JpdGFibGVCdWZmZXIgPSBtX2l0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyOworICAgICAg
ICBpdGVyYXRlSXRlbXNJblJhbmdlKHdyaXRhYmxlQnVmZmVyLmRhdGEgKyB3cml0YWJsZUJ1ZmZl
ci5vZmZzZXQsIG1faXRlbXMtPm1fd3JpdGFibGVTaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2
b2lkIERpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCB2YWx1ZSkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCkpOwor
ICAgIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzID0gdmFsdWU7Cit9CisKK3ZvaWQgRGlzcGxh
eUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCit7CisgICAgc3dpdGNoIChpdGVtLnR5cGUo
KSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2F2
ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNsYXRlPihp
dGVtLmdldDxUcmFuc2xhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNj
YWxlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+
KGl0ZW0uZ2V0PFNldENUTT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdy
YWRpZW50OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oaXRl
bS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9y
PihpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZVN0cm9r
ZUNvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9r
ZVRoaWNrbmVzcz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5n
ZXQ8U2V0U3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGlu
ZURhc2g+KGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0
TGluZUpvaW4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Q2xlYXJTaGFkb3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwOgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcE91
dD4oaXRlbS5nZXQ8Q2xpcE91dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihpdGVtLmdldDxDbGlwT3V0
VG9QYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxDbGlwUGF0aD4oaXRlbS5nZXQ8Q2xpcFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogU3Vw
cG9ydCB0aGUgYWJpbGl0eSB0byBjbG9uZSBkaXNwbGF5IGxpc3RzICh0aGlzIGlzIGN1cnJlbnRs
eSBvbmx5IHVzZWQgZm9yIGRpc3BsYXkgbGlzdCB0cmFja2luZykuCisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0dseXBoczoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3R2x5cGhzPihpdGVtLmdl
dDxEcmF3R2x5cGhzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlPihpdGVtLmdldDxEcmF3SW1hZ2U+KCkpOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdU
aWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+KGl0ZW0uZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0lt
YWdlQnVmZmVyPihpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZlSW1h
Z2U+KGl0ZW0uZ2V0PERyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1BhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PERy
YXdQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxEcmF3UmVjdD4oaXRlbS5nZXQ8RHJhd1JlY3Q+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lPihpdGVtLmdl
dDxEcmF3TGluZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxEcmF3TGluZXNG
b3JUZXh0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0u
Z2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdFbGxpcHNlPihpdGVtLmdldDxE
cmF3RWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHJl
dHVybiBhcHBlbmQ8RHJhd1BhdGg+KGl0ZW0uZ2V0PERyYXdQYXRoPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9j
dXNSaW5nUGF0aD4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9j
dXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3Q+KGl0ZW0u
Z2V0PEZpbGxSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJl
Y3RXaXRoQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50
OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxG
aWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5n
ZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxG
aWxsUm91bmRlZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihp
dGVtLmdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbElubGluZVBhdGg+KGl0
ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUGF0aD4oaXRlbS5nZXQ8RmlsbFBhdGg+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZp
bGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5n
ZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVk
aWE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtLmdldDxQ
YWludEZyYW1lRm9yTWVkaWE+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUmVjdD4oaXRlbS5nZXQ8U3Ryb2tlUmVjdD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTdHJva2VJbmxpbmVQYXRoPihpdGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9r
ZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZVBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUVsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4oaXRlbS5nZXQ8
U3Ryb2tlRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsZWFyUmVjdD4oaXRlbS5nZXQ8Q2xlYXJSZWN0PigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdldDxFbmRUcmFuc3Bh
cmVuY3lMYXllcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbS5nZXQ8QXBwbHlT
dHJva2VQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5Rmls
bFBhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbS5nZXQ8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCBkNmJlMjc0YzY4ZGVlZmI0YzBk
NTM2MWJlNjQ4MTUyNDAzMmM5ZjQxLi41MDQ5MDE3MGM2YzRkYWI3MmJmOTEwYWJjN2JhNTFiOGVj
NDFkN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMjUsMTAgKzI1LDEzIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zOSwxMDEg
KzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qgewog
Ci1lbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7Ci0gICAgU2F2ZSwKLSAgICBSZXN0b3Jl
LAotICAgIFRyYW5zbGF0ZSwKLSAgICBSb3RhdGUsCi0gICAgU2NhbGUsCi0gICAgQ29uY2F0ZW5h
dGVDVE0sCi0gICAgU2V0Q1RNLAotICAgIFNldElubGluZUZpbGxHcmFkaWVudCwKLSAgICBTZXRJ
bmxpbmVGaWxsQ29sb3IsCi0gICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCi0gICAgU2V0U3Ryb2tl
VGhpY2tuZXNzLAotICAgIFNldFN0YXRlLAotICAgIFNldExpbmVDYXAsCi0gICAgU2V0TGluZURh
c2gsCi0gICAgU2V0TGluZUpvaW4sCi0gICAgU2V0TWl0ZXJMaW1pdCwKLSAgICBDbGVhclNoYWRv
dywKLSAgICBDbGlwLAotICAgIENsaXBPdXQsCi0gICAgQ2xpcE91dFRvUGF0aCwKLSAgICBDbGlw
UGF0aCwKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMsCi0gICAgRHJhd0dseXBocywKLSAgICBE
cmF3SW1hZ2UsCi0gICAgRHJhd1RpbGVkSW1hZ2UsCi0gICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2Us
Ci0gICAgRHJhd0ltYWdlQnVmZmVyLAotICAgIERyYXdOYXRpdmVJbWFnZSwKLSAgICBEcmF3UGF0
dGVybiwKLSAgICBEcmF3UmVjdCwKLSAgICBEcmF3TGluZSwKLSAgICBEcmF3TGluZXNGb3JUZXh0
LAotICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIsCi0gICAgRHJhd0VsbGlwc2UsCi0gICAg
RHJhd1BhdGgsCi0gICAgRHJhd0ZvY3VzUmluZ1BhdGgsCi0gICAgRHJhd0ZvY3VzUmluZ1JlY3Rz
LAotICAgIEZpbGxSZWN0LAotICAgIEZpbGxSZWN0V2l0aENvbG9yLAotICAgIEZpbGxSZWN0V2l0
aEdyYWRpZW50LAotICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKLSAgICBGaWxsUm91bmRlZFJlY3Qs
Ci0gICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCi0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCi0gICAgRmlsbElubGluZVBhdGgsCi0jZW5kaWYKLSAgICBGaWxsUGF0aCwKLSAgICBGaWxs
RWxsaXBzZSwKLSAgICBQdXRJbWFnZURhdGEsCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhLAotICAg
IFN0cm9rZVJlY3QsCi0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgU3Ryb2tlSW5s
aW5lUGF0aCwKLSNlbmRpZgotICAgIFN0cm9rZVBhdGgsCi0gICAgU3Ryb2tlRWxsaXBzZSwKLSAg
ICBDbGVhclJlY3QsCi0gICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKLSAgICBFbmRUcmFuc3Bh
cmVuY3lMYXllciwKLSNpZiBVU0UoQ0cpCi0gICAgQXBwbHlTdHJva2VQYXR0ZXJuLCAvLyBGSVhN
RTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCi0gICAgQXBwbHlGaWxsUGF0dGVybiwg
Ly8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgotI2VuZGlmCi0gICAgQXBw
bHlEZXZpY2VTY2FsZUZhY3RvciwKLX07Ci0KLWNsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRl
ZDxJdGVtPiB7Ci1wdWJsaWM6Ci0gICAgSXRlbSgpID0gZGVsZXRlOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgSXRlbShJdGVtVHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SXRlbSgp
OwotCi0gICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90
eXBlOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLSAg
ICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotICAgIHN0YXRpYyBz
aXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8SXRlbT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgSXRlbVR5cGUgbV90eXBlOwotfTsKLQogZW51bSBBc1RleHRGbGFnIHsKICAg
ICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKICAgICBJbmNsdWRlc1BsYXRm
b3JtT3BlcmF0aW9ucyAgICAgID0gMSA8PCAwLApAQCAtMTQ2LDg2ICs1NCw2MCBAQCBjbGFzcyBE
aXNwbGF5TGlzdCB7CiAgICAgZnJpZW5kIGNsYXNzIFJlY29yZGVyOwogICAgIGZyaWVuZCBjbGFz
cyBSZXBsYXllcjsKIHB1YmxpYzoKLSAgICBEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKLSAgICBE
aXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQg
RGlzcGxheUxpc3QoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdChEaXNwbGF5TGlz
dCYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdChJdGVtQnVmZmVySGFuZGxlcyYm
KTsKIAotICAgIERpc3BsYXlMaXN0JiBvcGVyYXRvcj0oRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0
OworICAgIFdFQkNPUkVfRVhQT1JUIH5EaXNwbGF5TGlzdCgpOwogCi0gICAgdm9pZCBkdW1wKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0JiBv
cGVyYXRvcj0oRGlzcGxheUxpc3QmJik7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmPEl0ZW0+PiYg
bGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQotICAgIEl0ZW0mIGl0ZW1BdChzaXplX3Qg
aW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7Ci0gICAgfQorICAgIHZvaWQgZHVtcChX
VEY6OlRleHRTdHJlYW0mKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKIAotICAgIHNpemVfdCBpdGVtQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5
dGVzKCkgY29uc3Q7Ci0gICAgCiAgICAgU3RyaW5nIGFzVGV4dChBc1RleHRGbGFncykgY29uc3Q7
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZl
clJlYWRpbmdDbGllbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJD
bGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykg
fHwgIUxPR19ESVNBQkxFRAogICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFwKEZ1bmN0aW9uPHZvaWQoSXRl
bUhhbmRsZSwgT3B0aW9uYWw8RmxvYXRSZWN0PiYmKT4mJikgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZm
ZXJIYW5kbGUmKT4mJikgY29uc3Q7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4u
LiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9pZCBhcHBlbmQoSXRl
bUhhbmRsZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CiAKIHByaXZhdGU6Ci0gICAg
SXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCi0gICAgewotICAgICAgICBtX2xpc3QuYXBw
ZW5kKFdURk1vdmUoaXRlbSkpOwotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5nZXQoKTsK
LSAgICB9CisgICAgSXRlbUJ1ZmZlciogaXRlbUJ1ZmZlcklmRXhpc3RzKCkgY29uc3QgeyByZXR1
cm4gbV9pdGVtcy5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXImIGl0ZW1C
dWZmZXIoKTsKIAotICAgIC8vIExlc3MgZWZmaWNpZW50IGFwcGVuZCwgb25seSB1c2VkIGZvciB0
cmFja2luZyByZXBsYXkuCi0gICAgdm9pZCBhcHBlbmRJdGVtKEl0ZW0mIGl0ZW0pCisgICAgdm9p
ZCBhZGREcmF3aW5nSXRlbUV4dGVudChPcHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50KQogICAg
IHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgQVNTRVJUKG1fdHJhY2tz
RHJhd2luZ0l0ZW1FeHRlbnRzKTsKKyAgICAgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuYXBwZW5k
KFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEZv
ckZsYWdzKEFzVGV4dEZsYWdzLCBjb25zdCBJdGVtJik7Ci0KLSAgICBWZWN0b3I8UmVmPEl0ZW0+
PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBG
b3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7CiAKLSAgICBWZWN0b3I8UmVmPEl0ZW0+
PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW1CdWZmZXI+IG1faXRlbXM7CisgICAg
VmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVjdD4+IG1fZHJhd2luZ0l0ZW1FeHRlbnRzOworICAgIGJv
b2wgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgeyB0cnVlIH07CiB9OwogCi0KLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIERpc3BsYXlMaXN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+Cit2b2lkIERpc3Bs
YXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBt
X2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGl0ZW1Db3VudDsKLSAg
ICBkZWNvZGVyID4+IGl0ZW1Db3VudDsKLSAgICBpZiAoIWl0ZW1Db3VudCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotCi0gICAg
Zm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICppdGVtQ291bnQ7IGkrKykgewotICAgICAgICBhdXRv
IGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmNlIHdl
IGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBmYWlsaW5nIHRvIGRlY29kZSBhbiBpdGVtIHNob3VsZCB0
dXJuIGludG8gYSBkZWNvZGUgZmFpbHVyZS4KLSAgICAgICAgLy8gRm9yIG5vdywgd2UganVzdCBo
YXZlIHRvIGlnbm9yZSBpdC4KLSAgICAgICAgaWYgKCFpdGVtKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKCppdGVtKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIGl0ZW1CdWZmZXIoKS5hcHBlbmQ8VD4oc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogfSAvLyBEaXNwbGF5TGlzdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IGQ0NjE3
ZDM1MTZmNGYzZTUxZDc1ZDY0NDM0YTZhMzk0NTdhMDAwMWYuLmY5YjMyM2M3NDI2NmVkMWY2MWQ0
NGIwNDcyZWY1NTE4NTNlOGM3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgUmVjb3JkZXImIERyYXdpbmdD
b250ZXh0OjpyZWNvcmRlcigpCiAKIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlM
aXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCiB7Ci0gICAgaWYgKCFtX2Rpc3BsYXlM
aXN0Lml0ZW1Db3VudCgpKQorICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxh
eUxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
aW5kZXggMjJlZDI1NmU4MGFkMjkzYTA1MjA2OWI3NDMwODhhMTM1MWY0N2NjMC4uOTZlNGIxZWZm
OTgxZTQyMjc5ZDc0NmRjNmJiMzljOGFhNTI4ZTE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVjb3JkZXImIHJlY29yZGVyKCk7Ci0gICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkg
eyByZXR1cm4gV1RGTW92ZShtX2Rpc3BsYXlMaXN0KTsgfQorICAgIERpc3BsYXlMaXN0IHRha2VE
aXNwbGF5TGlzdCgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsg
fQogICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7
IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheWVkRGlzcGxheUxp
c3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheWVkRGlzcGxheUxpc3QuZ2V0KCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCmluZGV4IDMyNTk5ZTA2MmQ3Y2Y1
OWQxZGMyZWFkMDFlNzYwZDY2ZTNmN2VjM2MuLmZmZDk0YjUyOWMwNmE3ZTJjZGUwMGVjOTRiMzU1
Yzg1ZGRhZmI0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0NvbnRleHQuZGlzcGxh
eUxpc3QoKS5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKCFtX2RyYXdpbmdDb250ZXh0LmRpc3Bs
YXlMaXN0KCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZXBsYXlE
aXNwbGF5TGlzdChCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODY0NDJjZmM5NDZlZTVlMGZmYjM2MmUyZjUxZDRlNWEwYzk1ZWUyNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgorCisjaW5j
bHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworCit2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6
OlNhdmU6CisgICAgICAgIHJldHVybiBnZXQ8U2F2ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICByZXR1cm4gZ2V0PFJlc3RvcmU+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1
cm4gZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6CisgICAgICAgIHJldHVybiBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgICAgICByZXR1cm4gZ2V0PFNjYWxlPigpLmFwcGx5
KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICBy
ZXR1cm4gZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIGdldDxTZXRDVE0+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBy
ZXR1cm4gZ2V0PFNldElubGluZUZpbGxHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBnZXQ8U2V0
SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4gZ2V0PFNldElubGluZVN0cm9rZUNv
bG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNr
bmVzczoKKyAgICAgICAgcmV0dXJuIGdldDxTZXRTdHJva2VUaGlja25lc3M+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHJldHVybiBnZXQ8
U2V0U3RhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKKyAgICAgICAgcmV0dXJuIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRleHQpOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICByZXR1cm4gZ2V0PFNldExpbmVE
YXNoPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgor
ICAgICAgICByZXR1cm4gZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNh
c2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBnZXQ8U2V0TWl0ZXJM
aW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
KyAgICAgICAgcmV0dXJuIGdldDxDbGVhclNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICByZXR1cm4gZ2V0PENsaXA+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIGdldDxD
bGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6CisgICAgICAgIHJldHVybiBnZXQ8Q2xpcE91dFRvUGF0aD4oKS5hcHBseShjb250ZXh0KTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0dXJuIGdldDxDbGlwUGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29t
bWFuZHM6CisgICAgICAgIHJldHVybiBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpLmFwcGx5
KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVy
biBnZXQ8RHJhd0dseXBocz4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3SW1hZ2U6CisgICAgICAgIHJldHVybiBnZXQ8RHJhd0ltYWdlPigpLmFwcGx5KGNvbnRleHQp
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gZ2V0
PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4gZ2V0PERyYXdUaWxlZFNjYWxlZElt
YWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZl
cjoKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gZ2V0
PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3UGF0dGVybj4oKS5hcHBseShjb250
ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0dXJuIGdldDxE
cmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToK
KyAgICAgICAgcmV0dXJuIGdldDxEcmF3TGluZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICByZXR1cm4gZ2V0PERyYXdMaW5l
c0ZvclRleHQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgorICAgICAgICByZXR1cm4gZ2V0PERyYXdFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gZ2V0PERyYXdQYXRoPigp
LmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgor
ICAgICAgICByZXR1cm4gZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGdl
dDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBnZXQ8RmlsbFJlY3Q+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVy
biBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgIHJldHVybiBnZXQ8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0OgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5h
cHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAg
ICAgIHJldHVybiBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gZ2V0
PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxJbmxpbmVQYXRo
PigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAg
ICByZXR1cm4gZ2V0PEZpbGxQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxFbGxpcHNlPigpLmFwcGx5
KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgcmV0
dXJuIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICByZXR1cm4gZ2V0PFBhaW50RnJhbWVGb3JN
ZWRpYT4oKS5hcHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0Ogor
ICAgICAgICByZXR1cm4gZ2V0PFN0cm9rZVJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGdldDxTdHJva2VJ
bmxpbmVQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6CisgICAgICAgIHJldHVybiBnZXQ8U3Ryb2tlUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gZ2V0PFN0cm9r
ZUVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgorICAgICAgICByZXR1cm4gZ2V0PENsZWFyUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gZ2V0
PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBnZXQ8RW5kVHJhbnNw
YXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKS5h
cHBseShjb250ZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAg
ICAgICByZXR1cm4gZ2V0PEFwcGx5RmlsbFBhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIGdl
dDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgIH0KK30KKwor
dm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVybiBnZXQ8Q2xpcE91
dFRvUGF0aD4oKS5+Q2xpcE91dFRvUGF0aCgpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRo
OgorICAgICAgICByZXR1cm4gZ2V0PENsaXBQYXRoPigpLn5DbGlwUGF0aCgpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuIGdldDxDbGlw
VG9EcmF3aW5nQ29tbWFuZHM+KCkufkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICByZXR1cm4gZ2V0PERyYXdGb2N1
c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0aCgpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+
KCkufkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CisgICAgICAgIHJldHVybiBnZXQ8RHJhd0dseXBocz4oKS5+RHJhd0dseXBocygpOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3SW1hZ2U+KCku
fkRyYXdJbWFnZSgpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAg
ICAgcmV0dXJuIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCkufkRyYXdJbWFnZUJ1ZmZlcigpOworICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBnZXQ8RHJh
d0xpbmVzRm9yVGV4dD4oKS5+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgcmV0dXJuIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCku
fkRyYXdOYXRpdmVJbWFnZSgpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAg
ICByZXR1cm4gZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgorICAgICAgICByZXR1cm4gZ2V0PERyYXdQYXR0ZXJuPigpLn5EcmF3UGF0
dGVybigpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1
cm4gZ2V0PERyYXdUaWxlZEltYWdlPigpLn5EcmF3VGlsZWRJbWFnZSgpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4gZ2V0PERyYXdUaWxl
ZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGdldDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQ
YXRoOgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxS
ZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdpdGhDb2xvcigpOworICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxSZWN0V2l0aEdy
YWRpZW50PigpLn5GaWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gZ2V0PEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPigpLn5GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGdldDxGaWxsUm91bmRlZFJlY3Q+
KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToK
KyAgICAgICAgcmV0dXJuIGdldDxQdXRJbWFnZURhdGE+KCkuflB1dEltYWdlRGF0YSgpOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICByZXR1cm4gZ2V0PFNldExpbmVE
YXNoPigpLn5TZXRMaW5lRGFzaCgpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAg
ICAgICByZXR1cm4gZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOworICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBnZXQ8U3Ryb2tlUGF0aD4oKS5+U3Ryb2tl
UGF0aCgpOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0VsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1JlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElu
bGluZVBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgY2FzZSBJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworYm9vbCBJdGVtSGFuZGxlOjppc0RyYXdpbmdJdGVtKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0odHlw
ZSgpKTsKK30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhh
bmRsZXMpCisgICAgOiBtX3JlYWRPbmx5QnVmZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQor
CitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKCkgPSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRl
bUJ1ZmZlcigpCit7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9ub25JbmxpbmVJdGVtc0luQWxs
b2NhdGVkQnVmZmVycykKKyAgICAgICAgaXRlbS5kZXN0cm95KCk7CisKKyAgICBmb3IgKGF1dG8q
IGJ1ZmZlciA6IG1fYWxsb2NhdGVkQnVmZmVycykKKyAgICAgICAgZnJlZShidWZmZXIpOworfQor
CitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJiBvdGhlcikKKyAgICA6IG1fcmVh
ZGluZ0NsaWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0cikp
CisgICAgLCBtX3dyaXRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdDbGll
bnQsIG51bGxwdHIpKQorICAgICwgbV9ub25JbmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycyhz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMsIHsg
fSkpCisgICAgLCBtX2FsbG9jYXRlZEJ1ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX2FsbG9j
YXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgLCBtX3JlYWRPbmx5QnVmZmVycyhzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pKQorICAgICwgbV93cml0YWJsZUJ1ZmZlcihz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSkpCisgICAgLCBtX3dyaXRh
YmxlU2l6ZUluQnl0ZXMoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlU2l6ZUluQnl0ZXMs
IDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVtQnVmZmVyOjpvcGVyYXRvcj0oSXRlbUJ1ZmZl
ciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0NsaWVudCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX3dyaXRpbmdDbGllbnQgPSBzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cik7CisgICAgbV9ub25JbmxpbmVJ
dGVtc0luQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25JbmxpbmVJ
dGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX2FsbG9jYXRlZEJ1ZmZlcnMgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX3JlYWRP
bmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMsIHsgfSk7
CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0YWJsZUJ1
ZmZlciwgeyB9KTsKKyAgICBtX3dyaXRhYmxlU2l6ZUluQnl0ZXMgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fd3JpdGFibGVTaXplSW5CeXRlcywgMCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJ
dGVtQnVmZmVySGFuZGxlIEl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFj
aXR5KQoreworICAgIGlmIChtX3dyaXRpbmdDbGllbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gaGFu
ZGxlID0gbV93cml0aW5nQ2xpZW50LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KSkKKyAgICAg
ICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQorCisgICAgY29uc3RleHByIHNpemVfdCBkZWZh
dWx0SXRlbUJ1ZmZlckNhcGFjaXR5ID0gMSA8PCAxMDsKKworICAgIGF1dG8gbmV3QnVmZmVyQ2Fw
YWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwgZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSk7Cisg
ICAgYXV0byogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obWFsbG9jKG5ld0J1
ZmZlckNhcGFjaXR5KSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzLmFwcGVuZChidWZmZXIpOwor
ICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLCBidWZmZXIsIDAs
IG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Zm9yRWFjaEl0ZW1C
dWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rp
b24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX3JlYWRPbmx5QnVmZmVycykK
KyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxlKTsKKworICAgIGlmIChtX3dyaXRhYmxlQnVmZmVy
ICYmIG1fd3JpdGFibGVTaXplSW5CeXRlcykKKyAgICAgICAgbWFwRnVuY3Rpb24oeyBtX3dyaXRh
YmxlQnVmZmVyLmlkZW50aWZpZXIsIG1fd3JpdGFibGVCdWZmZXIuZGF0YSwgbV93cml0YWJsZUJ1
ZmZlci5vZmZzZXQsIG1fd3JpdGFibGVTaXplSW5CeXRlcyB9KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWZkNDZhNzUwZmIwMWI1YWI2ZTZl
Yjk4MDQ4MmQxZTI5MmE2ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCkBAIC0w
LDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNw
bGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitlbnVtIEl0ZW1CdWZm
ZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJdGVtQnVmZmVySWRlbnRpZmllciA9IE9iamVj
dElkZW50aWZpZXI8SXRlbUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworc3RydWN0IEl0ZW1CdWZm
ZXJIYW5kbGUgeworICAgIEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgdWlu
dDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3Qgb2Zmc2V0IHsgMCB9OworICAgIHNp
emVfdCBjYXBhY2l0eSB7IDAgfTsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhISgqdGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRh
OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEl0ZW1C
dWZmZXJIYW5kbGU+IGRlY29kZShEZWNvZGVyJik7Cit9OworCit1c2luZyBJdGVtQnVmZmVySGFu
ZGxlcyA9IFZlY3RvcjxJdGVtQnVmZmVySGFuZGxlLCAyPjsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgSXRlbUJ1ZmZlckhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG9mZnNldCk7CisgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oY2FwYWNpdHkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8
SXRlbUJ1ZmZlckhhbmRsZT4gSXRlbUJ1ZmZlckhhbmRsZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgT3B0aW9uYWw8SXRlbUJ1ZmZlcklkZW50aWZpZXI+IGlkZW50aWZpZXI7Cisg
ICAgZGVjb2RlciA+PiBpZGVudGlmaWVyOworICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBvZmZzZXQ7Cisg
ICAgZGVjb2RlciA+PiBvZmZzZXQ7CisgICAgaWYgKCFvZmZzZXQpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gY2FwYWNpdHk7CisgICAgZGVj
b2RlciA+PiBjYXBhY2l0eTsKKyAgICBpZiAoIWNhcGFjaXR5KQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgLy8gRW5jb2RlIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0aGUgYnVm
ZmVyJ3MgZGF0YSBwb2ludGVyLgorICAgIHJldHVybiB7eyAqaWRlbnRpZmllciwgbnVsbHB0ciwg
c3RhdGljX2Nhc3Q8c2l6ZV90Pigqb2Zmc2V0KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PigqY2FwYWNp
dHkpIH19OworfQorCitzdHJ1Y3QgSXRlbUhhbmRsZSB7CisgICAgdWludDhfdCogZGF0YSB7IG51
bGxwdHIgfTsKKworICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEl0ZW1UeXBlPihkYXRhWzBdKTsKKyAgICB9CisKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc2l6ZW9mKEl0ZW1UeXBlKSArIHNp
emVPZkl0ZW1JbkJ5dGVzKHR5cGUoKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzRHJhd2luZ0l0ZW0o
KSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQmIGdldCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXM8VD4oKSk7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxUKj4oJmRhdGFbc2l6ZW9mKEl0ZW1UeXBlKV0pOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgaXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUo
KSA9PSBUOjppdGVtVHlwZTsKKyAgICB9Cit9OworCitjbGFzcyBJdGVtQnVmZmVyV3JpdGluZ0Ns
aWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoKSA9
IDA7CisKKyAgICB2aXJ0dWFsIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXpl
X3QpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNFbmNvZGluZyhJdGVtVHlwZSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShJdGVt
SGFuZGxlKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNEZWNvZGluZyhJdGVtVHlwZSkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50
OF90Kiwgc2l6ZV90LCBJdGVtSGFuZGxlJikgPSAwOworfTsKKworSXRlbUJ1ZmZlcldyaXRpbmdD
bGllbnQ6On5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpIHsgfQorSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQ6On5JdGVtQnVmZmVyUmVhZGluZ0NsaWVudCgpIHsgfQorCitjbGFzcyBJdGVtQnVmZmVy
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJdGVtQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0OworCisgICAg
V0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JdGVtQnVm
ZmVyKCk7CisgICAgSXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
dGVtQnVmZmVyJiBvcGVyYXRvcj0oSXRlbUJ1ZmZlciYmKTsKKworICAgIHNpemVfdCBzaXplSW5C
eXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAg
Zm9yIChhdXRvIGJ1ZmZlciA6IG1fcmVhZE9ubHlCdWZmZXJzKQorICAgICAgICAgICAgcmVzdWx0
ICs9IGJ1ZmZlci5jYXBhY2l0eTsKKyAgICAgICAgcmVzdWx0ICs9IG1fd3JpdGFibGVTaXplSW5C
eXRlczsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3dyaXRhYmxlU2l6ZUluQnl0ZXMgJiYg
bV9yZWFkT25seUJ1ZmZlcnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JU
IEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3Mp
CisgICAgeworICAgICAgICBjb25zdGV4cHIgYXV0byBzaXplT2ZUeXBlQW5kSXRlbSA9IHNpemVv
ZihJdGVtVHlwZSkgKyBzaXplb2YoVCk7CisKKyAgICAgICAgaWYgKG1fd3JpdGluZ0NsaWVudCAm
JiBtX3dyaXRpbmdDbGllbnQtPnJlcXVpcmVzRW5jb2RpbmcoVDo6aXRlbVR5cGUpKSB7CisgICAg
ICAgICAgICB1aW50OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlwZUFuZEl0ZW1dOworICAgICAgICAg
ICAgaXRlbUJ1ZmZlclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAg
ICAgICAgICAgIG5ldyAoaXRlbUJ1ZmZlciArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYXJlZEJ1ZmZlciA9
IG1fd3JpdGluZ0NsaWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1CdWZmZXIgfSkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFkZGl0aW9uYWxDYXBhY2l0eUZvckl0ZW0gPSBzaGFyZWRCdWZmZXItPnNp
emUoKSArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgICAgICAg
ICBpZiAobV93cml0YWJsZVNpemVJbkJ5dGVzICsgYWRkaXRpb25hbENhcGFjaXR5Rm9ySXRlbSA+
IG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBs
YXN0V3JpdGFibGVCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7
CisgICAgICAgICAgICAgICAgICAgIGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6
ZXhjaGFuZ2UobV93cml0YWJsZVNpemVJbkJ5dGVzLCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGxhc3RXcml0YWJsZUJ1ZmZlcikpOwor
ICAgICAgICAgICAgICAgICAgICBtX3dyaXRhYmxlQnVmZmVyID0gY3JlYXRlSXRlbUJ1ZmZlcihh
ZGRpdGlvbmFsQ2FwYWNpdHlGb3JJdGVtKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0YWJsZUJ1ZmZlci5vZmZzZXQgKyBt
X3dyaXRhYmxlU2l6ZUluQnl0ZXNdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUp
OworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZEYXRhTGVuZ3RoID0gbV93cml0YWJsZUJ1
ZmZlci5kYXRhICsgbV93cml0YWJsZUJ1ZmZlci5vZmZzZXQgKyBtX3dyaXRhYmxlU2l6ZUluQnl0
ZXMgKyBzaXplb2YoSXRlbVR5cGUpOworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
c2l6ZV90Kj4oc3RhcnRPZkRhdGFMZW5ndGgpWzBdID0gc2hhcmVkQnVmZmVyLT5zaXplKCk7Cisg
ICAgICAgICAgICAgICAgbWVtY3B5KHN0YXJ0T2ZEYXRhTGVuZ3RoICsgc2l6ZW9mKHNpemVfdCks
IHNoYXJlZEJ1ZmZlci0+ZGF0YUFzVUludDhQdHIoKSwgc2hhcmVkQnVmZmVyLT5zaXplKCkpOwor
ICAgICAgICAgICAgICAgIG1fd3JpdGFibGVTaXplSW5CeXRlcyArPSBhZGRpdGlvbmFsQ2FwYWNp
dHlGb3JJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fd3JpdGFibGVTaXplSW5CeXRlcyArIHNpemVPZlR5cGVBbmRJdGVt
ID4gbV93cml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkgeworICAgICAgICAgICAgYXV0byBsYXN0V3Jp
dGFibGVCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAg
ICAgICAgICBsYXN0V3JpdGFibGVCdWZmZXIuY2FwYWNpdHkgPSBzdGQ6OmV4Y2hhbmdlKG1fd3Jp
dGFibGVTaXplSW5CeXRlcywgMCk7CisgICAgICAgICAgICBpZiAobGFzdFdyaXRhYmxlQnVmZmVy
LmNhcGFjaXR5KQorICAgICAgICAgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZN
b3ZlKGxhc3RXcml0YWJsZUJ1ZmZlcikpOworICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9
IGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZU9mVHlwZUFuZEl0ZW0pOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byogc3RhcnRPZkl0ZW0gPSAmbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdGFibGVC
dWZmZXIub2Zmc2V0ICsgbV93cml0YWJsZVNpemVJbkJ5dGVzXTsKKyAgICAgICAgc3RhcnRPZkl0
ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgIG5ldyAo
c3RhcnRPZkl0ZW0gKyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7CisgICAgICAgIG1fd3JpdGFibGVTaXplSW5CeXRlcyArPSBzaXplb2YoSXRlbVR5cGUp
ICsgc2l6ZU9mSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpOworCisgICAgICAgIGlmICghVDo6aXNJ
bmxpbmVJdGVtKQorICAgICAgICAgICAgbV9ub25JbmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVy
cy5hcHBlbmQoeyBzdGFydE9mSXRlbSB9KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5nZShtX25vbklubGluZUl0
ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICAgICAgaXRlbS5kZXN0cm95KCk7
CisKKyAgICAgICAgZm9yIChhdXRvKiBidWZmZXIgOiBzdGQ6OmV4Y2hhbmdlKG1fYWxsb2NhdGVk
QnVmZmVycywgeyB9KSkKKyAgICAgICAgICAgIGZyZWUoYnVmZmVyKTsKKworICAgICAgICBtX3Jl
YWRPbmx5QnVmZmVycy5jbGVhcigpOworICAgICAgICBtX3dyaXRhYmxlQnVmZmVyID0geyB9Owor
ICAgICAgICBtX3dyaXRhYmxlU2l6ZUluQnl0ZXMgPSAwOworICAgICAgICBtX2l0ZW1Db3VudCA9
IDA7CisgICAgfQorCisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQq
IGNsaWVudCkgeyBtX3dyaXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVu
dChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGluZ0NsaWVudCA9IGNs
aWVudDsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGVzJiByZWFkT25s
eUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsgfQorICAgIHZvaWQg
Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+
JiYpIGNvbnN0OworCisgICAgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIG1fcmVhZGluZ0NsaWVu
dCB7IG51bGxwdHIgfTsKKyAgICBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogbV93cml0aW5nQ2xp
ZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxJdGVtSGFuZGxlPiBtX25vbklubGluZUl0ZW1z
SW5BbGxvY2F0ZWRCdWZmZXJzOworICAgIFZlY3Rvcjx1aW50OF90Kj4gbV9hbGxvY2F0ZWRCdWZm
ZXJzOworICAgIEl0ZW1CdWZmZXJIYW5kbGVzIG1fcmVhZE9ubHlCdWZmZXJzOworICAgIEl0ZW1C
dWZmZXJIYW5kbGUgbV93cml0YWJsZUJ1ZmZlcjsKKyAgICBzaXplX3QgbV93cml0YWJsZVNpemVJ
bkJ5dGVzIHsgMCB9OworICAgIHNpemVfdCBtX2l0ZW1Db3VudCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI5YTc5ODczYmZjMjky
MjQyOGI3NmY1NDM0ZDBkZTU4N2FkZGEwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK3NpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6
CisgICAgICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6CisgICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0
ZW5hdGVDVE0pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIHNp
emVvZihTZXRDVE0pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsR3JhZGllbnQpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJ
bmxpbmVGaWxsQ29sb3IpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZVN0cm9rZUNvbG9yKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0
U3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAg
cmV0dXJuIHNpemVvZihTZXRTdGF0ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpv
aW4pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBz
aXplb2YoU2V0TWl0ZXJMaW1pdCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOworICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cE91dDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwT3V0KTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0VG9QYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXBPdXRUb1BhdGgpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXBQ
YXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAg
IHJldHVybiBzaXplb2YoQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdHbHlwaHMpOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3SW1hZ2Up
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKERyYXdUaWxlZEltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3VGlsZWRTY2FsZWRJbWFnZSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdJbWFnZUJ1ZmZlcik7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKERyYXdOYXRpdmVJbWFnZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1BhdHRlcm4pOworICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdSZWN0KTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3
TGluZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihEcmF3TGluZXNGb3JUZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKERyYXdFbGxpcHNlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1BhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ZvY3VzUmluZ1BhdGgp
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihEcmF3Rm9jdXNSaW5nUmVjdHMpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xv
cik7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgIHJl
dHVybiBzaXplb2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOworICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJl
Y3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihGaWxsUm91bmRlZFJlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihGaWxsSW5saW5lUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoRmlsbFBhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxF
bGxpcHNlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxFbGxpcHNlKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBzaXplb2YoUHV0SW1hZ2VEYXRh
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIHJldHVy
biBzaXplb2YoUGFpbnRGcmFtZUZvck1lZGlhKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VS
ZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKFN0cm9rZVJlY3QpOworICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tlSW5saW5l
UGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihTdHJva2VQYXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKFN0cm9rZUVsbGlwc2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclJlY3QpOworICAgIGNhc2UgSXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoQmVn
aW5UcmFuc3BhcmVuY3lMYXllcik7CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5
TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOworICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihBcHBseVN0cm9rZVBhdHRlcm4pOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46CisgICAgICAgIHJldHVybiBzaXplb2YoQXBwbHlGaWxsUGF0dGVybik7CisgICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihB
cHBseURldmljZVNjYWxlRmFjdG9yKTsKKyAgICB9Cit9CisKK2Jvb2wgaXNEcmF3aW5nSXRlbShJ
dGVtVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOgorICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgIGNh
c2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgIGNh
c2UgSXRlbVR5cGU6OlNhdmU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVz
czoKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRl
bVR5cGU6OkNsZWFyUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0czoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdJbWFnZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4
dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUVsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
T3V0VG9QYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lc0ZvclRleHQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVu
dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VE
YXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlTdHJva2VQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgIGNhc2UgSXRlbVR5
cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgorICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUpvaW46CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxs
aXBzZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZTRmODU3OWFjODc3YmI4ODNiNDk2MzMzMjdmYTc4YzIzMTcxY2M2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxh
eUxpc3QgeworCitlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CisgICAgU2F2ZSwKKyAg
ICBSZXN0b3JlLAorICAgIFRyYW5zbGF0ZSwKKyAgICBSb3RhdGUsCisgICAgU2NhbGUsCisgICAg
Q29uY2F0ZW5hdGVDVE0sCisgICAgU2V0Q1RNLAorICAgIFNldElubGluZUZpbGxHcmFkaWVudCwK
KyAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCisgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCisgICAg
U2V0U3Ryb2tlVGhpY2tuZXNzLAorICAgIFNldFN0YXRlLAorICAgIFNldExpbmVDYXAsCisgICAg
U2V0TGluZURhc2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0TWl0ZXJMaW1pdCwKKyAgICBD
bGVhclNoYWRvdywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisgICAgQ2xpcE91dFRvUGF0aCwK
KyAgICBDbGlwUGF0aCwKKyAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMsCisgICAgRHJhd0dseXBo
cywKKyAgICBEcmF3SW1hZ2UsCisgICAgRHJhd1RpbGVkSW1hZ2UsCisgICAgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UsCisgICAgRHJhd0ltYWdlQnVmZmVyLAorICAgIERyYXdOYXRpdmVJbWFnZSwKKyAg
ICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwKKyAgICBEcmF3TGluZSwKKyAgICBEcmF3TGlu
ZXNGb3JUZXh0LAorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIsCisgICAgRHJhd0VsbGlw
c2UsCisgICAgRHJhd1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0ZvY3Vz
UmluZ1JlY3RzLAorICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAgIEZp
bGxSZWN0V2l0aEdyYWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxsUm91
bmRlZFJlY3QsCisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgRmlsbElubGluZVBhdGgsCisjZW5kaWYKKyAgICBGaWxsUGF0aCwK
KyAgICBGaWxsRWxsaXBzZSwKKyAgICBQdXRJbWFnZURhdGEsCisgICAgUGFpbnRGcmFtZUZvck1l
ZGlhLAorICAgIFN0cm9rZVJlY3QsCisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
U3Ryb2tlSW5saW5lUGF0aCwKKyNlbmRpZgorICAgIFN0cm9rZVBhdGgsCisgICAgU3Ryb2tlRWxs
aXBzZSwKKyAgICBDbGVhclJlY3QsCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAgICBF
bmRUcmFuc3BhcmVuY3lMYXllciwKKyNpZiBVU0UoQ0cpCisgICAgQXBwbHlTdHJva2VQYXR0ZXJu
LCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCisgICAgQXBwbHlGaWxs
UGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorI2VuZGlm
CisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKK307CisKK1dFQkNPUkVfRVhQT1JUIHNpemVf
dCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzSW5s
aW5lSXRlbShJdGVtVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzRHJhd2luZ0l0ZW0oSXRl
bVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDQ3Yzc2MmUxYTYx
OTdkNmM4YjhjNDVmYTljZmRjMDVhMDNkZWU1MWIuLjYwYWU2MjY4MTMzZjM3ZWVlZWRjYjFiNTRm
NTEzNDZjNTM0YTM5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAg
LTUyLDE5NSArNTIsMTYgQEAgV1RGOjpDU3RyaW5nIEl0ZW06OmRlc2NyaXB0aW9uKCkgY29uc3QK
IH0KICNlbmRpZgogCi1JdGVtOjpJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgOiBtX3R5cGUodHlw
ZSkKLXsKLX0KLQotSXRlbTo6fkl0ZW0oKSA9IGRlZmF1bHQ7Ci0KLXNpemVfdCBJdGVtOjpzaXpl
SW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQotewotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFNhdmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFJlc3RvcmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFJvdGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNjYWxlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldENUTT4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNl
dElubGluZUZpbGxHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxs
Q29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRT
dGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVE
YXNoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldE1p
dGVyTGltaXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclNoYWRvdz4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXBQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBUb0RyYXdpbmdD
b21tYW5kcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1h
Z2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFn
ZUJ1ZmZlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxEcmF3UGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdSZWN0PihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJh
d0xpbmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxEcmF3RWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3Vz
UmluZ1JlY3RzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsUmVjdFdpdGhDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdy
YWRpZW50PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFB1
dEltYWdlRGF0YT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8U3Ryb2tlUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxDbGVhclJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXll
cjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
aXRlbSkpOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRl
cm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPihpdGVtKSk7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3aW5nSXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3VwKCk7
Ci0gICAgdHMgPDwgImV4dGVudCAiOwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0gICAg
ICAgIHRzIDw8IGl0ZW0uZXh0ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5rbm93
biI7Ci0gICAgCi0gICAgdHMuZW5kR3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdp
bmdJdGVtOjpEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogSXRlbSh0eXBlKQotewot
fQotCi1EcmF3aW5nSXRlbTo6fkRyYXdpbmdJdGVtKCkgPSBkZWZhdWx0OwotCi1TYXZlOjpTYXZl
KCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi17Ci19Ci0KLVNhdmU6On5TYXZlKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LnNhdmUoKTsKIH0KIAotUmVzdG9yZTo6UmVzdG9yZSgpCi0gICAg
OiBJdGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQotewotfQotCi1SZXN0b3JlOjp+UmVzdG9yZSgpID0g
ZGVmYXVsdDsKLQogdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLVRyYW5zbGF0ZTo6VHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUpCi0g
ICAgLCBtX3goeCkKLSAgICAsIG1feSh5KQotewotfQotCi1UcmFuc2xhdGU6On5UcmFuc2xhdGUo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwpAQCAtMjU0
LDE0ICs3NSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Sb3RhdGU6OlJv
dGF0ZShmbG9hdCBhbmdsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJvdGF0ZSkKLSAgICAsIG1f
YW5nbGUoYW5nbGUpCi17Ci19Ci0KLVJvdGF0ZTo6flJvdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9p
ZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKQEAgLTI3NCwxNCArODcsNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotU2NhbGU6OlNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICwgbV9zaXplKHNpemUpCi17Ci19Ci0KLVNj
YWxlOjp+U2NhbGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7CkBAIC0y
OTQsMTQgKzk5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNjYWxlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0Q1RNOjpTZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLVNldENUTTo6
flNldENUTSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7CkBA
IC0zMTQsMTQgKzExMSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Db25jYXRl
bmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKLSAgICAsIG1fdHJhbnNmb3Jt
KHRyYW5zZm9ybSkKLXsKLX0KLQotQ29uY2F0ZW5hdGVDVE06On5Db25jYXRlbmF0ZUNUTSgpID0g
ZGVmYXVsdDsKLQogdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKQEAg
LTMzNSw4ICsxMjQsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCiB9CiAKIFNldElubGluZUZpbGxHcmFk
aWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0YShn
cmFkaWVudC5kYXRhKCkpCisgICAgOiBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQogICAgICwgbV9n
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnQuZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bSgpKQogICAgICwgbV9zcHJlYWRNZXRob2QoZ3JhZGllbnQuc3ByZWFkTWV0aG9kKCkpCiAgICAg
LCBtX2NvbG9yU3RvcENvdW50KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGdyYWRpZW50LnN0b3BzKCku
c2l6ZSgpKSkKQEAgLTM1OCwxNCArMTQ2LDggQEAgUmVmPEdyYWRpZW50PiBTZXRJbmxpbmVGaWxs
R3JhZGllbnQ6OmdyYWRpZW50KCkgY29uc3QKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKLVJl
ZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKGNv
bnN0IEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJ
bmxpbmVGaWxsR3JhZGllbnQoZ3JhZGllbnQpKTsKLX0KLQogU2V0SW5saW5lRmlsbEdyYWRpZW50
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0s
IFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50
OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9y
U3RvcENvdW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQot
ICAgICwgbV9kYXRhKGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKICAgICAsIG1fZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKICAgICAsIG1f
c3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoY29sb3JT
dG9wQ291bnQpCkBAIC0zNzcsOCArMTU5LDYgQEAgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFMKICAg
ICB9CiB9CiAKLVNldElubGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVudCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBt
YXhDb2xvclN0b3BDb3VudCkKQEAgLTQwNCwxMyArMTg0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYp
CiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxpbmVG
aWxsQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbENvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1TZXRJ
bmxpbmVGaWxsQ29sb3I6On5TZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
U2V0SW5saW5lRmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC00MjIsMTMgKzE5NSw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRJbmxpbmVGaWxsQ29sb3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldElu
bGluZVN0cm9rZUNvbG9yPiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVTdHJv
a2VDb2xvcihjb2xvckRhdGEpKTsKLX0KLQotU2V0SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJbmxp
bmVTdHJva2VDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVTdHJva2VDb2xvcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoY29sb3IoKSk7CkBAIC00NDAsMTMgKzIwNiw2IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVTdHJva2VDb2xv
ciYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBT
ZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwotfQotCi1TZXRT
dHJva2VUaGlja25lc3M6On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
U2V0U3Ryb2tlVGhpY2tuZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwpAQCAtNDU5
LDE5ICsyMTgsMTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB9CiAKIFNldFN0YXRlOjpTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3Rh
dGUpCi0gICAgLCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICA6IG1fc3RhdGUoc3RhdGUsIGZs
YWdzKQogewogfQogCiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0g
ICAgLCBtX3N0YXRlKHN0YXRlQ2hhbmdlKQorICAgIDogbV9zdGF0ZShzdGF0ZUNoYW5nZSkKIHsK
IH0KIAotU2V0U3RhdGU6On5TZXRTdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdGF0ZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIG1fc3RhdGUuYXBw
bHkoY29udGV4dCk7CkBAIC00ODMsMTQgKzIzOCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCiAgICAgcmV0dXJu
IHRzOwogfQogCi1TZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVDYXApCi0gICAgLCBtX2xpbmVDYXAobGluZUNhcCkKLXsK
LX0KLQotU2V0TGluZUNhcDo6flNldExpbmVDYXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGlu
ZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuc2V0TGluZUNhcChtX2xpbmVDYXApOwpAQCAtNTAyLDE1ICsyNDksNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGlu
ZUNhcCkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVEYXNoOjpTZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldExpbmVEYXNoKQotICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICwg
bV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCi17Ci19Ci0KLVNldExpbmVEYXNoOjp+U2V0TGluZURh
c2goKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5
LCBtX2Rhc2hPZmZzZXQpOwpAQCAtNTIzLDE0ICsyNjEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQog
ICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZUpvaW46OlNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAgLCBtX2xpbmVK
b2luKGxpbmVKb2luKQotewotfQotCi1TZXRMaW5lSm9pbjo6flNldExpbmVKb2luKCkgPSBkZWZh
dWx0OwotCiB2b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsKQEAgLTU0Miwx
NCArMjcyLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldE1p
dGVyTGltaXQ6OlNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQpCi0gICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKLXsK
LX0KLQotU2V0TWl0ZXJMaW1pdDo6flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
U2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwpAQCAtNTYxLDI2ICsyODMs
MTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGVhclNo
YWRvdzo6Q2xlYXJTaGFkb3coKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCi17
Ci19Ci0KLUNsZWFyU2hhZG93Ojp+Q2xlYXJTaGFkb3coKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xl
YXJTaGFkb3c6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmNsZWFyU2hhZG93KCk7CiB9CiAKLUNsaXA6OkNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAsIG1fcmVjdChyZWN0KQotewot
fQotCi1DbGlwOjp+Q2xpcCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBA
IC01OTIsMTQgKzI5OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91dDo6
Q2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlw
T3V0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXBPdXQ6On5DbGlwT3V0KCkgPSBk
ZWZhdWx0OwotCiB2b2lkIENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9yZWN0KTsKQEAgLTYxMSwxNCArMzEwLDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENs
aXBPdXQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0VG9QYXRoOjpDbGlwT3V0
VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUNsaXBPdXRUb1BhdGg6On5DbGlwT3V0
VG9QYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsK
QEAgLTYzMCwxNSArMzIxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1DbGlwUGF0aDo6Q2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAg
ICwgbV93aW5kUnVsZSh3aW5kUnVsZSkKLXsKLX0KLQotQ2xpcFBhdGg6On5DbGlwUGF0aCgpID0g
ZGVmYXVsdDsKLQogdm9pZCBDbGlwUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsKQEAg
LTY1MSwxNiArMzMzLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdD
b21tYW5kcykKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kcykKLSAg
ICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX2NvbG9yU3BhY2UoY29sb3JT
cGFjZSkKLSAgICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkK
LXsKLX0KLQotQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjp+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCkg
PSBkZWZhdWx0OwotCiB2b2lkIENsaXBUb0RyYXdpbmdDb21tYW5kczo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFRvRHJhd2luZ0NvbW1h
bmRzKG1fZGVzdGluYXRpb24sIG1fY29sb3JTcGFjZSwgWyZdIChHcmFwaGljc0NvbnRleHQmIGNs
aXBwaW5nQ29udGV4dCkgewpAQCAtNjczLDEzICszNDUsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBUb0RyYXdpbmdDb21tYW5kcyYg
aXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RpbmF0aW9uIiwgaXRlbS5kZXN0aW5h
dGlvbigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yLXNwYWNlIiwgaXRlbS5jb2xvclNw
YWNlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhd2luZy1jb21tYW5kcy1jb3VudCIsIGl0
ZW0uZHJhd2luZ0NvbW1hbmRzKCkuaXRlbUNvdW50KCkpOwogICAgIHJldHVybiB0czsKIH0KIAog
RHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZm
ZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYm
IGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhz
KQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250KG1h
a2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQogICAgICwgbV9nbHlwaHMoV1RGTW92
ZShnbHlwaHMpKQogICAgICwgbV9hZHZhbmNlcyhXVEZNb3ZlKGFkdmFuY2VzKSkKICAgICAsIG1f
bG9jYWxBbmNob3IobG9jYWxBbmNob3IpCkBAIC02ODksOCArMzU5LDcgQEAgRHJhd0dseXBoczo6
RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4
PiYmIGdseXBocywKIH0KIAogRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3R2x5cGhzKQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQp
KQorICAgIDogbV9mb250KG1ha2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQogICAg
ICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9kZShzbW9v
dGhpbmdNb2RlKQogewpAQCAtNzAzLDE5ICszNzIsMTcgQEAgRHJhd0dseXBoczo6RHJhd0dseXBo
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0
IEcKICAgICBjb21wdXRlQm91bmRzKCk7CiB9CiAKLURyYXdHbHlwaHM6On5EcmF3R2x5cGhzKCkg
PSBkZWZhdWx0OwotCiBpbmxpbmUgR2x5cGhCdWZmZXIgRHJhd0dseXBoczo6Z2VuZXJhdGVHbHlw
aEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgcmVzdWx0OwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQo
bV9nbHlwaHNbaV0sIG1fZm9udC5nZXQoKSwgbV9hZHZhbmNlc1tpXSwgR2x5cGhCdWZmZXI6Om5v
T2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgKm1fZm9udCwgbV9hZHZh
bmNlc1tpXSwgR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCks
IDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAg
ICBjb250ZXh0LmRyYXdHbHlwaHMoKm1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBt
X2dseXBocy5zaXplKCksIGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIHZv
aWQgRHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcygpCkBAIC03MzUsMTQgKzQwMiw4IEBAIHZvaWQg
RHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcygpCiAgICAgfQogfQogCi1PcHRpb25hbDxGbG9hdFJl
Y3Q+IERyYXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fYm91bmRzOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBk
dW1wIG1vcmUgc3R1ZmYuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVt
LmxvY2FsQW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50IiwgaXRl
bS5hbmNob3JQb2ludCgpKTsKQEAgLTc1MSwxNyArNDEyLDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiAgICAg
cmV0dXJuIHRzOwogfQogCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1f
ZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBt
X2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3
SW1hZ2U6On5EcmF3SW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
bV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1faW1hZ2VQYWludGluZ09w
dGlvbnMpOwpAQCAtNzY5LDI2ICs0MTksMTIgQEAgdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJl
Y3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRJbWFnZTo6
RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZElt
YWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRp
b24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTaXplKHRpbGVTaXplKQot
ICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRJbWFnZTo6fkRyYXdUaWxlZElt
YWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2lt
YWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5n
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc5Niw3ICs0MzIsNiBAQCB2b2lkIERyYXdU
aWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJ
bWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwpAQCAtODA1LDIw
ICs0NDAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd1RpbGVkSW1hZ2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGls
ZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2Up
Ci0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikK
LSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2Fs
ZUZhY3RvcikKLSAgICAsIG1faFJ1bGUoaFJ1bGUpCi0gICAgLCBtX3ZSdWxlKHZSdWxlKQotICAg
ICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQot
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6On5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpID0gZGVmYXVsdDsK
LQogdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwg
bV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZS
dWxlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTgyNiwyNCArNDQ3LDEyIEBAIHZvaWQg
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZFNjYWxlZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0
ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291
cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlv
bigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVm
ZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKQotICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5hdGlvblJl
Y3QoZGVzdFJlY3QpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSAgICAsIG1fb3B0aW9ucyhv
cHRpb25zKQotewotfQotCi1EcmF3SW1hZ2VCdWZmZXI6On5EcmF3SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAgLTg1
Miw3ICs0NjEsNiBAQCB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdJbWFnZUJ1ZmZlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3RlLXJl
c291cmNlLWlkZW50aWZpZXIiLCBpdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uUmVjdCgpKTsKQEAg
LTg2MCw4ICs0NjgsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVtKQogfQogCiBEcmF3TmF0aXZlSW1hZ2U6
OkRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1h
Z2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICwgbV9pbWFnZVNpemUoaW1hZ2VTaXplKQog
ICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCiAgICAgLCBtX3NyY1JlY3Qoc3JjUmVj
dCkKQEAgLTg2OSw4ICs0NzYsNiBAQCBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFnZShj
b25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaQogewogfQogCi1E
cmF3TmF0aXZlSW1hZ2U6On5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJh
d05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFnZVNpemUsIG1fZGVzdGlu
YXRpb25SZWN0LCBtX3NyY1JlY3QsIG1fb3B0aW9ucyk7CkBAIC04NzgsNyArNDgzLDYgQEAgdm9p
ZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdOYXRpdmVJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBAIC04ODYsOCAr
NDkwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIH0KIAogRHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJu
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3UGF0dGVybikKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQog
ICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgLCBtX3RpbGVS
ZWN0KHRpbGVSZWN0KQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKQEAgLTg5Nyw4ICs1
MDAsNiBAQCBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlYwogewogfQogCi1EcmF3UGF0dGVybjo6fkRy
YXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UGF0dGVybihtX2lt
YWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFuc2Zvcm0s
IG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcHRpb25zKTsKQEAgLTkwNiw3ICs1MDcsNiBAQCB2b2lk
IERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0
dGVybiYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zv
cm0oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkp
OwpAQCAtOTE2LDE1ICs1MTYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1EcmF3UmVjdDo6RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJU
aGlja25lc3MpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAgLCBt
X3JlY3QocmVjdCkKLSAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKLXsK
LX0KLQotRHJhd1JlY3Q6On5EcmF3UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UmVjdDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJh
d1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7CkBAIC05MzIsMjEgKzUyMywxMSBAQCB2
b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVj
dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygpKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdMaW5lOjpEcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3TGluZSkKLSAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAsIG1fcG9pbnQy
KHBvaW50MikKLXsKLX0KLQotRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVsdDsKLQogT3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtOTYxLDE1ICs1NDIsMTMg
QEAgdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0xpbmUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50MSgpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKIERyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JU
ZXh0KQotICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgOiBtX2Jsb2Nr
TG9jYXRpb24oYmxvY2tMb2NhdGlvbikKICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3Ip
CiAgICAgLCBtX3dpZHRocyh3aWR0aHMpCiAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MpCkBA
IC05NzgsOCArNTU3LDYgQEAgRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFMKIHsKIH0KIAotRHJhd0xp
bmVzRm9yVGV4dDo6fkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0xp
bmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywgbV93aWR0aHMs
IG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwpAQCAtOTk5LDcgKzU3Niw2IEBAIE9wdGlvbmFs
PEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImJs
b2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKQEAgLTEwMTEsMTUgKzU4Nyw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JU
ZXh0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fc3R5
bGUoc3R5bGUpCi17Ci19Ci0KLURyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6On5EcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9yZWN0LCBtX3N0eWxlKTsKQEAgLTEwMzIs
MTkgKzU5OSwxMCBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLURyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0gICAgLCBt
X3JlY3QocmVjdCkKLXsKLX0KLQotRHJhd0VsbGlwc2U6On5EcmF3RWxsaXBzZSgpID0gZGVmYXVs
dDsKLQogdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKQEAgLTEwNTYsMTQgKzYx
NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3RWxsaXBzZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdQYXRoOjpEcmF3
UGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQ
YXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLURyYXdQYXRoOjp+RHJhd1BhdGgoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICNpZiBVU0UoQ0cpCkBAIC0xMDczLDI0ICs2MjMsMTIgQEAgdm9pZCBEcmF3
UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogI2VuZGlmCiB9CiAK
LXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
UGF0aCYgaXRlbSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3UGF0aCYpCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKLS8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgp
KTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICAvLyBGSVhNRTogYWRkIGxv
Z2dpbmcgZm9yIHBhdGhzLgogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ZvY3VzUmluZ1BhdGg6
OkRyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV93aWR0aCh3aWR0
aCkKLSAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0K
LURyYXdGb2N1c1JpbmdQYXRoOjp+RHJhd0ZvY3VzUmluZ1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNl
dCwgbV9jb2xvcik7CkBAIC0xMTA1LDcgKzY0Myw2IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3Rm9jdXNSaW5nUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5w
YXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0
IiwgaXRlbS5vZmZzZXQoKSk7CkBAIC0xMTE0LDE2ICs2NTEsMTMgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBp
dGVtKQogfQogCiBEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHMpCi0gICAgLCBtX3JlY3RzKHJlY3RzKQorICAgIDogbV9yZWN0cyhyZWN0cykKICAgICAs
IG1fd2lkdGgod2lkdGgpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NvbG9yKGNv
bG9yKQogewogfQogCi1EcmF3Rm9jdXNSaW5nUmVjdHM6On5EcmF3Rm9jdXNSaW5nUmVjdHMoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcmVjdHMs
IG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExNDAsNyArNjc0LDYgQEAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnMKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBp
dGVtLndpZHRoKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQo
KSk7CkBAIC0xMTQ4LDE0ICs2ODEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQogICAgIHJldHVy
biB0czsKIH0KIAotRmlsbFJlY3Q6OkZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQot
ewotfQotCi1GaWxsUmVjdDo6fkZpbGxSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5m
aWxsUmVjdChtX3JlY3QpOwpAQCAtMTE2MywyMCArNjg4LDEwIEBAIHZvaWQgRmlsbFJlY3Q6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmls
bFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aENvbG9yKQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQotewot
fQotCi1GaWxsUmVjdFdpdGhDb2xvcjo6fkZpbGxSZWN0V2l0aENvbG9yKCkgPSBkZWZhdWx0Owot
CiB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOwpAQCAtMTE4
NCwyMSArNjk5LDE3IEBAIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBp
dGVtLmNvbG9yKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRmlsbFJlY3RXaXRoR3JhZGllbnQ6
OkZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50
KQotICAgICwgbV9yZWN0KHJlY3QpCisgICAgOiBtX3JlY3QocmVjdCkKICAgICAsIG1fZ3JhZGll
bnQoZ3JhZGllbnQpCiB7CiB9CiAKLUZpbGxSZWN0V2l0aEdyYWRpZW50Ojp+RmlsbFJlY3RXaXRo
R3JhZGllbnQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0
KG1fcmVjdCwgbV9ncmFkaWVudC5nZXQoKSk7CkBAIC0xMjA2LDIzICs3MTcsMTEgQEAgdm9pZCBG
aWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTogbG9nIGdyYWRpZW50LgogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLUZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgLCBt
X29wKG9wKQotICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1GaWxsQ29tcG9z
aXRlZFJlY3Q6On5GaWxsQ29tcG9zaXRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbENv
bXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsK
QEAgLTEyMzAsNyArNzI5LDYgQEAgdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVy
YXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwpAQCAtMTIzOCwxNiArNzM2LDYgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxD
b21wb3NpdGVkUmVjdCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSb3VuZGVkUmVj
dDo6RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3Io
Y29sb3IpCi0gICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxSb3VuZGVk
UmVjdDo6fkZpbGxSb3VuZGVkUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUm91bmRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKQEAgLTEyNTUs
MjMgKzc0MywxMiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwg
aXRlbS5jb2xvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJs
ZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICwg
bV9yZWN0KHJlY3QpCi0gICAgLCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3QpCi0g
ICAgLCBtX2NvbG9yKGNvbG9yKQotewotfQotCi1GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6fkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVSZWN0
LCBtX2NvbG9yKTsKQEAgLTEyNzksNyArNzU2LDYgQEAgdm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0ZW0ucm91bmRlZEhvbGVS
ZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwpAQCAt
MTI4OCwxNCArNzY0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGUKIAogI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgoY29uc3Qg
SW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoKQotICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKLXsKLX0KLQotRmlsbElu
bGluZVBhdGg6On5GaWxsSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsSW5saW5l
UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuZmlsbFBhdGgocGF0aCgpKTsKQEAgLTEzMDMsMjEgKzc3MSwxMiBAQCB2b2lkIEZpbGxJbmxp
bmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsSW5saW5lUGF0
aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotRmlsbFBh
dGg6OkZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RmlsbFBhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRmlsbFBhdGg6On5GaWxs
UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKQEAgLTEz
MjUsMTkgKzc4NCwxMCBAQCB2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0u
cGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVs
bGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotRmlsbEVsbGlwc2U6On5GaWxsRWxs
aXBzZSgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0KTsK
QEAgLTEzNDUsMTQgKzc5NSwxMiBAQCB2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIFB1dEltYWdlRGF0YTo6
UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNyY1Jl
Y3QpCisgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2lu
dCkKICAgICAsIG1faW1hZ2VEYXRhKGltYWdlRGF0YS5kZWVwQ2xvbmUoKSkgLy8gVGhpcyBjb3B5
IGlzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBzZW1hbnRpY3Mgb2YgcHV0SW1h
Z2VEYXRhKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQpAQCAtMTM2MSw4ICs4
MDksNyBAQCBQdXRJbWFnZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmCiB9CiAKIFB1dEltYWdlRGF0YTo6UHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+
JiYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisg
ICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkKICAg
ICAsIG1faW1hZ2VEYXRhKFdURk1vdmUoaW1hZ2VEYXRhKSkKICAgICAsIG1faW5wdXRGb3JtYXQo
aW5wdXRGb3JtYXQpCkBAIC0xMzcwLDggKzgxNyw2IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYK
IHsKIH0KIAotUHV0SW1hZ2VEYXRhOjp+UHV0SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICAvLyBT
aG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdhdGUuCkBAIC0xMzgwLDcgKzgyNSw2IEBAIHZv
aWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRh
JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZURhdGFTaXplIiwgaXRlbS5pbWFnZURhdGEo
KS5zaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgp
KTsKQEAgLTEzODksMzIgKzgzMywxMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQogICAgIHJldHVybiB0czsK
IH0KIAotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUo
TWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5h
dGlvbikpOwotfQotCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6
OmNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9y
TWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKLX0KLQogUGFpbnRGcmFtZUZvck1lZGlh
OjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKKyAgICA6IG1f
aWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKIHsKIH0KIAotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhKQot
ICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uKQotewotfQotCi1QYWludEZyYW1lRm9yTWVkaWE6On5QYWludEZyYW1lRm9yTWVkaWEo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0
ZS4KQEAgLTE0MjMsMjAgKzg0NywxMCBAQCB2b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBhaW50RnJhbWVGb3JNZWRpYSYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0
czsKIH0KIAotU3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQot
ICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCi17Ci19Ci0K
LVN0cm9rZVJlY3Q6On5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJl
Y3Q+IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKQEAgLTE0NTEsNyArODY1LDYgQEAg
dm9pZCBTdHJva2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJv
a2VSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOwogICAgIHJl
dHVybiB0czsKQEAgLTE0NzQsMTkgKzg4NywxMCBAQCB2b2lkIFN0cm9rZVBhdGg6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJva2VF
bGxpcHNlOjpTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19
Ci0KLVN0cm9rZUVsbGlwc2U6On5TdHJva2VFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiBPcHRpb25h
bDxGbG9hdFJlY3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250
ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTUwMyw3ICs5MDcsNiBAQCB2b2lkIFN0cm9rZUVs
bGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlwc2Um
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJu
IHRzOwogfQpAQCAtMTUyNywzNyArOTMwLDEyIEBAIHZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlSW5saW5lUGF0aCYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLVN0cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERh
dGEmIHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUlubGluZVBh
dGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1TdHJva2VJbmxpbmVQYXRo
Ojp+U3Ryb2tlSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogCi1TdHJva2VQYXRoOjpTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAsIG1fcGF0aChw
YXRoKQotewotfQotCi1TdHJva2VQYXRoOjp+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKLQotQ2xl
YXJSZWN0OjpDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkNsZWFyUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGVh
clJlY3Q6On5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVhclJlY3Qo
bV9yZWN0KTsKQEAgLTE1NjUsMTkgKzk0MywxMCBAQCB2b2lkIENsZWFyUmVjdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJSZWN0JiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotQmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAgLCBt
X29wYWNpdHkob3BhY2l0eSkKLXsKLX0KLQotQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6fkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwpAQCAtMTU4NSw1NyArOTU0LDI4
IEBAIHZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUVuZFRy
YW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi17Ci19Ci0KLUVuZFRyYW5zcGFyZW5j
eUxheWVyOjp+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKICNpZiBVU0UoQ0cpCi1B
cHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCi17Ci19Ci0KLUFwcGx5U3Ryb2tlUGF0dGVybjo6fkFw
cGx5U3Ryb2tlUGF0dGVybigpID0gZGVmYXVsdDsKIAogdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmFw
cGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi1BcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0
ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCi17Ci19Ci0KLUFw
cGx5RmlsbFBhdHRlcm46On5BcHBseUZpbGxQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFw
cGx5RmlsbFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KICNlbmRpZgogCi1BcHBseURldmlj
ZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQot
ICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAsIG1fc2Nh
bGVGYWN0b3Ioc2NhbGVGYWN0b3IpCi17Ci19Ci0KLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6On5B
cHBseURldmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7CkBAIC0xNjQ3LDcg
Kzk4Nyw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBBcHBseURldmljZVNjYWxlRmFjdG9yJiBpdGVtCiAgICAgcmV0dXJuIHRzOwogfQogCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5
cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
SXRlbVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwpAQCAtMTcxOCwxNzIgKzEwNTgsMTcwIEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlw
ZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKLSAgICAvLyBGSVhNRTog
TWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlv
biBzd2l0Y2hlcwogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKICAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTY2FsZT4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldENU
TT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29u
Y2F0ZW5hdGVDVE0+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdy
YWRpZW50PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRp
ZW50PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
U3Ryb2tlVGhpY2tuZXNzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVE
YXNoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1p
dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PENsaXA+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxDbGlwT3V0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dD4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PENsaXBPdXRUb1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXBQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdHbHlwaHM+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdU
aWxlZFNjYWxlZEltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJ
bWFnZUJ1ZmZlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdOYXRpdmVJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
UmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd0xpbmU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3TGluZT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0VsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3RWxsaXBzZT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0Pihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3Q+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEZpbGxSZWN0V2l0aENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbElubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxQYXRoPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFBhdGg+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxGaWxsRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxFbGxpcHNl
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxQYWludEZy
YW1lRm9yTWVkaWE+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxQYWludEZyYW1lRm9y
TWVkaWE+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxTdHJva2VSZWN0PigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxT
dHJva2VQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlUGF0aD4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFN0cm9rZUVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xlYXJSZWN0PigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgLy8gSXRl
bXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aAppbmRleCBmMDE1YmU1ZTg2NjA2ZWNjMmY2Y2U4NTdjMWY3MTE2NzY5NGZlOGUzLi4yYTQ2MjZl
OGViMzE1MGQ4MTg1NGNmYjJhZTJhYjYzZTMyYzBhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKQEAgLTUxLDMyMCArNTEsMTYzIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0
aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW0gOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBTYXZlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBl
eHBsaWNpdCBEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTYXZlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3aW5nSXRl
bSgpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lk
IHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAgY29u
c3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9
Ci0KLSAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9v
bD4obV9leHRlbnQpOyB9Ci0KLSAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBv
cGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVkZSBl
ZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0dWFs
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLSAgICAvLyBTb21lIG9wZXJhdGlvbnMg
KGUuZy4gcHV0SW1hZ2VEYXRhKSBvcGVyYXRlIGluIGdsb2JhbCBib3VuZHMuIEZvciB0aGVzZSBv
cGVyYXRpb25zLCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLSAgICAvLyBJZiBhcHBsaWNhYmxlLCB0
aGUgcmV0dXJuIHZhbHVlIG5lZWRzIHRvIGluY2x1ZGUgdGhlIGVmZmVjdHMgb2Ygc2hhZG93cywg
Y2xpcHBpbmcsIGV0Yy4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9v
bCBpc0RyYXdpbmdJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFr
aW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLWNsYXNzIFNhdmUgOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNhdmU+
IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKLSAg
ICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpS
ZXN0b3JlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TYXZlKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFNhdmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIFNhdmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2F2ZTo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFNhdmU+PiBTYXZlOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFNhdmU6OmNy
ZWF0ZSgpOwotfQotCi1jbGFzcyBSZXN0b3JlIDogcHVibGljIEl0ZW0geworY2xhc3MgVHJhbnNs
YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3JlKTsKLSAgICB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXN0b3JlKCk7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxSZXN0b3JlPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXN0b3JlKCk7Ci0KLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgUmVzdG9yZTo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBSZXN0b3JlOjpk
ZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFJlc3RvcmU6OmNyZWF0ZSgpOwotfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6VHJhbnNsYXRl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLWNsYXNzIFRyYW5z
bGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4g
Y3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCisgICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
CisgICAgICAgIDogbV94KHgpCisgICAgICAgICwgbV95KHkpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflRyYW5zbGF0ZSgpOwotCiAgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0
dXJuIG1feDsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IGRl
Y29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGZs
b2F0IG1feDsKLSAgICBmbG9hdCBtX3k7Citwcml2YXRlOgorICAgIGZsb2F0IG1feCB7IDAgfTsK
KyAgICBmbG9hdCBtX3kgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBUcmFuc2xhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV94OwotICAgIGVuY29kZXIgPDwgbV95OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IFRyYW5zbGF0ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAgZGVjb2RlciA+PiB4Owot
ICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFs
PGZsb2F0PiB5OwotICAgIGRlY29kZXIgPj4geTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gVHJhbnNsYXRlOjpjcmVhdGUoKngsICp5KTsK
LX0KLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgUm90YXRlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBSb3RhdGUo
ZmxvYXQgYW5nbGUpCisgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJvdGF0ZSgpOwotCiAgICAgZmxvYXQgYW5nbGUoKSBj
b25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxSb3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIFJvdGF0ZShmbG9hdCBhbmdsZSk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFucy4KK3ByaXZh
dGU6CisgICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFJvdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2FuZ2xlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJvdGF0ZT4+IFJvdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGFuZ2xlOwotICAgIGRlY29kZXIgPj4gYW5n
bGU7Ci0gICAgaWYgKCFhbmdsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBSb3RhdGU6OmNyZWF0ZSgqYW5nbGUpOwotfQotCi1jbGFzcyBTY2FsZSA6IHB1Ymxp
YyBJdGVtIHsKK2NsYXNzIFNjYWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNjYWxlPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKKworICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAg
ICAgOiBtX3NpemUoc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNj
YWxlKHNpemUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TY2FsZSgp
OwotCiAgICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNj
YWxlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
Y2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3By
aXZhdGU6CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIFNjYWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fc2l6ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxTY2FsZT4+IFNjYWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRp
b25hbDxGbG9hdFNpemU+IHNjYWxlOwotICAgIGRlY29kZXIgPj4gc2NhbGU7Ci0gICAgaWYgKCFz
Y2FsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTY2FsZTo6
Y3JlYXRlKCpzY2FsZSk7Ci19Ci0KLWNsYXNzIFNldENUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNldENUTSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRDVE0+IGNyZWF0ZShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlNldENUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOworCisgICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldENUTShtYXRyaXgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5TZXRDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldENUTT4+IGRlY29kZShEZWNvZGVy
Jik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBTZXRDVE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U2V0Q1RNPj4gU2V0Q1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKLSAgICBkZWNvZGVyID4+IHRy
YW5zZm9ybTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBTZXRDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xhc3Mg
Q29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDb25jYXRlbmF0ZUNUTSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKKworICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRlQ1RNKG1hdHJpeCkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNvbmNhdGVuYXRlQ1RNKCk7Ci0KICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxDb25jYXRlbmF0ZUNUTT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9y
bSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENvbmNh
dGVuYXRlQ1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fdHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPENvbmNhdGVuYXRlQ1RNPj4gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRl
Y29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUoKnRyYW5z
Zm9ybSk7Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ4X3QgbWF4Q29sb3JTdG9wQ291bnQgPSA0OwogCi0gICAgc3RhdGljIFJlZjxT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFkaWVudCYpOwotICAgIHN0YXRp
YyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7Ci0KLSAgICB2aXJ0dWFsIH5TZXRJbmxp
bmVGaWxsR3JhZGllbnQoKTsKLQotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25zdDsK
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElu
bGluZUZpbGxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShmbG9hdCBvZmZzZXRzW21heENv
bG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwK
LSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJl
YWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGllbnQob2Zmc2V0cywgY29sb3JzLCBkYXRh
LCBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIHNwcmVhZE1ldGhvZCwgY29sb3JTdG9wQ291
bnQpKTsKLSAgICB9Ci0KKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0
c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BD
b3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiwKICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kLCB1
aW50OF90IGNvbG9yU3RvcENvdW50KTsKIAotICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25z
dCBHcmFkaWVudCYpOworICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7
CisgICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorCitwcml2YXRlOgogICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0b3BD
b3VudF07CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwog
ICAgIEdyYWRpZW50OjpEYXRhIG1fZGF0YTsKQEAgLTM3MywxOTggKzIxNiw3OSBAQCBwcml2YXRl
OgogICAgIHVpbnQ4X3QgbV9jb2xvclN0b3BDb3VudCB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENvdW50OwotICAg
IGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAg
ICBlbmNvZGVyIDw8IG1fb2Zmc2V0c1tpXTsKLSAgICAgICAgZW5jb2RlciA8PCBQYWNrZWRDb2xv
cjo6UkdCQSB7IG1fY29sb3JzW2ldIH0udmFsdWU7Ci0gICAgfQotICAgIGVuY29kZXIgPDwgbV9k
YXRhOwotICAgIGVuY29kZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAg
ZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQ4X3Q+IGNv
bG9yU3RvcENvdW50OwotICAgIGRlY29kZXIgPj4gY29sb3JTdG9wQ291bnQ7Ci0gICAgaWYgKCFj
b2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICgq
Y29sb3JTdG9wQ291bnQgPiBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAgIFNS
R0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgZm9yICh1aW50OF90
IGkgPSAwOyBpIDwgKmNvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgT3B0aW9uYWw8Zmxv
YXQ+IG9mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBvZmZzZXQ7Ci0gICAgICAgIGlmICghb2Zm
c2V0KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBPcHRpb25h
bDx1aW50MzJfdD4gY29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgICAgIGlm
ICghY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGNv
bG9yc1tpXSA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqY29sb3IgfSk7Ci0gICAgICAg
IG9mZnNldHNbaV0gPSAqb2Zmc2V0OwotICAgIH0KLQotICAgIE9wdGlvbmFsPEdyYWRpZW50OjpE
YXRhPiBkYXRhOwotICAgIGRlY29kZXIgPj4gZGF0YTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBkZWNvZGVyID4+IGdyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbjsKLSAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEdyYWRpZW50U3ByZWFk
TWV0aG9kPiBzcHJlYWRNZXRob2Q7Ci0gICAgZGVjb2RlciA+PiBzcHJlYWRNZXRob2Q7Ci0gICAg
aWYgKCFzcHJlYWRNZXRob2QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4geyBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShvZmZzZXRzLCBjb2xvcnMsICpk
YXRhLCAqZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCAqc3ByZWFkTWV0aG9kLCAqY29sb3JT
dG9wQ291bnQpIH07Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxDb2xvciA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xvcigpOwotCi0g
ICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLQotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZUZp
bGxDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQor
ICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvciBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRh
dGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVGaWxsQ29s
b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgUGFj
a2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxDb2xvcj4+IFNldElubGluZUZp
bGxDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDMy
X3Q+IHZhbHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRJbmxpbmVGaWxsQ29sb3I6
OmNyZWF0ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKLX0KLQotY2xh
c3MgU2V0SW5saW5lU3Ryb2tlQ29sb3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRJbmxpbmVT
dHJva2VDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflNldElubGluZVN0cm9rZUNvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihT
UkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQorICAgICAg
ICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFNSR0JBPHVpbnQ4X3Q+
IG1fY29sb3JEYXRhOwotfTsKKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9j
b2xvckRhdGEgfTsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVT
dHJva2VDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IFNldElubGluZVN0cm9rZUNv
bG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4g
dmFsdWU7Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KIAotICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGFz
U1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQorcHJpdmF0ZToKKyAgICBT
UkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKK307CiAKLWNsYXNzIFNldFN0cm9rZVRoaWNrbmVz
cyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0cm9rZVRoaWNrbmVzcyB7CiBwdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+IGNyZWF0ZShm
bG9hdCB0aGlja25lc3MpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ryb2tl
VGhpY2tuZXNzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdGhp
Y2tuZXNzOyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTZXRTdHJva2VUaGlja25lc3M+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgog
ICAgIFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi0gICAgICAgIDogSXRlbShJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAsIG1fdGhpY2tuZXNzKHRoaWNr
bmVzcykKKyAgICAgICAgOiBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgewogICAgIH0KIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBm
bG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKLX07CisgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV90aGlja25lc3M7IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
U2V0U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fdGhpY2tuZXNzOwotfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0
U3Ryb2tlVGhpY2tuZXNzPj4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gdGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4g
dGhpY2tuZXNzOwotICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAot
ICAgIHJldHVybiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSgqdGhpY2tuZXNzKTsKLX0KK3By
aXZhdGU6CisgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Cit9OwogCi1jbGFzcyBTZXRTdGF0
ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOwotICAgIH0K
LQotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZXRTdGF0ZShzdGF0ZUNoYW5nZSkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0YXRlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0U3RhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYpOwogICAgIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIApAQCAtNTczLDE0ICsyOTcsMTQgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTZXRTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlIG1fc3RhdGU7CiB9OwogCkBAIC02NjksNyArMzkzLDcgQEAgdm9pZCBTZXRT
dGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKICAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOwpAQCAt
ODk2LDY4ICs2MjAsNTUgQEAgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3RhdGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIH0KIAotICAg
IHJldHVybiBTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlKTsKKyAgICByZXR1cm4geyBzdGF0
ZUNoYW5nZSB9OwogfQogCi1jbGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0TGluZUNhcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lQ2FwPiBjcmVhdGUo
TGluZUNhcCBsaW5lQ2FwKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOworCisgICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCisgICAgICAgIDogbV9s
aW5lQ2FwKGxpbmVDYXApCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRM
aW5lQ2FwKGxpbmVDYXApKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5T
ZXRMaW5lQ2FwKCk7Ci0gICAgCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQ2FwOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRMaW5lQ2FwPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBTZXRMaW5lQ2FwKExpbmVDYXApOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAorcHJpdmF0ZToKICAgICBMaW5lQ2FwIG1fbGluZUNhcDsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVDYXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9saW5lQ2FwOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBTZXRMaW5lQ2FwOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lQ2FwPiBsaW5lQ2FwOwotICAg
IGRlY29kZXIgPj4gbGluZUNhcDsKLSAgICBpZiAoIWxpbmVDYXApCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUNhcDo6Y3JlYXRlKCpsaW5lQ2FwKTsK
LX0KLQotY2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lRGFz
aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERh
c2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBtX2Rhc2hB
cnJheShkYXNoQXJyYXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRh
c2hPZmZzZXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5l
RGFzaCgpOwotCiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVy
biBtX2Rhc2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2Rhc2hPZmZzZXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29kZXImKTsK
IAorcHJpdmF0ZToKICAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7CiAgICAgZmxvYXQgbV9kYXNo
T2Zmc2V0OwogfTsKQEAgLTk3MCw3ICs2ODEsNyBAQCB2b2lkIFNldExpbmVEYXNoOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7CiAgICAgZGVj
b2RlciA+PiBkYXNoQXJyYXk7CkBAIC05ODIsMjE1ICs2OTMsMTM4IEBAIE9wdGlvbmFsPFJlZjxT
ZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBp
ZiAoIWRhc2hPZmZzZXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gU2V0TGluZURhc2g6OmNyZWF0ZSgqZGFzaEFycmF5LCAqZGFzaE9mZnNldCk7CisgICAgcmV0
dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwogfQogCi1jbGFzcyBTZXRMaW5lSm9p
biA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVKb2luIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCisgICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVKb2luKGxpbmVKb2luKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TGluZUpvaW4oKTsKLSAgICAK
ICAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVK
b2luPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
ZXRMaW5lSm9pbihMaW5lSm9pbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2
YXRlOgogICAgIExpbmVKb2luIG1fbGluZUpvaW47CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBTZXRMaW5lSm9pbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVKb2luOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPFNldExpbmVKb2luPj4gU2V0TGluZUpvaW46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVKb2luPiBsaW5lSm9pbjsKLSAgICBkZWNv
ZGVyID4+IGxpbmVKb2luOwotICAgIGlmICghbGluZUpvaW4pCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUpvaW46OmNyZWF0ZSgqbGluZUpvaW4pOwot
fQotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TWl0ZXJM
aW1pdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRNaXRlckxpbWl0PiBjcmVhdGUoZmxv
YXQgbGltaXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFs
c2U7CisKKyAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCisgICAgICAgIDogbV9t
aXRlckxpbWl0KG1pdGVyTGltaXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTZXRNaXRlckxpbWl0KGxpbWl0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+U2V0TWl0ZXJMaW1pdCgpOwotCiAgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TWl0ZXJMaW1pdChmbG9hdCk7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsK
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldE1pdGVyTGltaXQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9taXRlckxpbWl0
OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldE1pdGVyTGlt
aXQ+PiBTZXRNaXRlckxpbWl0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRp
b25hbDxmbG9hdD4gbWl0ZXJMaW1pdDsKLSAgICBkZWNvZGVyID4+IG1pdGVyTGltaXQ7Ci0gICAg
aWYgKCFtaXRlckxpbWl0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIFNldE1pdGVyTGltaXQ6OmNyZWF0ZSgqbWl0ZXJMaW1pdCk7Ci19Ci0KLWNsYXNzIENsZWFy
U2hhZG93IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xlYXJTaGFkb3cgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+Q2xlYXJTaGFkb3coKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJTaGFkb3coKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclNoYWRvdzo6ZW5j
b2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gQ2xlYXJTaGFkb3c6OmRlY29kZShEZWNvZGVyJikKLXsK
LSAgICByZXR1cm4gQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpOwotfQotCi0vLyBGSVhNRTogdHJlYXQg
YXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworLy8gRklYTUU6IHRy
ZWF0IGFzIGRyYXdpbmcgaXRlbT8KK2NsYXNzIENsaXAgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Q2xpcD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXA7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ2xpcChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
Q2xpcCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcD4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCiBwcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsaXA6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0Owot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXA+PiBDbGlwOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7
Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGlwOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFz
cyBDbGlwT3V0IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxDbGlwT3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxD
bGlwT3V0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcE91dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcE91dD4+IENsaXBPdXQ6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJl
Y3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIENsaXBPdXQ6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXRUb1BhdGgg
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0VG9QYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBPdXRU
b1BhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0VG9QYXRoKHBhdGgpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0VG9QYXRoKCk7CisgICAg
Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQor
ICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9w
YXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxDbGlwT3V0VG9QYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gZGVjb2RlKERlY29kZXImKTsK
IAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgm
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
K3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMTIwMCwzNyArODM0LDQ3IEBAIHZvaWQgQ2xpcE91dFRvUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8Q2xpcE91dFRvUGF0aD4+IENsaXBPdXRUb1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+
IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIENsaXBPdXRUb1BhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdU
Rk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBDbGlwUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIENsaXBQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwUGF0aDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBQYXRoKFBhdGgmJiBwYXRoLCBX
aW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAgICAg
ICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB+Q2xpcFBhdGgoKTsKKyAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpbmRSdWxl
KHdpbmRSdWxlKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVy
biBtX3dpbmRSdWxlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxDbGlwUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBD
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIGNvbnN0IFBhdGggbV9w
YXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBXaW5kUnVsZSBtX3dpbmRSdWxl
OwogfTsKIApAQCAtMTI0Miw3ICs4ODYsNyBAQCB2b2lkIENsaXBQYXRoOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxDbGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlv
bmFsPENsaXBQYXRoPiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
T3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0xMjU0LDMwICs4
OTgsMzUgQEAgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIGlmICghd2luZFJ1bGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gQ2xpcFBhdGg6OmNyZWF0ZSgqcGF0aCwgKndpbmRSdWxlKTsKKyAg
ICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aW5kUnVsZSB9fTsKIH0KIAotY2xhc3MgQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICAgICAgOiBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAg
ICAgICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0
aW5hdGlvbiwgY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOwotCiAgICAgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3Bh
Y2U7IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZHJhd2luZ0NvbW1hbmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3aW5nQ29tbWFuZHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBU
b0RyYXdpbmdDb21tYW5kcz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgQ29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5h
dGlvbjsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBEaXNwbGF5TGlzdCBtX2Ry
YXdpbmdDb21tYW5kczsKQEAgLTEyODgsMTEgKzkzNywxMSBAQCB2b2lkIENsaXBUb0RyYXdpbmdD
b21tYW5kczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8
PCBtX2Rlc3RpbmF0aW9uOwogICAgIGVuY29kZXIgPDwgbV9jb2xvclNwYWNlOwotICAgIGVuY29k
ZXIgPDwgbV9kcmF3aW5nQ29tbWFuZHM7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0
byBlbmNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENsaXBUb0RyYXdp
bmdDb21tYW5kcz4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwogICAgIGRlY29kZXIg
Pj4gZGVzdGluYXRpb247CkBAIC0xMzA0LDI3ICs5NTMsMTYgQEAgT3B0aW9uYWw8UmVmPENsaXBU
b0RyYXdpbmdDb21tYW5kcz4+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29kZXIm
IGRlY28KICAgICBpZiAoIWNvbG9yU3BhY2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICBPcHRpb25hbDxEaXNwbGF5TGlzdD4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGRlY29k
ZXIgPj4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGlmICghZHJhd2luZ0NvbW1hbmRzKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5k
czo6Y3JlYXRlKCpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoKmRyYXdpbmdDb21t
YW5kcykpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB3YXkgdG8gZGVjb2RlIGluLW1lbW9y
eSBkaXNwbGF5IGxpc3RzLgorICAgIERpc3BsYXlMaXN0IGRyYXdpbmdDb21tYW5kczsKKyAgICBy
ZXR1cm4ge3sgKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFu
ZHMpIH19OwogfQogCi1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIERyYXdHbHlwaHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3Jl
YXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBW
ZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVmZmVy
QWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgV1RGTW92ZShnbHlwaHMpLCBXVEZNb3ZlKGFk
dmFuY2VzKSwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3R2x5cGhzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKICAgICBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KIApAQCAtMTMzMywyMSArOTcx
LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYg
Z2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3R2x5
cGhzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgogICAgIERyYXdHbHlwaHMoY29uc3Qg
Rm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBW
ZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNl
LCAxMjg+JiYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSk7CiAKLSAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wdXRlQm91bmRz
KCk7CiAgICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OwogCi0gICAg
UmVmPEZvbnQ+IG1fZm9udDsKKyAgICBSZWZQdHI8Rm9udD4gbV9mb250OwogICAgIFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFk
dmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKICAgICBGbG9hdFJlY3QgbV9ib3VuZHM7CkBAIC0xMzU4
LDcgKzk5Niw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBEcmF3
R2x5cGhzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8
IG1fZm9udDsKKyAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1fZm9udCk7CiAgICAgZW5jb2RlciA8
PCBtX2dseXBoczsKICAgICBlbmNvZGVyIDw8IG1fYWR2YW5jZXM7CiAgICAgZW5jb2RlciA8PCBt
X2xvY2FsQW5jaG9yOwpAQCAtMTM2Niw3ICsxMDA0LDcgQEAgdm9pZCBEcmF3R2x5cGhzOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitPcHRpb25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxSZWY8Rm9udD4+IGZvbnQ7CiAgICAgZGVjb2RlciA+
PiBmb250OwpAQCAtMTM5NiwzMiArMTAzNCwzNSBAQCBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+
IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghc21vb3RoaW5n
TW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3R2x5
cGhzOjpjcmVhdGUoZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFu
Y2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSk7CisgICAgcmV0dXJuIHt7IGZvbnQt
PmdldCgpLCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hv
ciwgKnNtb290aGluZ01vZGUgfX07CiB9Ci0KLWNsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJh
d0ltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6RHJhd0ltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2Up
CisgICAgICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJj
ZShzb3VyY2UpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5n
T3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShp
bWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2UoKTsKLQogICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9h
dFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJlY3Qg
ZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxEcmF3SW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdl
OyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8g
cHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBAIC0xNDQxLDcgKzEw
ODIsNyBAQCB2b2lkIERyYXdJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJh
d0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZT4gRHJh
d0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhh
bmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE0NjMs
MTcgKzExMDQsMTQgQEAgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERyYXdJbWFnZTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2U6OmNyZWF0ZSgq
aW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5n
T3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlv
biwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGls
ZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRJbWFnZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsK
LSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRJbWFnZSgpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1Rp
bGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAogICAg
IGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAg
ICBGbG9hdFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC0xNDgy
LDE2ICsxMTIwLDI1IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX3RpbGVTaXplOyB9CiAgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPERyYXdUaWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBEcmF3
VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAg
LCBtX3RpbGVTaXplKHRpbGVTaXplKQorICAgICAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAg
ICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAg
eworICAgIH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBk
ZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2lt
YWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMg
dG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9h
dFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFBvaW50IG1fc291cmNlOwpAQCAtMTUxNCw3
ICsxMTYxLDcgQEAgdm9pZCBEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1Rp
bGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxEcmF3VGlsZWRJbWFnZT4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNv
ZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTU0NiwzMiArMTE5MywzOSBAQCBPcHRpb25hbDxSZWY8
RHJhd1RpbGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+
aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdl
UGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRl
c3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09w
dGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK2NsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOworCisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRp
bGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3Rp
bGVTY2FsZUZhY3Rvcih0aWxlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9oUnVsZShoUnVsZSkK
KyAgICAgICAgLCBtX3ZSdWxlKHZSdWxlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlv
bnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsK
LQogICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7
IH0KICAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAg
ICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3
VGlsZWRTY2FsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gZGVjb2RlKERlY29k
ZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1h
Z2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5p
bWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgog
ICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAg
LTE1OTYsNyArMTI1MCw3IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IERyYXdU
aWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsK
QEAgLTE2MzEsMzMgKzEyODUsMzcgQEAgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdl
Pj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAo
IWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFn
ZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUs
ICppbWFnZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1h
Z2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxl
LCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZUJ1ZmZlciA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2VCdWZmZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlQnVmZmVyPiBjcmVhdGUoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKKyAgICAgICAgOiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVz
dFJlY3QpCisgICAgICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgICAgICwgbV9vcHRpb25z
KG9wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2VC
dWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBkZXN0aW5hdGlvbiwgc291cmNlLCBv
cHRpb25zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ltYWdl
QnVmZmVyKCk7Ci0KICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI7IH0KICAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0
OyB9CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb25SZWN0OyB9CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fb3B0aW9uczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0
aW5hdGlvblJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPERyYXdJbWFnZUJ1ZmZlcj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7
CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwogICAgIEZsb2F0UmVjdCBtX3NyY1Jl
Y3Q7CkBAIC0xNjc0LDcgKzEzMzIsNyBAQCB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZUJ1ZmZlcj4gRHJhd0ltYWdlQnVmZmVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXI+IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBkZWNvZGVyID4+
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKQEAgLTE2OTYsMzEgKzEzNTQsMjkgQEAgT3B0
aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIERyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCpyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMpOworICAgIHJl
dHVybiB7eyAqcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3Vy
Y2UsICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3TmF0aXZlSW1hZ2UgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgRHJhd05hdGl2ZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdOYXRpdmVJbWFnZT4gY3JlYXRlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKLSAgICB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TmF0
aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpOwotCi0gICAgRmxvYXRS
ZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQotICAgIEZsb2F0UmVjdCBk
ZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNv
bnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJ
bWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8RHJhd05hdGl2ZUltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2
YXRlOgogICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CiAgICAgRmxvYXRTaXplIG1faW1hZ2VT
aXplOwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKQEAgLTE3MzksNyArMTM5NSw3
IEBAIHZvaWQgRHJhd05hdGl2ZUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1h
Z2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
RHJhd05hdGl2ZUltYWdlPiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIE9wdGlvbmFsPE5hdGl2ZUltYWdlUHRyPiBpbWFnZTsKICAgICBkZWNvZGVyID4+
IGltYWdlOwpAQCAtMTc2NiwxNyArMTQyMiwxNiBAQCBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUlt
YWdlPj4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJh
d05hdGl2ZUltYWdlOjpjcmVhdGUoKmltYWdlLCAqaW1hZ2VTaXplLCAqZGVzdGluYXRpb25SZWN0
LCAqc3JjUmVjdCwgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2UsICppbWFnZVNpemUs
ICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJh
d1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1BhdHRlcm4gewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0dGVy
bihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UGF0dGVy
bigpOworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgY29uc3QgSW1hZ2Um
IGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVyblRy
YW5zZm9ybTsgfQpAQCAtMTc4NSwxNiArMTQ0MCwxNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0KICAgICBGbG9hdFNpemUgc3BhY2lu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uOyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERy
YXdQYXR0ZXJuPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVm
PEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWly
IGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJs
ZS4KICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJuVHJhbnNmb3JtOwogICAgIEZsb2F0UmVj
dCBtX3RpbGVSZWN0OwpAQCAtMTgxOSw3ICsxNDczLDcgQEAgdm9pZCBEcmF3UGF0dGVybjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitPcHRpb25hbDxEcmF3UGF0dGVybj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsK
ICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTg1NiwxODIgKzE1MTAsMTAwIEBAIE9w
dGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICByZXR1cm4gRHJhd1BhdHRlcm46OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVz
dGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcs
ICpvcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0
aW9uLCAqdGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2UsICpzcGFjaW5nLCAqb3B0
aW9ucyB9fTsKIH0KIAotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUg
dHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xhc3Mg
QmVnaW5UcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBCZWdp
blRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7IC8vIElzIGRyYXdpbmcgaXRlbSBi
ZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0
aGUgY2xpcCBib3VuZHMuCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCisgICAgICAgIDogbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCk7Ci0K
ICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxCZWdpblRyYW5zcGFy
ZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fb3BhY2l0eTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxCZWdpblRyYW5zcGFy
ZW5jeUxheWVyPj4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IG9wYWNpdHk7Ci0gICAgZGVjb2RlciA+PiBvcGFj
aXR5OwotICAgIGlmICghb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKm9wYWNpdHkpOwotfQot
Ci1jbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBFbmRUcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRUcmFu
c3BhcmVuY3lMYXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEVuZFRyYW5zcGFyZW5jeUxheWVyKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJikg
Y29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxFbmRU
cmFuc3BhcmVuY3lMYXllcj4+IEVuZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYp
Ci17Ci0gICAgcmV0dXJuIEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKTsKLX0KLQotY2xh
c3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1JlY3QgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdSZWN0KEZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9ib3JkZXJU
aGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1JlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9ib3JkZXJUaGlja25lc3M7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CiAgICAgZmxvYXQgbV9ib3JkZXJUaGlja25lc3M7CiB9OwogCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBEcmF3UmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2JvcmRlclRoaWNr
bmVzczsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UmVj
dD4+IERyYXdSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBib3JkZXJU
aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiBib3JkZXJUaGlja25lc3M7Ci0gICAgaWYgKCFib3Jk
ZXJUaGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
RHJhd1JlY3Q6OmNyZWF0ZSgqcmVjdCwgKmJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLWNsYXNzIERy
YXdMaW5lIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdMaW5lIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3TGluZShGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQ
b2ludCBwb2ludDIpCisgICAgICAgIDogbV9wb2ludDEocG9pbnQxKQorICAgICAgICAsIG1fcG9p
bnQyKHBvaW50MikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RHJhd0xpbmUoKTsKLQogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9w
b2ludDE7IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQy
OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3TGluZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fcG9pbnQxOwog
ICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBEcmF3TGluZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBtX3BvaW50MTsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQyOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gRHJhd0xpbmU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsK
LSAgICBkZWNvZGVyID4+IHBvaW50MTsKLSAgICBpZiAoIXBvaW50MSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MjsKLSAgICBk
ZWNvZGVyID4+IHBvaW50MjsKLSAgICBpZiAoIXBvaW50MikKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3TGluZTo6Y3JlYXRlKCpwb2ludDEsICpwb2ludDIp
OwotfQotCi1jbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIERyYXdMaW5lc0ZvclRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVz
Rm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxvY2Fs
QW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7Ci0gICAg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0xpbmVzRm9yVGV4dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2Nh
dGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CiAK
ICAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlv
bikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29uc3QgRmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQpA
QCAtMjA0MiwxNiArMTYxNCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ByaW50aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9wcmludGluZzsgfQogICAgIGJvb2wgZG91YmxlTGluZXMoKSBjb25zdCB7
IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBkZWNvZGUo
RGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwog
ICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwogICAgIERhc2hBcnJheSBtX3dpZHRoczsKQEAg
LTIwNzIsNyArMTY0Myw3IEBAIHZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4dD4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYmxvY2tM
b2NhdGlvbjsKICAgICBkZWNvZGVyID4+IGJsb2NrTG9jYXRpb247CkBAIC0yMTA0LDExOSArMTY3
NSw4MyBAQCBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZG91YmxlTGluZXMpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0xpbmVzRm9yVGV4dDo6Y3Jl
YXRlKCpibG9ja0xvY2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMsICpw
cmludGluZywgKmRvdWJsZUxpbmVzKTsKKyAgICByZXR1cm4ge3sgKmJsb2NrTG9jYXRpb24sICps
b2NhbEFuY2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMg
fX07CiB9CiAKLWNsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1f
c3R5bGUoc3R5bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpOwotCiAgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSk7CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgeworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0VsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAg
RHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0
KQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3By
aXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBtX3N0eWxlOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX3N0eWxlOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
PiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAg
IGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFs
PERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBzdHlsZTsKLSAgICBkZWNvZGVyID4+IHN0eWxlOwot
ICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKCpyZWN0LCAqc3R5bGUpOwotfQot
Ci1jbGFzcyBEcmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0
aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OkRyYXdQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CisKKyAgICBEcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChw
YXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0VsbGlwc2UocmVj
dCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5EcmF3RWxsaXBzZSgpOwotCi0gICAg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdFbGxpcHNlPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAg
IEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBE
cmF3RWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
RHJhd0VsbGlwc2U+PiBEcmF3RWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBp
ZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJh
d0VsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIERyYXdQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXRoPiBjcmVhdGUoY29u
c3QgUGF0aCYgcGF0aCkKKyAgICBEcmF3UGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3Bh
dGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3
UGF0aCgpOwotCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJh
d1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IERyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8RHJhd1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5m
YXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9w
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2
YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAg
LTIyMjYsMjQgKzE3NjEsMzcgQEAgdm9pZCBEcmF3UGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d1BhdGg+PiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3
UGF0aD4gRHJhd1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFs
PFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0aDo6Y3JlYXRlKCpw
YXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIERyYXdG
b2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1c1JpbmdQ
YXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFBhdGgmJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRo
KSkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
KyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUGF0aCgpOwor
ICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAs
IG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1f
Y29sb3IoY29sb3IpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2lkdGg7IH0KQEAgLTIyNTEsMTYgKzE3OTksMTUgQEAgcHVibGljOgogICAgIGNvbnN0IENvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gZGVjb2Rl
KERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
RHJhd0ZvY3VzUmluZ1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBm
bG9hdCBtX3dpZHRoOwogICAgIGZsb2F0IG1fb2Zmc2V0OwogICAgIENvbG9yIG1fY29sb3I7CkBA
IC0yMjc2LDcgKzE4MjMsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBEcmF3Rm9jdXNSaW5nUGF0
aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsK
ICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0yMjk4LDMzICsxODQ1LDMxIEBAIE9wdGlvbmFsPFJl
ZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUoKnBhdGgsICp3aWR0aCwgKm9m
ZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aWR0aCwgKm9m
ZnNldCwgKmNvbG9yIH19OwogfQogCi1jbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERyYXdGb2N1c1JpbmdSZWN0cz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RHJhd0ZvY3VzUmluZ1JlY3RzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJh
d0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKIAogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
IHJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0czsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3Rm9jdXNSaW5nUmVjdHM+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAg
ICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9yZWN0czsKICAgICBmbG9hdCBtX3dpZHRoOwogICAgIGZs
b2F0IG1fb2Zmc2V0OwpAQCAtMjM0MSw3ICsxODg2LDcgQEAgdm9pZCBEcmF3Rm9jdXNSaW5nUmVj
dHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdS
ZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUmVj
dHM+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
T3B0aW9uYWw8VmVjdG9yPEZsb2F0UmVjdD4+IHJlY3RzOwogICAgIGRlY29kZXIgPj4gcmVjdHM7
CkBAIC0yMzYzLDcxICsxOTA4LDU1IEBAIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+
PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICgh
Y29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0Zv
Y3VzUmluZ1JlY3RzOjpjcmVhdGUoKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvcik7Cisg
ICAgcmV0dXJuIHt7ICpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNs
YXNzIEZpbGxSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAg
RmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0KCk7CisgICAgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIEZpbGxSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxGaWxsUmVjdD4+IEZpbGxSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0Owot
ICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVy
biBGaWxsUmVjdDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5o
ZXJpdCBmcm9tIEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9yZWN0KHJlY3Qp
CisgICAgICAgICwgbV9jb2xvcihjb2xvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoQ29sb3IoKTsKLQogICAgIEZsb2F0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7
CiB9OwpAQCAtMjQ0MCw3ICsxOTY5LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gRmlsbFJlY3RX
aXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDUyLDI5ICsxOTgxLDI4IEBA
IE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUoKnJlY3Qs
ICpjb2xvcik7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIEZp
bGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0
V2l0aEdyYWRpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhHcmFkaWVudChy
ZWN0LCBncmFkaWVudCkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5G
aWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aEdy
YWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CiAKLSAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gZGVjb2RlKERlY29k
ZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIG11dGFibGUgUmVm
PEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0aGlzIG5vdCBtdXRhYmxlCiB9
OwpAQCAtMjQ4Nyw3ICsyMDE1LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4g
RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDk4LDMy
ICsyMDI2LDM3IEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0
V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgaWYgKCFncmFkaWVudCkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhH
cmFkaWVudDo6Y3JlYXRlKCpyZWN0LCBncmFkaWVudC0+Z2V0KCkpOworICAgIHJldHVybiB7eyAq
cmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3Qg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQorICAgICAgICAsIG1fb3Aob3ApCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRN
b2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbENvbXBvc2l0ZWRS
ZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxDb21wb3NpdGVkUmVjdD4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbXBvc2l0ZU9wZXJh
dG9yIG1fb3A7CkBAIC0yNTQwLDcgKzIwNzMsNyBAQCB2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4g
RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjU2MiwzMSAr
MjA5NSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0
ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUpOworICAgIHJldHVybiB7
eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSb3Vu
ZGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUm91bmRlZFJlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJvdW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbFJvdW5kZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1fcmVjdChy
ZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxl
bmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRS
ZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKTsKLQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29s
b3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gZGVjb2Rl
KERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CiAKK3ByaXZhdGU6CiAgICAgRmxv
YXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKICAgICBCbGVuZE1vZGUg
bV9ibGVuZE1vZGU7CkBAIC0yNjAxLDcgKzIxMzgsNyBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5k
ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJv
dW5kZWRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI2MTgsMzEgKzIxNTUs
MzUgQEAgT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVjdD4+IEZpbGxSb3VuZGVkUmVjdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFibGVuZE1vZGUpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUoKnJl
Y3QsICpjb2xvciwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpi
bGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAs
IG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNv
bG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7Ci0KICAgICBj
b25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jv
dW5kZWRIb2xlUmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1f
cmVjdDsKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OwogICAgIENvbG9y
IG1fY29sb3I7CkBAIC0yNjU3LDcgKzIxOTgsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29k
ZXIgPj4gcmVjdDsKQEAgLTI2NzQsNzQgKzIyMTUsNjMgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVy
JgogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xl
UmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpyb3VuZGVkSG9sZVJlY3QsICpj
b2xvciB9fTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxs
SW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsSW5saW5lUGF0aCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElu
bGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhE
YXRhJiBwYXRoRGF0YSkKKyAgICAgICAgOiBtX3BhdGhEYXRhKHBhdGhEYXRhKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbElubGluZVBhdGgocGF0aERhdGEpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsSW5saW5lUGF0aCgpOwotCiAg
ICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbElu
bGluZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGluZVBh
dGgoY29uc3QgSW5saW5lUGF0aERhdGEmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXRoKCku
ZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBh
dGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBJbmxpbmVQYXRoRGF0
YSBtX3BhdGhEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbElu
bGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsSW5saW5lUGF0aD4+IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0YT4gcGF0aERhdGE7Ci0gICAgZGVjb2Rl
ciA+PiBwYXRoRGF0YTsKLSAgICBpZiAoIXBhdGhEYXRhKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0
aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFz
cyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUGF0aCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUGF0
aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFBh
dGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFBhdGgoKTsKKyAgICBGaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CiAKICAg
ICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PEZpbGxQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIEZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGlu
Z1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGgg
bV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTI3NTEsOTAgKzIyODEs
NjUgQEAgdm9pZCBGaWxsUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFBhdGg+PiBGaWxsUGF0
aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUGF0aD4gRmlsbFBhdGg6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAg
ICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1
cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCk7Ci0KICAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxFbGxpcHNlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IEZpbGxFbGxpcHNl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxsRWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsK
LX0KLQotY2xhc3MgUHV0SW1hZ2VEYXRhIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFB1
dEltYWdlRGF0YSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQdXRJbWFnZURhdGE+IGNyZWF0
ZShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGlt
YWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPFB1
dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJl
ZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRGb3Jt
YXQsIFdURk1vdmUoaW1hZ2VEYXRhKSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7
Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6UHV0SW1hZ2VEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QdXRJbWFnZURhdGEoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAog
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBt
X2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlRGF0YTsgfQorICAgIEltYWdlRGF0YSYgaW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1
cm4gKm1faW1hZ2VEYXRhOyB9CiAgICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9zcmNSZWN0OyB9CiAgICAgSW50UG9pbnQgZGVzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0UG9pbnQ7IH0KICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RGb3JtYXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsK
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6
ZSgpIH19OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdChtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNpemUo
KSk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1dElt
YWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3Jj
UmVjdDsKICAgICBJbnRQb2ludCBtX2Rlc3RQb2ludDsKLSAgICBSZWY8SW1hZ2VEYXRhPiBtX2lt
YWdlRGF0YTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBtX2Rlc3RGb3JtYXQ7CiB9OwpAQCAtMjg0MywxNCArMjM0OCwxNCBAQCB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgogdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIGVuY29kZXIgPDwgbV9pbnB1dEZvcm1hdDsKLSAgICBlbmNvZGVyIDw8IG1f
aW1hZ2VEYXRhOworICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOwogICAgIGVu
Y29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwgbV9kZXN0UG9pbnQ7CiAgICAgZW5j
b2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBpbnB1
dEZvcm1hdDsKICAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VEYXRhOwpAQCAtMjg3
OCwxNjkgKzIzODMsMTA5IEBAIE9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURh
dGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGVzdEZvcm1hdCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBQdXRJbWFnZURhdGE6OmNyZWF0
ZSgqaW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50
LCAqZGVzdEZvcm1hdCk7CisgICAgcmV0dXJuIHt7ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1h
Z2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCi1jbGFz
cyBQYWludEZyYW1lRm9yTWVkaWEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUGFpbnRG
cmFtZUZvck1lZGlhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBhaW50RnJhbWVGb3JNZWRp
YT4gY3JlYXRlKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGFpbnRGcmFtZUZvck1lZGlhKCk7CisgICAgUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UGFpbnRG
cmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKLQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotICAgIFBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiB7IG1fZGVzdGluYXRpb24gfTsgfQogCitwcml2YXRlOgogICAgIE1lZGlhUGxheWVy
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9pZGVudGlm
aWVyOwotICAgIGVuY29kZXIgPDwgbV9kZXN0aW5hdGlvbjsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBQYWludEZyYW1lRm9y
TWVkaWE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPE1lZGlhUGxh
eWVySWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7Ci0g
ICAgaWYgKCFpZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsKLSAgICBkZWNvZGVyID4+IGRlc3RpbmF0
aW9uOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoKmlkZW50aWZpZXIsICpk
ZXN0aW5hdGlvbik7Ci19Ci0KLWNsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgU3Ryb2tlUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VSZWN0
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VSZWN0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCisgICAgICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VSZWN0KCk7Ci0KICAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGxpbmVXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1fbGluZVdpZHRoOwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVX
aWR0aDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VS
ZWN0Pj4gU3Ryb2tlUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3Qp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9hdD4gbGlu
ZVdpZHRoOwotICAgIGRlY29kZXIgPj4gbGluZVdpZHRoOwotICAgIGlmICghbGluZVdpZHRoKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZVJlY3Q6OmNy
ZWF0ZSgqcmVjdCwgKmxpbmVXaWR0aCk7Ci19Ci0KICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKIAotY2xhc3MgU3Ryb2tlSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBTdHJva2VJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUlubGlu
ZVBhdGg+IGNyZWF0ZShjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRo
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUlu
bGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1fcGF0
aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJv
a2VJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+U3Ryb2tlSW5saW5lUGF0aCgpOwotCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1
cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVy
Jik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlSW5saW5lUGF0aChjb25z
dCBJbmxpbmVQYXRoRGF0YSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgog
ICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcGF0aERhdGE7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IFN0cm9rZUlubGluZVBhdGg6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRh
PiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0aERhdGEp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlSW5saW5l
UGF0aDo6Y3JlYXRlKFdURk1vdmUoKnBhdGhEYXRhKSk7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tlUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBTdHJva2VQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBh
dGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUGF0aChQYXRoJiYgcGF0aCkKKyAgICAg
ICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflN0cm9rZVBhdGgoKTsKKyAgICBTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisg
ICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTdHJva2VQYXRoPiBk
ZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0
aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KQEAgLTMwNTAsNzIxICsyNDk1LDExNSBAQCB2b2lkIFN0cm9rZVBhdGg6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBTdHJva2VQYXRoOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPFN0cm9rZVBhdGg+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBw
YXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBTdHJva2VQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3Zl
KCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBTdHJva2VFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9r
ZUVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgflN0cm9rZUVsbGlwc2UoKTsKKyAgICBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUVsbGlwc2U6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBTdHJv
a2VFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VFbGxpcHNlOjpjcmVh
dGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgQ2xlYXJSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3Jl
YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2xlYXJSZWN0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5DbGVhclJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
CiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclJlY3Q6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IENsZWFy
UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xlYXJSZWN0OjpjcmVhdGUoKnJlY3Qp
OwotfQotCiAjaWYgVVNFKENHKQotY2xhc3MgQXBwbHlTdHJva2VQYXR0ZXJuIDogcHVibGljIEl0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHJva2VQYXR0ZXJu
KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseVN0cm9rZVBhdHRl
cm4oKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PEFwcGx5U3Ryb2tlUGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7CitjbGFzcyBBcHBseVN0cm9r
ZVBhdHRlcm4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlT
dHJva2VQYXR0ZXJuKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
QXBwbHlTdHJva2VQYXR0ZXJuPj4gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYp
Ci17Ci0gICAgcmV0dXJuIEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNz
IEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseUZpbGxQYXR0ZXJu
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAg
ICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseUZpbGxQYXR0ZXJuKCk7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseUZp
bGxQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxBcHBseUZpbGxQ
YXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5RmlsbFBhdHRl
cm4oKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlGaWxsUGF0dGVybjo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYp
Ci17Ci0gICAgcmV0dXJuIEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpOwotfQogI2VuZGlmCiAK
LWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBs
eURldmljZVNjYWxlRmFjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogbV9zY2FsZUZhY3Rv
cihzY2FsZUZhY3RvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFjdG9yKCk7Ci0KICAgICBmbG9hdCBzY2Fs
ZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7Citwcml2YXRlOgorICAgIGZs
b2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fc2NhbGVGYWN0b3I7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PGZsb2F0PiBzY2FsZUZhY3RvcjsKLSAgICBkZWNvZGVyID4+IHNjYWxlRmFjdG9yOwotICAgIGlm
ICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKCpzY2FsZUZhY3Rvcik7Ci19Ci0KLQot
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0m
KTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3R5cGU7Ci0KLSAgICBzd2l0Y2gg
KG1fdHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8U2F2ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpSZXN0b3JlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFJlc3RvcmU+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Um90
YXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNjYWxlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxTZXRDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxHcmFk
aWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENv
bG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9r
ZUNvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
cm9rZVRoaWNrbmVzczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlj
a25lc3M+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Rh
dGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNl
dExpbmVEYXNoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVKb2luPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxDbGVhclNoYWRvdz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXA+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8Q2xpcE91dFRvUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwUGF0aD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlw
aHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RHJhd0ltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PERyYXdUaWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERy
YXdUaWxlZFNjYWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
SW1hZ2VCdWZmZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJ
bWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxEcmF3UmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
TGluZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
RmlsbFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Q29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxDb21wb3Np
dGVkUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Um91bmRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
I2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbEVsbGlw
c2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VE
YXRhOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxp
bmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQ
YXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxDbGVhclJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVT
RShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEl0ZW1UeXBlPiBpdGVtVHlwZTsKLSAgICBkZWNvZGVyID4+IGl0ZW1UeXBlOwotICAg
IGlmICghaXRlbVR5cGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBzd2l0
Y2ggKCppdGVtVHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTYXZlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFJl
c3RvcmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBUcmFuc2xhdGU6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBSb3RhdGU6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNjYWxlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gU2V0Q1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogewotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxD
b2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFNldFN0YXRlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFNldExpbmVDYXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IFNldExpbmVEYXNoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTZXRMaW5lSm9pbjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBDbGVhclNoYWRvdzo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlw
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcE91dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBPdXQ6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
T3V0VG9QYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dFRvUGF0aDo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcFBhdGg6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0dseXBoczo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdJbWFnZTo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkSW1hZ2U6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdUaWxl
ZFNjYWxlZEltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRHJhd1JlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERy
YXdMaW5lOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERy
YXdMaW5lc0ZvclRleHQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0VsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3Q6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aENvbG9yOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVj
dFdpdGhHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBGaWxsRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFB1dEltYWdlRGF0YTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFN0cm9rZUVsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDbGVhclJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5j
eUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBVU0UoQ0cpCi0gICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseURldmljZVNjYWxlRmFjdG9y
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYsIEl0ZW1IYW5kbGUpOwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1l
KSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RS
QVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCi0KLSNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVUeXBlTmFtZSkgXAotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5
cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ29uY2F0ZW5hdGVDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU2V0SW5saW5lRmlsbEdyYWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNldElubGluZUZpbGxDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVTdHJva2VDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdHJva2VUaGlja25lc3MpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3RhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUNhcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRMaW5lRGFzaCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRMaW5lSm9pbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRNaXRlckxpbWl0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsaXApCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q2xpcE91dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0
VG9QYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBQYXRo
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBUb0RyYXdpbmdD
b21tYW5kcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5
cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJ
bWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3SW1hZ2VC
dWZmZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2
ZUltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXR0
ZXJuKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdSZWN0KQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lc0ZvclRleHQpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RWxsaXBz
ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0aCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUGF0aCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUmVj
dHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3QpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoQ29sb3Ip
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoR3Jh
ZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbENvbXBv
c2l0ZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxS
b3VuZGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSkKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsSW5saW5lUGF0aCkKLSNlbmRp
ZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxQYXRoKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxFbGxpcHNlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFB1dEltYWdlRGF0YSkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQYWludEZyYW1lRm9yTWVkaWEpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLSNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTdHJva2VJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVyKQotI2lmIFVTRShDRykKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseVN0cm9rZVBhdHRlcm4pCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlGaWxsUGF0dGVybikKLSNl
bmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xl
YXJTaGFkb3cpCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDhkMWI2NDdiZGQ5ZjE2OWVmZWZiNTQyNTQ0MTc0
NjIxZjA2Y2I2ZTUuLmJmOTY2MzdlOGM1NzcyMDEzMDQ4Yjk4YzY3NGRkNjYzYzU2YTRmOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU1LDcgKzU1LDcg
QEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1Jl
Y3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOworICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlu
cHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CiB9
CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkBAIC04NiwzMSArODYsMzEgQEAgc3RhdGljIGJv
b2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBjaGEKIHZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCiB7CiAgICAgaWYgKCFjb250YWluc09u
bHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIG1f
ZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRTdGF0ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwg
Y2hhbmdlRmxhZ3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0YXRlPihjaGFuZ2VzLm1fc3RhdGUs
IGNoYW5nZUZsYWdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQot
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNy
ZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAgICBh
cHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5h
c0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5h
cHBlbmRJdGVtKFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJv
a2VUaGlja25lc3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oY2hhbmdl
cy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlz
cGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1f
c3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZp
bGxDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKTsKIAogICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50
Q2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxH
cmFkaWVudDo6Y3JlYXRlKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KSk7CisgICAgICAg
IGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRp
ZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRl
bSkKK3ZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlIHR5cGUpCiB7
CiAgICAgaWYgKG1fZGVsZWdhdGUpCi0gICAgICAgIG1fZGVsZWdhdGUtPndpbGxBcHBlbmRJdGVt
KGl0ZW0pOworICAgICAgICBtX2RlbGVnYXRlLT53aWxsQXBwZW5kSXRlbU9mVHlwZSh0eXBlKTsK
IAotICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKQorICAgIGlmIChpc0RyYXdpbmdJdGVtKHR5
cGUpCiAjaWYgVVNFKENHKQotICAgICAgICB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBw
bHlTdHJva2VQYXR0ZXJuIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBh
dHRlcm4KKyAgICAgICAgfHwgdHlwZSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuIHx8
IHR5cGUgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgogI2VuZGlmCiAgICAgKSB7CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBjdXJyZW50
U3RhdGUoKS5zdGF0ZUNoYW5nZTsKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgUmVjb3JkZXI6
OndpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgfQogfQogCi12b2lkIFJlY29y
ZGVyOjpkaWRBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCit2b2lkIFJlY29yZGVyOjpkaWRB
cHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlIHR5cGUpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGUpCi0g
ICAgICAgIG1fZGVsZWdhdGUtPmRpZEFwcGVuZEl0ZW0oaXRlbSk7CisgICAgICAgIG1fZGVsZWdh
dGUtPmRpZEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCkBAIC0xMzgsNDkgKzEzOCw0OSBAQCB2b2lk
IFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCiB7Ci0g
ICAgYXBwZW5kSXRlbShDbGVhclNoYWRvdzo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxDbGVhclNo
YWRvdz4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXAp
CiB7Ci0gICAgYXBwZW5kSXRlbShTZXRMaW5lQ2FwOjpjcmVhdGUobGluZUNhcCkpOworICAgIGFw
cGVuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAg
YXBwZW5kSXRlbShTZXRMaW5lRGFzaDo6Y3JlYXRlKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwor
ICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCiB7Ci0gICAgYXBwZW5k
SXRlbShTZXRMaW5lSm9pbjo6Y3JlYXRlKGxpbmVKb2luKSk7CisgICAgYXBwZW5kPFNldExpbmVK
b2luPihsaW5lSm9pbik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQg
bWl0ZXJMaW1pdCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRl
ckxpbWl0KSk7CisgICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGltaXQpOwogfQogCiB2
b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0dseXBoczo6Y3JlYXRlKGZv
bnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSks
IG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSkpOworICAgIGFwcGVuZDxEcmF3
R2x5cGhzPihmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCiBJ
bWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNv
dXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlPihpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29y
ZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChE
cmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1RpbGVk
SW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1h
Z2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29y
ZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhS
dWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERy
YXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAg
IGFwcGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCkBAIC0xODksMjMgKzE4
OSwyMyBAQCBib29sIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwogICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAh
bV9kZWxlZ2F0ZS0+bG9ja1JlbW90ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2VC
dWZmZXI6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVy
PihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBh
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKGltYWdlLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdO
YXRpdmVJbWFnZT4oaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3UGF0dGVybjo6Y3JlYXRl
KGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRl
KCkpOworICAgIGFwcGVuZDxTYXZlPigpOwogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0
ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7CiB9CiAKQEAgLTIyMCwzNyArMjIwLDM3IEBA
IHZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIC8vIEhhdmUgdG8gYXZvaWQgZWxpZGluZyBu
ZXN0ZWQgU2F2ZS9SZXN0b3JlIHdoZW4gYSBkZXNjZW5kYW50IHN0YXRlIGNvbnRhaW5zIGRyYXdp
bmcgaXRlbXMuCiAgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmcgfD0gc3RhdGVV
c2VkRm9yRHJhd2luZzsKIAotICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAg
IGFwcGVuZDxSZXN0b3JlPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
YXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7CisgICAgYXBwZW5kPFRyYW5zbGF0
ZT4oeCwgeSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykKIHsKICAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIGFw
cGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKKyAgICBhcHBlbmQ8Um90
YXRlPihhbmdsZUluUmFkaWFucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsKLSAgICBh
cHBlbmRJdGVtKFNjYWxlOjpjcmVhdGUoc2l6ZSkpOworICAgIGFwcGVuZDxTY2FsZT4oc2l6ZSk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBhcHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBw
ZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRl
KCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgYXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFu
c2Zvcm0pKTsKKyAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFu
c2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkKQEAgLTI2MSwxNTggKzI2MSwxNTggQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7
CisgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lk
IFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRU
cmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lM
YXllcj4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVu
ZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBv
aW50MSwgcG9pbnQyKSk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChE
cmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCks
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8
RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBh
cHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1Bh
dGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNS
aW5nUmVjdHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBl
bmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8RmlsbFJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsK
KyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVu
dDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7
CisgICAgYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1v
ZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUo
cmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJl
Y3QsIGNvbG9yLCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7Cisg
ICAgICAgIGFwcGVuZDxGaWxsSW5saW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChG
aWxsUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsK
KyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0
aCkpOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGgu
aW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlu
bGluZURhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5k
PFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0
cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVj
dCkpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9p
ZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5
U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+
KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVu
ZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQ
YXR0ZXJuPigpOwogfQogI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJl
Y3QpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xp
cD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBl
bmQ8Q2xpcE91dD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7
CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7
Ci0gICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAg
YXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6
OmNsaXBCb3VuZHMoKQpAQCAtNDMwLDE5ICs0MzAsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2Ug
Y28KIHsKICAgICBhdXRvIHJlY29yZGluZ0NvbnRleHQgPSBtYWtlVW5pcXVlPERyYXdpbmdDb250
ZXh0PihkZXN0aW5hdGlvbi5zaXplKCkpOwogICAgIGRyYXdpbmdGdW5jdGlvbihyZWNvcmRpbmdD
b250ZXh0LT5jb250ZXh0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
OjpjcmVhdGUoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRha2VE
aXNwbGF5TGlzdCgpKSk7CisgICAgYXBwZW5kPENsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGlu
YXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRha2VEaXNwbGF5TGlzdCgpKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgYXBwZW5kSXRlbShQYWlu
dEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7CisgICAgYXBwZW5k
PFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7
CiAgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZh
bGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCiAgICAgLy8gQXNzZXJ0IHRoYXQgaXQn
cyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICBhcHBlbmRJdGVtKEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGFwcGVuZDxBcHBseURldmlj
ZVNjYWxlRmFjdG9yPihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKIEZsb2F0UmVjdCBSZWNvcmRl
cjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtNDUxLDI5ICs0NTEsNiBAQCBGbG9hdFJlY3QgUmVjb3Jk
ZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0Nv
bnRleHQ6OgogICAgIHJldHVybiByZWN0OwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJiBpdGVtKQotewotICAgIERyYXdpbmdJ
dGVtJiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICBhcHBlbmRJdGVtKFdURk1vdmUoaXRlbSkp
OwotICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFw
cGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKLXsKLSAgICBJdGVtJiBuZXdJdGVtID0gaXRlbS5n
ZXQoKTsKLSAgICB3aWxsQXBwZW5kSXRlbShpdGVtLmdldCgpKTsKLSAgICBtX2Rpc3BsYXlMaXN0
LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICBkaWRBcHBlbmRJdGVtKG5ld0l0ZW0pOwotfQot
Ci12b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25z
dAotewotICAgIGlmIChPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRz
KGdyYXBoaWNzQ29udGV4dCgpKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxv
Y2FsQm91bmRzKHJlY3QudmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKE9wdGlvbmFsPEZsb2F0UmVj
dD4gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50KHJl
Y3QudmFsdWUoKSk7Ci19Ci0KIC8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0RhdGEKIHN0YXRp
YyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIHsK
QEAgLTQ5Myw3ICs0NzAsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJv
dW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgZmxvYXQgc2hhZG93UmFkaXVz
OwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIGlmIChncmFwaGljc0NvbnRleHQoKS5nZXRT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAg
ICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAgICAgIEZsb2F0UmVjdCBzaGFk
b3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNl
dCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNo
YWRvd1JhZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDViOGE0NGM1MTgwYzFmZWFlMDg1
YzAxYTg4ZDA4NTRkNjk1Zjk1YTkuLmZiYzM4NGExYzcyZGQ3Yzc0YzIxOWE0NjBhMTQ5MGY1Yzkz
OWUzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjYsNiAr
MjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJU
ZXh0RmxhZ3MuaCIKQEAgLTQ3LDggKzQ4LDYgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25z
OwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbTsKLQogY2xh
c3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwpAQCAt
NTksMTYgKzU4LDE0IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CiAKLSAgICBzaXplX3QgaXRlbUNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsgfQotCi0gICAgdm9p
ZCBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJik7CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KIAog
ICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkRlbGVn
YXRlKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBsb2NrUmVtb3RlSW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpIHsgfTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpIHsgfTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdp
bGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpIHsgfQogICAgIH07CiAKIHByaXZhdGU6CkBAIC0x
NDgsMTQgKzE0NSwzNCBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJdGVtPiYmKTsKLSAgICB2b2lkIHdp
bGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKLSAgICB2b2lkIGRpZEFwcGVuZEl0ZW0oY29uc3Qg
SXRlbSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+CisgICAgdm9p
ZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICB3aWxsQXBwZW5kSXRlbU9m
VHlwZShUOjppdGVtVHlwZSk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kPFQ+KHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIGRpZEFwcGVuZEl0ZW1PZlR5cGUoVDo6
aXRlbVR5cGUpOworCisgICAgICAgIGlmICghVDo6aXNEcmF3aW5nSXRlbSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc3BsYXlMaXN0LnRyYWNrc0RyYXdp
bmdJdGVtRXh0ZW50cygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGl0
ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIGlmIChhdXRvIHJl
Y3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAgICAgIG1f
ZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKCpy
ZWN0KSk7CisgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkp
CisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4
dGVudChXVEY6Om51bGxvcHQpOworICAgIH0KKworICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5
cGUoSXRlbVR5cGUpOworICAgIHZvaWQgZGlkQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSk7CiAK
ICAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZUNoYW5nZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIAogICAg
IEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7
Ci0gICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJikgY29uc3Q7CiAgICAgCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKICAgICBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcAppbmRleCBjZjRlNzQ2ZTgyZGZkNGI3MzNjM2JiZjdlODI0NWU1YWY5NzM1NDBmLi5k
NmJlYmJhMmU0Mjg5YzhmZDMwYzNkMzk2NWQxNWQ5MGMzMGM0NDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC01MiwxNSArNTIsMTEgQEAgc3RkOjp1bmlx
dWVfcHRyPERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGJvb2wKICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKICAgICAg
ICAgcmVwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAKLSAgICBzaXplX3Qg
bnVtSXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5
TGlzdC5saXN0KClbaV0uZ2V0KCk7Ci0KLSAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8o
KSAmJiBpczxEcmF3aW5nSXRlbT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGNvbnN0IERyYXdpbmdJ
dGVtJiBkcmF3aW5nSXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihpdGVtKTsKLSAgICAgICAg
ICAgIGlmIChkcmF3aW5nSXRlbS5leHRlbnRLbm93bigpICYmICFkcmF3aW5nSXRlbS5leHRlbnQo
KS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAgIG1fZGlzcGxheUxpc3QubWFwKFsmXSAo
SXRlbUhhbmRsZSBpdGVtLCBPcHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50KSB7CisgICAgICAg
IGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXRlbS5pc0RyYXdpbmdJdGVtKCkpIHsKKyAg
ICAgICAgICAgIGlmIChleHRlbnQgJiYgIWV4dGVudC0+aW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkp
IHsKICAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgInNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKQEAgLTY4LDEwICs2NCwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxh
eWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgICAgICBp
ZiAoIW1fZGVsZWdhdGUgfHwgIW1fZGVsZWdhdGUtPmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAg
ICAgICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4dCk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHRyYWNrUmVwbGF5TGlzdCkpCi0gICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmRJdGVtKGNv
bnN0X2Nhc3Q8SXRlbSY+KGl0ZW0pKTsKLSAgICB9Ci0gICAgCisgICAgICAgIGlmIChVTkxJS0VM
WSh0cmFja1JlcGxheUxpc3QpKSB7CisgICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmQoaXRl
bSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICAg
ICAgcmVwbGF5TGlzdC0+YWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGTW92ZShleHRlbnQpKTsKKyAg
ICAgICAgfQorICAgIH0pOworCiAgICAgcmV0dXJuIHJlcGxheUxpc3Q7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmluZGV4IDQwY2QwZmYwZDQxNjgwY2ZjNzNlNTA0
ZGVjZmMzZGVmODc3NTMyMzMuLjA0NWNhY2NlOGEwMWM4ZDVkY2I2NThjNDBkNjNlOWEzNTg5YjVi
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtNTAsNyArNTAs
NyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZWdhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCB+RGVsZWdhdGUoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW0m
LCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB9OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXggY2VkMWNhOTBmY2I4ZTJhODdm
ZTQzNGJiYjk3N2FlYTUwNmU5YzY1Yi4uNGExMjM3OWIxNzU3YmJiZDJmY2M3YzY4OGEyNTYyMDc2
ZjY4NWQ1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTI3LDE0ICsyNywxNyBAQAogCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlw
ZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxh
eWVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3Jl
OjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUsIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgewogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVm
ZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNp
bmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNy
ZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKQEAgLTY0LDE2ICs2NywxNiBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
aWYgKGRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKSB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3Qu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIg
cmVwbGF5ZXIoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3Qs
IHRoaXMpOwogICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCisgICAgYm9vbCBhcHBseShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkg
PT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpIHsKLSAgICAg
ICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1
dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhPigpOwogICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRG
b3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5z
cmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0u
ZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC04
NCw2ICs4NywxODcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5hcHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICBib29s
IHJlcXVpcmVzRGVjb2RpbmcoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gIVdlYkNvcmU6OkRpc3BsYXlMaXN0
Ojppc0lubGluZUl0ZW0odHlwZSk7CisgICAgfQorCisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSYgaGFuZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChoYW5kbGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgICAgICBpZiAoYXV0byBp
dGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBPdXRUb1BhdGg+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRs
ZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoKFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6
OmRlY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0
aCkpIHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRsZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aChX
VEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogewor
ICAgICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEsIGxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRsZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHMoV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDogeworICAgICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oZGF0YSwgbGVuZ3Ro
KSkgeworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdQYXRoKFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OiB7CisgICAgICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVPYmpl
Y3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oZGF0YSwgbGVuZ3Ro
KSkgeworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdSZWN0cyhXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAg
ICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0YSwgbGVuZ3RoKSkgeworICAgICAgICAg
ICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHMoV1RGTW92ZSgqaXRlbSkp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0lt
YWdlPihkYXRhLCBsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgbmV3IChoYW5kbGUuZGF0YSAr
IHNpemVvZihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpKSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ltYWdlKFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdl
QnVmZmVyOiB7CisgICAgICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNv
ZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oZGF0YSwgbGVu
Z3RoKSkgeworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoKSkg
eworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRl
eHQoV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAg
ICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgpKSB7CisgICAg
ICAgICAgICAgICAgbmV3IChoYW5kbGUuZGF0YSArIHNpemVvZihXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGUpKSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlKFdURk1v
dmUoKml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRs
ZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdQYXR0ZXJuOiB7CisgICAgICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpk
ZWNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPihkYXRhLCBsZW5n
dGgpKSB7CisgICAgICAgICAgICAgICAgbmV3IChoYW5kbGUuZGF0YSArIHNpemVvZihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpKSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm4oV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogeworICAg
ICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZT4oZGF0YSwgbGVuZ3RoKSkgeworICAgICAg
ICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlKFdURk1vdmUo
Kml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAg
ICAgICAgICAgICBuZXcgKGhhbmRsZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZShX
VEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogeworICAg
ICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgICAgICBuZXcgKGhhbmRsZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Qo
V1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwgbGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIG5ldyAo
aGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoKFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6
OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Q29sb3I+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRsZS5kYXRh
ICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgICAgICBpZiAoYXV0byBpdGVtID0gSVBD
OjpEZWNvZGVyOjpkZWNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aEdyYWRpZW50PihkYXRhLCBsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgbmV3IChoYW5kbGUu
ZGF0YSArIHNpemVvZihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUpKSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoV1RGTW92ZSgqaXRlbSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoKSkgeworICAgICAgICAgICAgICAg
IG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
KSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFdURk1vdmUo
Kml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgICAgICBp
ZiAoYXV0byBpdGVtID0gSVBDOjpEZWNvZGVyOjpkZWNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oZGF0YSwgbGVuZ3RoKSkgeworICAgICAgICAgICAgICAg
IG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
KSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdChXVEZNb3ZlKCppdGVtKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAgICAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJ
bWFnZURhdGE+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBuZXcgKGhhbmRsZS5k
YXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRJbWFnZURhdGEoV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDogeworICAgICAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6
ZGVjb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oZGF0YSwgbGVu
Z3RoKSkgeworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2YoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVE
YXNoKFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBu
ZXcgKGhhbmRsZS5kYXRhICsgc2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkp
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZShXVEZNb3ZlKCppdGVtKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRl
Y29kZXI6OmRlY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oZGF0
YSwgbGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIG5ldyAoaGFuZGxlLmRhdGEgKyBzaXplb2Yo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZVBhdGgoV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IGQ1YmIw
ZjJkMDNlNmYzNWE5OGU0MTljNDE1ZDA1NmIyOTRiZTU3YmEuLjQ2NWI2ZjU5MDM4OWMwZjAyODFl
NDVhZDQ2NDE2MmVjYTAwNWYzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTcyLDEw
ICs3MiwxMCBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIudG9VSW50NjQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBs
eVJlc291cmNlSXRlbShjb25zdCBEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQorYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseVJlc291cmNl
SXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgaWYgKGl0ZW0udHlwZSgpID09IERpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d0ltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGF1dG8mIGRyYXdJdGVtID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciY+KGl0ZW0pOworICAgIGlmIChpdGVtLmlz
PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpIHsKKyAgICAgICAgYXV0byYgZHJhd0l0
ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPigpOwogICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KGRyYXdJdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKICAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg3LDEzICs4NywxMiBA
QCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IERp
c3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShjb25zdCBEaXNwbGF5TGlzdDo6
SXRlbSYgaXRlbSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorYm9vbCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGl0ZW0udHlwZSgpICE9IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhKQorICAgIGlmICgh
aXRlbS5pczxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBtZWRpYUl0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNw
bGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJj4oaXRlbSk7Ci0KKyAgICBhdXRvJiBtZWRpYUl0
ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpOwogICAgIGF1
dG8gcHJvY2VzcyA9IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKICAgICBpZiAoIXByb2Nl
c3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MCwxOSArMTM5LDQ5IEBAIHZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgUmVuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjphcHBseURpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBo
YW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dCBmbHVzaENvbnRleHQpCiB7Ci0gICAgaWYgKGF1dG8g
aW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlz
cGxheUxpc3QoZGlzcGxheUxpc3QpOworICAgIFZlY3RvcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXI+IGJ1ZmZlcklkZW50aWZpZXJzOworICAgIGF1dG8gZGlzcGxh
eUxpc3QgPSBoYW5kbGUuY3JlYXRlRGlzcGxheUxpc3QoWyZdIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4gdWludDhfdCogeworICAgICAg
ICBidWZmZXJJZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7CisgICAgICAgIGlmIChhdXRv
IHNoYXJlZE1lbW9yeSA9IHNoYXJlZEl0ZW1CdWZmZXIoaWRlbnRpZmllcikpCisgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKKworICAgIGlmICghZGlzcGxheUxp
c3QpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRl
IHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKSB7CisgICAgICAg
IC8vIEZJWE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRlcm1pbmF0ZSB0aGUgd2ViIHByb2Nl
c3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW1hZ2VCdWZmZXItPmlzQWNj
ZWxlcmF0ZWQoKSkKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQoZG93
bmNhc3Q8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIpKTsKKyAgICBl
bHNlCisgICAgICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVyQ2xpZW50KGRvd25jYXN0PFVu
YWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIpKTsKKworICAgIGltYWdl
QnVmZmVyLT5mbHVzaERpc3BsYXlMaXN0KCpkaXNwbGF5TGlzdCk7CisKKyAgICBpZiAoZmx1c2hD
b250ZXh0ID09IFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKQorICAgICAgICBpbWFnZUJ1ZmZlci0+
Zmx1c2hDb250ZXh0KCk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OlJlbGVhc2VTaGFyZWRJdGVtQnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcklkZW50aWZp
ZXJzKSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5
TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3QoY29uc3QgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaERpc3BsYXlMaXN0KGRp
c3BsYXlMaXN0KTsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoQ29udGV4dCgpOwotICAgICAg
ICBmbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9CisgICAgYXBwbHlEaXNwbGF5TGlzdChoYW5kbGUs
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0OjpObyk7Cit9
CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1p
dChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBEaXNwbGF5TGlzdEZsdXNo
SWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXBwbHlEaXNwbGF5TGlzdChoYW5k
bGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMp
OworICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVudGlmaWVyLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQ
Qzo6SW1hZ2VEYXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTY4LDYg
KzE5NywxNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNv
dXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcgogICAgIG1fcmVtb3RlUmVzb3VyY2VD
YWNoZS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
IH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0
YShEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU2hh
cmVkTWVtb3J5OjpJUENIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoYXV0byBzaGFyZWRNZW1v
cnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5zZXQoaWRlbnRp
ZmllciwgV1RGTW92ZShzaGFyZWRNZW1vcnkpKTsKK30KKworUmVmUHRyPFNoYXJlZE1lbW9yeT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkSXRlbUJ1ZmZlcihEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaGFy
ZWRJdGVtQnVmZmVycy5nZXQoaWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5k
ZXggMjg1ZTJmNzRiNGQ0ZmQ2ZTZhOGM1ZTkxMDI1YTFjOTI2ZjVmZmIxNS4uZmRhYTY4NjM1YTIx
N2E0ZjJlMzI5NGUwMWFhM2RmYjRmMTViNzRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0z
NSw3ICszNSw5IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90
ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CiAKQEAgLTYzLDggKzY1LDggQEAgcHVibGljOgogICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MqIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSBjb25zdDsKIAogICAgIC8vIFJlbmRlcmlu
ZyBvcGVyYXRpb25zLgotICAgIGJvb2wgYXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29s
IGFwcGx5TWVkaWFJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseVJlc291cmNlSXRlbShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7Cisg
ICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50
LgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkBA
IC03Myw2ICs3NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKIAorICAgIGVudW0gY2xhc3MgU2hvdWxkRmx1c2hDb250ZXh0IDogYm9vbCB7IE5vLCBZ
ZXMgfTsKKyAgICB2b2lkIGFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNo
Q29udGV4dCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkSXRlbUJ1ZmZlcihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIpIGNvbnN0OworCiAgICAgLy8g
SVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtODMsMTQgKzg5LDE2IEBAIHByaXZhdGU6
CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIGZsdXNoRGlz
cGxheUxpc3QoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2b2lkIGZsdXNoRGlzcGxheUxp
c3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgRGlz
cGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CisgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lk
IGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUm
LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKTsKICAgICB2b2lkIGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBD
OjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYpOwogICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291
cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRD
cmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik7CiAKICAgICBSZW1vdGVSZXNv
dXJjZUNhY2hlIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsKICAgICBXZWFrUHRyPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKICAgICBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworICAgIEhh
c2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8
U2hhcmVkTWVtb3J5Pj4gbV9zaGFyZWRJdGVtQnVmZmVyczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgppbmRleCBhODhl
MGZiNjI2MjQ5MTg5ZDhmNWIzYTM5YjliNjY0Mjg2MjJjYWQzLi5iYjkxNWFiMTk1YWQzNzc3MjBi
NjkxNTBhM2JlYzBjOTkzYzVhYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgpAQCAtMjMsMTEgKzIzLDEyIEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBt
ZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJlZkNvdW50ZWQgewotICAgIHZv
aWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIHZvaWQgRmx1c2hE
aXNwbGF5TGlzdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3Qs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZs
dXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgQ3JlYXRlSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSBjb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3QoV2ViS2l0OjpT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBGbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgZGlzcGxh
eUxpc3QsIFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQogICAgIEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikgLT4gKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlIGltYWdlRGF0YSkgU3luY2hyb25v
dXMKLSAgICB2b2lkIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIERpZENyZWF0
ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmll
ciBpZGVudGlmaWVyLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlIGhhbmRsZSkKKyAg
ICBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29k
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKaW5kZXggNWNh
MjEyN2EzNDZjZDJhNDY5Y2EyOTdmNGFiMTM5MDJmNmEwNmY4YS4uNTFiOWZmZDkzMDM0MGJkZmYy
ZmI3MWQwZTQ2Y2FjZjQwOTM0NjUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rl
ci5jcHAKQEAgLTc0LDYgKzc0LDE2IEBAIERlY29kZXI6OkRlY29kZXIoY29uc3QgdWludDhfdCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgdm9pZCAoKmJ1ZmZlckRlYWxsb2NhCiAgICAgICAg
IHJldHVybjsKIH0KIAorRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplLCBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKQorICAgIDogbV9idWZm
ZXIgeyBidWZmZXIgfQorICAgICwgbV9idWZmZXJQb3MgeyBtX2J1ZmZlciB9CisgICAgLCBtX2J1
ZmZlckVuZCB7IG1fYnVmZmVyICsgYnVmZmVyU2l6ZSB9CisgICAgLCBtX2J1ZmZlckRlYWxsb2Nh
dG9yKFtdIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KSB7IH0pCit7CisgICAgaWYgKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihtX2J1ZmZlcikgJSBhbGlnbm9mKHVpbnQ2NF90KSkKKyAgICAg
ICAgbWFya0ludmFsaWQoKTsKK30KKwogRGVjb2Rlcjo6fkRlY29kZXIoKQogewogICAgIEFTU0VS
VChtX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKaW5kZXggM2RkMjQ2
OTZlZjZjYTdkYzk3ZDAxM2EwZmU4NzVkN2JkNDdkZTMwYS4uYTAzZWJiMWIyODM3ZWY2YTM4NzNh
MTE1YzRkYmUwZmM1OGNkOTkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9J
UEMvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgogI2luY2x1ZGUgIlN0
cmluZ1JlZmVyZW5jZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVJdGVtLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNzMsNyArMTc0LDIyIEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVjb2RlciA9IHRydWU7CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgT3B0aW9uYWw8VD4gZGVjb2RlT2JqZWN0
KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCisgICAgeworICAgICAg
ICBPcHRpb25hbDxUPiByZXN1bHQ7CisgICAgICAgIERlY29kZXIgZGVjb2RlcihidWZmZXIsIGJ1
ZmZlclNpemUsIENvbnN0cnVjdFdpdGhvdXRIZWFkZXIpOworICAgICAgICBpZiAoIWRlY29kZXIu
aXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBk
ZWNvZGVyID4+IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZh
dGU6CisgICAgZW51bSBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnIHsgQ29uc3RydWN0V2l0aG91
dEhlYWRlciB9OworICAgIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVm
ZmVyU2l6ZSwgQ29uc3RydWN0V2l0aG91dEhlYWRlclRhZyk7CisKICAgICBib29sIGFsaWduQnVm
ZmVyUG9zaXRpb24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBib29sIGJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KSBjb25zdDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAppbmRleCA4N2ZlOTU1NTJhYzYwNTJk
YmNkNzZlNDkwZDRhYjZhNjYyZWM4YWQ0Li5iMDU1NjY1N2NiMDZmMjRhNDM3OWJiMzNkNWQ3Zjk3
ZTEyMGNkOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcApAQCAtNzIs
NiArNzIsMTYgQEAgRW5jb2Rlcjo6RW5jb2RlcihNZXNzYWdlTmFtZSBtZXNzYWdlTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCkKICAgICBlbmNvZGVIZWFkZXIoKTsKIH0KIAorRW5jb2Rlcjo6
RW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKQorICAgIDogbV9tZXNzYWdlTmFtZShz
dGF0aWNfY2FzdDxNZXNzYWdlTmFtZT4oMCkpCisgICAgLCBtX2Rlc3RpbmF0aW9uSUQoMCkKKyAg
ICAsIG1fYnVmZmVyKG1faW5saW5lQnVmZmVyKQorICAgICwgbV9idWZmZXJQb2ludGVyKG1faW5s
aW5lQnVmZmVyKQorICAgICwgbV9idWZmZXJTaXplKDApCisgICAgLCBtX2J1ZmZlckNhcGFjaXR5
KHNpemVvZihtX2lubGluZUJ1ZmZlcikpCit7Cit9CisKIEVuY29kZXI6On5FbmNvZGVyKCkKIHsK
ICAgICBpZiAobV9idWZmZXIgIT0gbV9pbmxpbmVCdWZmZXIpCkBAIC0yMTksNyArMjI5LDEyIEBA
IHZvaWQgRW5jb2Rlcjo6YWRkQXR0YWNobWVudChBdHRhY2htZW50JiYgYXR0YWNobWVudCkKIAog
VmVjdG9yPEF0dGFjaG1lbnQ+IEVuY29kZXI6OnJlbGVhc2VBdHRhY2htZW50cygpCiB7Ci0gICAg
cmV0dXJuIFdURk1vdmUobV9hdHRhY2htZW50cyk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2Uo
bV9hdHRhY2htZW50cywgeyB9KTsKK30KKworYm9vbCBFbmNvZGVyOjpoYXNBdHRhY2htZW50cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2F0dGFjaG1lbnRzLmlzRW1wdHkoKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKaW5kZXggMzY3
OGQ0ZmFlMjkxNTJkOTkwZjRkM2E0ZjBiN2UwYWY2Y2Y3NDcyYi4uZWZjOTZkNzQ4MjIzOTUyOTVj
YjU5OWQ2YWQ2YTk1OTQxMDlmYWE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIu
aApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VOYW1lcy5oIgogI2luY2x1ZGUg
IlN0cmluZ1JlZmVyZW5jZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVJdGVtLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9u
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC05OSw3ICsxMDAsMjQgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gdHJ1ZTsKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IGVuY29kZU9iamVjdChjb25zdCBUJiBvYmplY3QpCisgICAgeworICAgICAgICBFbmNv
ZGVyIGVuY29kZXIoQ29uc3RydWN0V2l0aG91dEhlYWRlcik7CisgICAgICAgIGVuY29kZXIgPDwg
b2JqZWN0OworCisgICAgICAgIGlmIChlbmNvZGVyLmhhc0F0dGFjaG1lbnRzKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIH0KKwogcHJp
dmF0ZToKKyAgICBlbnVtIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcgeyBDb25zdHJ1Y3RXaXRo
b3V0SGVhZGVyIH07CisgICAgRW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKTsKKwog
ICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4q
ID0gbnVsbHB0cj4KQEAgLTEwOSw2ICsxMjcsOCBAQCBwcml2YXRlOgogICAgICAgICBlbmNvZGUo
V1RGOjplbnVtVG9VbmRlcmx5aW5nVHlwZTxFPihlbnVtVmFsdWUpKTsKICAgICB9CiAKKyAgICBi
b29sIGhhc0F0dGFjaG1lbnRzKCkgY29uc3Q7CisKICAgICB2b2lkIGVuY29kZUhlYWRlcigpOwog
ICAgIGNvbnN0IE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+JiBtZXNzYWdlRmxhZ3MoKSBjb25zdDsK
ICAgICBPcHRpb25TZXQ8TWVzc2FnZUZsYWdzPiYgbWVzc2FnZUZsYWdzKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA5OTExMWE3ODkwYjU3ODVmNGUxMDYy
ZDY4ODIwNjU0N2Q1MjUwM2JkLi45ZmY5NDhlOGJlMWFhZWRkMDkzYjRiZTI5OTM0NjBlMmNkOTli
MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTIwOCw2
ICsyMDgsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnU3RyaW5nJywKICAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3BhY2UnLAogICAgICAg
ICAnV2ViQ29yZTo6RGljdGF0aW9uQ29udGV4dCcsCisgICAgICAgICdXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVyJywKQEAgLTU4NSw2ICs1
ODYsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ0pTQzo6TWVzc2Fn
ZVNvdXJjZSc6IFsnPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPiddLAogICAgICAgICAn
SW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlJzogWyc8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVGFyZ2V0Lmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29u
bmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmll
cic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg+J10sCiAgICAgICAgICdNZWRp
YVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+J10sCiAgICAgICAgICdNb25vdG9uaWNUaW1lJzog
Wyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwKICAgICAgICAgJ1NlY29uZHMnOiBbJzx3dGYvU2Vj
b25kcy5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3YTIwZDJhM2RjNmQ5M2VhZDkzZmViNmNkYzdlNDhlNGRj
ZjYwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3QgRGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBkaXNwbGF5TGlzdC5mb3JFYWNoSXRlbUJ1
ZmZlcihbJl0gKGF1dG8mIGhhbmRsZSkgeworICAgICAgICBtX2J1ZmZlcnMuYXBwZW5kKHsgaGFu
ZGxlLmlkZW50aWZpZXIsIGhhbmRsZS5jYXBhY2l0eSB9KTsKKyAgICB9KTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OmNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQcm92aWRlciYmIGJ1ZmZlclByb3ZpZGVy
KSBjb25zdAoreworICAgIERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlcyBoYW5kbGVzOwor
ICAgIGhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2J1ZmZlcnMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCBjYXBhY2l0eV0gOiBtX2J1ZmZlcnMpIHsKKyAgICAg
ICAgYXV0byogZGF0YSA9IGJ1ZmZlclByb3ZpZGVyKGlkZW50aWZpZXIpOworICAgICAgICBpZiAo
IWRhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBoYW5kbGVzLnVu
Y2hlY2tlZEFwcGVuZCh7IGlkZW50aWZpZXIsIGRhdGEsIDAsIGNhcGFjaXR5IH0pOworICAgIH0K
KyAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+KFdURk1vdmUo
aGFuZGxlcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxNzVlMTE0ZjIz
YmM4ZmI4ZTU3Y2Q5MGY2NGEzM2JlMjYyZTFmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJdGVtQnVmZmVyUHJvdmlkZXIgPSBGdW5jdGlvbjx1
aW50OF90KihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIpPjsKKwor
ICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q+IGNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQcm92aWRlciYmKSBjb25z
dDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2hhcmVk
RGlzcGxheUxpc3RIYW5kbGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUoVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+JiYgYnVmZmVycykKKyAgICAgICAgOiBt
X2J1ZmZlcnMoV1RGTW92ZShidWZmZXJzKSkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPHN0
ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVf
dD4+IG1fYnVmZmVyczsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgbV9idWZmZXJzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRp
b25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBzaXplX3Q+Pj4gYnVm
ZmVyczsKKyAgICBkZWNvZGVyID4+IGJ1ZmZlcnM7CisgICAgaWYgKCFidWZmZXJzKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7IFdURk1vdmUoKmJ1ZmZlcnMp
IH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGZmZTk3ODdk
ZWFlNTQ3NTI2NzM2ZTIxMTAwNDJiMGI5ZjhkYzA4MDEuLjhiNGM0MDczZmFjMjcxMDI2MGZhNTEy
YWM0NDhhNjZlZDA1MmJiNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTczLDYgKzE3Myw3IEBAIFNoYXJl
ZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcAogU2hhcmVkL1Nlc3Npb25TdGF0
ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIEBuby11bmlmeQogU2hhcmVkL1NoYXJl
YWJsZVJlc291cmNlLmNwcAorU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcAogU2hh
cmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFi
bGVSZWFkT25seS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0NDA2ZTli
NmU3ZTZmNGEwMzYyZTZjNTZiYjg0OWJmZWJlYzhjMGM3Li5kYWFhOTA0YTA1NmQyMjJhMTE1YTAx
MzkzYTZlMTg4MzEyZmYwYzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTE4NzQsNiArMTg3NCw3IEBACiAJCUY0NERGRUIyMUU5RTc1
MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNv
blV0aWxpdGllcy5oICovOyB9OwogCQlGNDhEMkE4NTIxNTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhE
MkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi87IH07CiAJCUY0OTZBNDMxMUY1
OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1
NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLzsgfTsKKwkJRjRBNkQ2QkMyNTRDQTNF
OTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyog
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKIAkJRjRDQjA5RTUyMjVENUEwOTAwODkx
NDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNp
dGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9OwogCQlGNEQ1RjUxRDIwNjA4N0ExMDAzOEJCQTgg
LyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTE5MjA2MDg3QTAwMDM4QkJBOCAvKiBXS1Rl
eHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oICovOyB9OwogCQlGNEQ1RjUxRjIwNjA4N0ExMDAz
OEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ1RjUxQjIwNjA4N0ExMDAzOEJCQTgg
LyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CkBAIC01NDYyLDYgKzU0
NjMsOCBAQAogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk2
QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBwYXRoID0gaW9zL0RyYWdEcm9w
SW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQz
MDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBwYXRoID0gaW9zL0Ry
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QUM2NTVFMjJBMzE0MEUwMEEwNTYw
NyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07
IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIxRERCQkFCMDA5NUEzNzggLyogV2ViVW5kb1N0
ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3RlcElELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0Q0IwOUU0MjI1RDVBMDMwMDg5MTQ4NyAvKiBXZWJzaXRlTWVkaWFTb3Vy
Y2VQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTY5LDYgKzYxNzIsOCBAQAogCQkJCTFBNjQy
MEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAqLywKIAkJCQk1MTIxNzQ1
RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwICovLAogCQkJCTUxMjE3
NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICovLAorCQkJCUY0QTZE
NkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8sCisJ
CQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgg
Ki8sCiAJCQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9y
ZS5jcHAgKi8sCiAJCQkJODMxM0Y3RTkxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hh
c2hTdG9yZS5oICovLAogCQkJCTgzMTNGN0U4MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJp
bmdIYXNoVGFibGUuY3BwICovLApAQCAtMTEzMjAsNiArMTEzMjUsNyBAQAogCQkJCTUxMjE3NDYx
MTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8qIFNoYXJlZEJ1ZmZlckNvcHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBDMTMwMTc2NyAvKiBTaGFyZWRCdWZmZXJEYXRh
UmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEg
LyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1
MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
NEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUwODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hh
c2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4
IDIyNjRlYmNiNjY2NGQ3MWZmZjBhNDAwNDJmYjI1NDJjYTgwNjZlYjQuLmE3MmY3OWE4ODU2MzQ1
MzUxY2Y3MTFhYmE2ZGNjMzA3Y2I3MDRhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVk
ZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgor
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaD4KQEAgLTM2LDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlw
ZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBw
dWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSwgcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7CiAgICAgdXNpbmcg
QmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVy
OjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fZHJh
d2luZ0NvbnRleHQ7CkBAIC03Nyw2ICs4MSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgLCBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1C
dWZmZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAgIH0KIAogICAgIGJvb2wg
aXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0g
bV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQpAQCAtMTA0LDEwICsxMTAsMTIgQEAgcHJvdGVj
dGVkOgogICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBjb25z
dF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+bV9kcmF3aW5nQ29udGV4dC5k
aXNwbGF5TGlzdCgpOwotICAgICAgICBpZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKLSAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKS5mbHVz
aERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBj
b25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7CisgICAgICAgIGF1dG8m
IGRpc3BsYXlMaXN0ID0gbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgp
OworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbXV0
YWJsZVRoaXMuZmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CiAgICAgICAgICAgICBkaXNw
bGF5TGlzdC5jbGVhcigpOworICAgICAgICAgICAgbXV0YWJsZVRoaXMubV9pdGVtQ291bnRJbkN1
cnJlbnREaXNwbGF5TGlzdCA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBnZXRJbWFnZURh
dGEgaXMgc3luY2hyb25vdXMsIHdoaWNoIG1lYW5zIHdlJ3ZlIGFscmVhZHkgcmVjZWl2ZWQgdGhl
IENvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0IG1lc3NhZ2UuCkBAIC0xNDEsMTggKzE0OSwx
OSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byYgZGlz
cGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmICgh
ZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgIGlmIChkaXNwbGF5TGlzdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2Nv
cGUoRmx1c2hSZW1vdGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJlbW90ZUltYWdlQnVmZmVyRW5k
LCAxKTsKICAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoZGlzcGxheUxpc3QsIG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnVubG9ja1JlbW90ZVJlc291cmNl
c0ZvclJlbW90ZUNsaWVudChtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgICAg
IGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNvdW50SW5DdXJyZW50RGlzcGxh
eUxpc3QgPSAwOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCAhZGlzcGxh
eUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkgfHwgZGlzcGxheUxpc3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKEZsdXNoUmVtb3RlSW1hZ2VCdWZmZXJTdGFy
dCwgRmx1c2hSZW1vdGVJbWFnZUJ1ZmZlckVuZCk7CkBAIC0xNzAsMjAgKzE3OSw5MSBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgd2lsbEFwcGVu
ZEl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mKSBvdmVycmlkZQorICAgIHZv
aWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSBv
dmVycmlkZQogICAgIHsKICAgICAgICAgY29uc3RleHByIHNpemVfdCBEaXNwbGF5TGlzdEJhdGNo
U2l6ZSA9IDUxMjsKICAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0
LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSA8IERp
c3BsYXlMaXN0QmF0Y2hTaXplKQorICAgICAgICBpZiAoKyttX2l0ZW1Db3VudEluQ3VycmVudERp
c3BsYXlMaXN0IDwgRGlzcGxheUxpc3RCYXRjaFNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgZmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CiAgICAgICAgIGRpc3BsYXlM
aXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNvdW50SW5DdXJyZW50RGlzcGxheUxpc3QgPSAw
OwogICAgIH0KIAotICAgIHZvaWQgZGlkQXBwZW5kSXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbSYgaXRlbSkgb3ZlcnJpZGUKKyAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNvbnN0IG92ZXJyaWRlCiAgICAgewot
ICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiAhV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OmlzSW5saW5lSXRlbSh0eXBlKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAg
ICAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRl
bUJ1ZmZlcihjYXBhY2l0eSk7CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4gZW5jb2RlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBPdXRUb1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBJ
UEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
cz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAg
ICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+
KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0lt
YWdlQnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd05hdGl2ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2Rl
T2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXR0ZXJuPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Bh
dHRlcm4+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldFN0YXRlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0
aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVBhdGg+KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZGlkQXBw
ZW5kSXRlbU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmICh0eXBlID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0ltYWdlQnVmZmVyKQogICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OwogICAgIH0KIApAQCAtMTkxLDYgKzI3MSw3IEBAIHByb3RlY3RlZDoKICAgICBEaXNwbGF5TGlz
dEZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOwogICAgIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciB7IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9Owog
ICAgIFdlYWtQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTsKKyAgICBzaXplX3QgbV9pdGVtQ291bnRJbkN1cnJlbnREaXNwbGF5TGlz
dCB7IDAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhMDE5MzBhYjY2YzQ0NzMwNTEwOTMwMzRkNGYz
NmQyYzBlNjQ4YTIuLmVmMjgyODMxNmE4MzE2MTcwNGNlZTUyZGJhOGExZWMwMTFiZmM0MWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTM0LDYgKzM0LDgg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKICNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
cy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTExNiwxMyArMTE4LDEzIEBAIFJlZlB0cjxJ
bWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVz
aERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qs
IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNw
bGF5TGlzdChkaXNwbGF5TGlzdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdCh7IGRpc3BsYXlMaXN0IH0sIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogfQogCiBE
aXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZs
dXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKIHsKICAgICBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJ
ZGVudGlmaWVyID0gRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0gICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdChkaXNwbGF5TGlzdCwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdEFuZENvbW1p
dCh7IGRpc3BsYXlMaXN0IH0sIHNlbnRGbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogICAgIHJldHVybiBz
ZW50Rmx1c2hJZGVudGlmaWVyOwogfQogCkBAIC0xNTUsNiArMTU3LDMxIEBAIHZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKERpc3Bs
YXlMaXN0Rmx1c2hJCiAgICAgICAgIGRvd25jYXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5PigqaW1hZ2VCdWZmZXIpLmNvbW1pdEZsdXNoRGlzcGxheUxpc3QoZmx1c2hJZGVu
dGlmaWVyKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VT
aGFyZWRJdGVtQnVmZmVycyhWZWN0b3I8RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
PiYmIGlkZW50aWZpZXJzLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQoreworICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogaWRlbnRpZmll
cnMpIHsKKyAgICAgICAgaWYgKCFtX3NoYXJlZEl0ZW1CdWZmZXJzLnJlbW92ZShpZGVudGlmaWVy
KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
CitEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7CisKKyAg
ICBhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUoc3RkOjptYXgoZGVm
YXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplLCBjYXBhY2l0eSkpOworICAgIGlmICghc2hhcmVkTWVt
b3J5KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBpZGVudGlmaWVyID0gRGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIFNoYXJlZE1lbW9y
eTo6SGFuZGxlIHNoYXJlZE1lbW9yeUhhbmRsZTsKKyAgICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhh
bmRsZShzaGFyZWRNZW1vcnlIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9u
bHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0
ZVNoYXJlZEl0ZW1EYXRhKGlkZW50aWZpZXIsIHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5kbGUp
LCBzaGFyZWRNZW1vcnktPnNpemUoKSB9KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5zZXQoaWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LmNv
cHlSZWYoKSk7CisKKyAgICByZXR1cm4geyBpZGVudGlmaWVyLCByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIDAsIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH07
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXggOTk1NjViNmYx
NjZiYjJkODA2MTQxODQ5NzJlMzQzNzA2Y2U3ZmVjOS4uMTMxZTQ5MTk2ZGQ5NWEyNzViODE1MWI4
NTZlYmE1M2M2OTdmNDcxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUg
IlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIApAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgflJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSgpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5JiByZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVybiBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eTsg
fQorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1C
dWZmZXIoc2l6ZV90KTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNv
bm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC03
Miw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSk7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwog
ICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZv
aWQgZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpOwogICAgIERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCkBAIC04NCw3ICs4Nyw5IEBAIHByaXZhdGU6
CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJh
Y2tlbmRXYXNDcmVhdGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3RX
YXNDb21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlU2hhcmVkSXRlbUJ1ZmZlcnMo
VmVjdG9yPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcj4mJiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAorICAgIEhhc2hNYXA8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8U2hhcmVkTWVtb3J5
Pj4gbV9zaGFyZWRJdGVtQnVmZmVyczsKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgbV9y
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgeyAqdGhpcyB9OwogICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KaW5kZXggOGYyNDU4NTYzNWY0NzA4M2QxZGIy
N2E1YjM5NjY2NWYzMTVlYmNiMC4uNzlhOTg2NjUwNmQxYzI1YTA5NmJhNTE0Njk2YmQ5YzhiYTky
MzEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4KQEAgLTIzLDggKzIzLDkgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1l
c3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKLSAg
ICB2b2lkIEltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoV2ViQ29yZTo6RmxvYXRTaXplIGxv
Z2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIHZvaWQgRmx1c2hEaXNwbGF5TGlz
dFdhc0NvbW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRl
bnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNv
cmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdl
YktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBGbHVz
aERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIFJlbGVhc2VTaGFyZWRJdGVtQnVmZmVy
cyhWZWN0b3I8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyPiBpZGVu
dGlmaWVycywgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCAzZjVhNzNiZWMzYmYyODZlNTI5
ODFkZTQ4YjkwYzMxZDAxOWQ4YzNkLi4wZjlhNmU4ZjE5ZTFkOTg1NjlmZWQxYmJjNDFkMDc2ODNl
YWNmMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY0OGY1
OGIyZjY5YzU0ZDgwZTJiYjFkOTFlZmJiZjEwNzVkZmI4YjIuLjA0OTZkZDljZTY4YjI5YzQyZGM0
NzAzZDYyOTQ4OGM2NTUzN2M5Y2QgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0xMC0zMCAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3Vy
cmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGlu
dG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV0lQIG9ubHkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3Bs
YXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNs
dWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3Rz
L2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMv
cmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0xMC0zMCAgRnVq
aWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbVGV4dHVy
ZU1hcHBlcl0gUmVwbGljYSBsYXllcnMgZG9uJ3QgYmxlbmQgY29ycmVjdGx5IGJlY2F1c2UgY29t
cHV0ZU92ZXJsYXBSZWdpb25zIGRvZXNuJ3QgdGFrZSBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25z
Ojp0cmFuc2Zvcm0gaW50byBhY2NvdW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMzI4ODQ4MDYy
NzAxOWQ1NDAyZDk0MjVmYzRhMTMxMzc3MGVjYjMxYS4uMTQ1MWIxOTI1M2MzMjM4OTI4YmJkOWY1
ZTVkZWJiOTI3NGM1MGQ1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtNiwxMCArNiw4IEBACiAg
IChmaWxsLWNvbG9yICNDODAwMDApCiAgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQog
KGZpbGwtcmVjdAotICAoZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCi0gIChyZWN0IGF0
ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCisgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkgZXh0
ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCiAoc2V0LWlubGluZS1maWxsLWNvbG9yCiAgIChj
b2xvciAjMDAwMEM4ODApKQogKGZpbGwtcmVjdAotICAoZXh0ZW50IGF0ICgzMCwxMjApIHNpemUg
NTV4NTApCi0gIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCisgIChyZWN0IGF0ICgzMCwz
MCkgc2l6ZSA1NXg1MCkgZXh0ZW50IGF0ICgzMCwxMjApIHNpemUgNTV4NTApCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQKaW5kZXggZTlmNTQwNDE3YmQ2ZTVkYzc3ODYxNWU1ZjM3OTQ5NzZlNDE5NWY4
ZC4uNTkwYjkzZjVjODkyY2FlMzdmNDI0NjA5YThmZTQ4MDMzZTY2ODM2OCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93
LWV4cGVjdGVkLnR4dApAQCAtOSw5ICs5LDggQEAKICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAg
aGVpZ2h0PTIwKQogICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKIChmaWxsLWNvbXBv
c2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogICAocmVjdCBh
dCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChjb21wb3NpdGUt
b3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQorICAoYmxlbmQt
bW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKIChyZXN0b3JlKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5j
bHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggZTA0NTJhMTczYTFhZmUyMzdmNzI4
ZDMwYmMyN2VjNjBlZWM5NjIzZC4uMjhjY2Y0YzAxODU5ZGUxOTBiMGE5YTI3ZmEyZmVjMDA2M2Vk
OGUxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
ZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0xMSwxMSArMTEsMTAg
QEAKICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQogICAoc2hhZG93cy11c2Ut
bGVnYWN5LXJhZGl1cyAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg3
LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDB4
MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92
ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50
IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKIChyZXN0b3JlKQogKHNldC1jdG0K
ICAgKHNldC1jdG0ge209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDAuMDAsMjIuMDApfSkp
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0
LWV4cGVjdGVkLnR4dAppbmRleCBiZDg3NmRmNDAzYTRhZGQwYmMzOTFmN2M2MmFjMmI0YzNiY2Y3
ZGEwLi5iYzE3YjUxMTQ5OWY4MjU2Yzk5MjkwZGFlODYxNGQ0ODk0Y2FmOWNjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3Rl
ZC50eHQKQEAgLTMsMjkgKzMsMjQgQEAKICAgKHggMC4wMCkKICAgKHkgMC4wMCkpCiAoZmlsbC1j
b21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChyZWN0
IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKGNvbG9yICMwMDgwMDApCiAgIChjb21wb3NpdGUt
b3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQorICAoYmxlbmQt
bW9kZSBub3JtYWwpIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0LXN0YXRlCiAg
IChjaGFuZ2UtZmxhZ3MgMzI5NjApCiAgIChmaWxsLWNvbG9yICMwMDAwRkYpCiAgIChzdHJva2Ut
c3R5bGUgMCkKICAgKHNob3VsZC1hbnRpYWxpYXMgMCkpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQg
YXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MikKLSAgKGJv
cmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBh
dCAoMCwwKSBzaXplIDEwNHgyKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDEwMikgc2l6
ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQotICAoYm9yZGVyLXRoaWNr
bmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDEwMikg
c2l6ZSAxMDR4MikKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDJ4MTA0KQog
ICAocmVjdCBhdCAoMCwwKSBzaXplIDJ4MTA0KQotICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkK
KyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMngxMDQpCiAo
ZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQogICAocmVjdCBhdCAo
MTAyLDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVy
LXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1y
ZWN0LWV4cGVjdGVkLnR4dAppbmRleCBhZGRkMmNhNDI1MGMyNGEwYzllZTIyNTVkNDI3NWE3NmY2
MDQzZWVkLi5iYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3MmY4MmI5IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xp
cHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMywxMSArMywxMCBAQCByZWNvcmRlZDoKICAgKHgg
MC4wMCkKICAgKHkgMC4wMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAo
NDEyLDApIHNpemUgMTAweDEwMCkKICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAg
IChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAg
KGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQx
MiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412979</attachid>
            <date>2020-11-02 15:30:50 -0800</date>
            <delta_ts>2020-11-02 16:15:19 -0800</delta_ts>
            <desc>More WIP (address Sam&apos;s feedback and try to fix builds)</desc>
            <filename>bug-218406-20201102153049.patch</filename>
            <type>text/plain</type>
            <size>390577</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI3NWNmNjJmYzhiYmE5
NzMxMDQxZDU3ZTcwOTU0MTVhYWZiY2YwMy4uOWM0MWMzYWUwNTFhYzBiYTRkN2EyYTEzMmMzOTZj
NDNlZWMzMDU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxNyBAQAorMjAyMC0xMS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OmR1bXBEcmF3aW5nSXRlbUV4dGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmlzRW1wdHkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZl
ckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmZv
ckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6c2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1
cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
aXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjppdGVyYXRvcjo6Y2xlYXJDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlVG9FbmQpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRv
U3RhcnRPZkN1cnJlbnRCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6fml0ZXJh
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0
b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmJlZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5kIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcklm
RXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6YWRkRHJhd2luZ0l0ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW06OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUF0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUNvdW50IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Omxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
UmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURp
c3BsYXlMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0Ojp0YWtlRGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjppc0RyYXdpbmdJdGVt
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpJdGVt
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp+SXRl
bUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV9hbGxvY2F0ZWRCdWZm
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3JlYWRPbmx5QnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0YWJsZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0dGVuTnVtYmVyT2ZCeXRlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpjcmVhdGVJdGVtQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpmb3JFYWNoSXRlbUJ1
ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
Y2xlYXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xp
ZW50Ojp+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0Vt
cHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjph
cHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9u
bHlCdWZmZXJzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OnNpemVPZkl0ZW1JbkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0Ojppc0RyYXdpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lu
bGluZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4
dDo6RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6
UGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
OjpJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpz
aXplSW5CeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OkRyYXdpbmdJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpTYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50Ojpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZUZpbGxDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNl
dExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRv
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6
OkNsaXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJh
d0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGls
ZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpE
cmF3SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdSZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxs
aXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpG
aWxsUmVjdFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBz
ZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpT
dHJva2VJbmxpbmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0
dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxs
UGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0
b3JlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVzdG9yZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VHJhbnNsYXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VHJhbnNsYXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSb3RhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSb3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTY2FsZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNjYWxlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRDVE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldElubGluZUZpbGxHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpj
b2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmls
bENvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVTdHJva2VDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ryb2tl
VGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlj
a25lc3M6OnRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0U3Ryb2tlVGhpY2tuZXNzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNh
cCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OlNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVEYXNoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1p
dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdzo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXA6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXA6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXQ6OkNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdD
b21tYW5kczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5
cGhzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdl
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VC
dWZmZXI6OkRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ltYWdlQnVmZmVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5h
dGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxh
eWVyOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdF
bGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6cmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Vs
bGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0aDo6RHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0OjpGaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3Q6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aENvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aEdyYWRpZW50OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVk
UmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Rmls
bFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJvdW5kZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6RmlsbElu
bGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRo
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxJbmxpbmVQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRh
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dEltYWdlRGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UGFpbnRGcmFtZUZvck1lZGlhOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6
U3Ryb2tlSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
SW5saW5lUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpyZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0
ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJ
dGVtOjpzZXRFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdJdGVtOjpleHRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRlbnRLbm93biBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRzIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRl
bTo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNhdmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2F2ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXN0b3JlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjplbmNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6
ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
Y2FsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0Q1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldENUTTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmRl
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURh
c2g6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZUpvaW46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUpvaW46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJT
aGFkb3c6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xlYXJTaGFkb3c6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBoczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3SW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJ
bWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lM
YXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxp
cHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6
ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxp
cHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1l
ZGlhOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2RlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBw
bHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVy
bjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eUZpbGxQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxl
RmFjdG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3Rh
dGVDaGFuZ2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
d2lsbEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkaWRBcHBlbmRJdGVtT2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpy
b3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzY2FsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNvbmNhdENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldENUTSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjplbmRUcmFuc3BhcmVu
Y3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxs
Um91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjph
cHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlw
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmlzRW1w
dHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZTo6d2lsbEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZTo6ZGlkQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6Oml0ZW1Db3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlOjp3aWxsQXBwZW5k
SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkRlbGVnYXRlOjpkaWRBcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGU6OmFwcGx5KToKKwogMjAy
MC0xMC0yOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gW0dQVSBQcm9jZXNzXSBQZXJmb3JtIGltYWdlIGRlY29kaW5nIG9mIGNvbG9y
IGZvbnRzIGluIHRoZSBXZWIgUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5MTU3YjcwODVlNDJhOGM5NDdk
NWE1ZTZhOTljYWQyNmYzMzA5M2E5Li5kZmRmNDM3OTQxMmUwOTBiNDVjYTkxOTQwZDQ5MzJmNDZi
ZmNiZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTExLTAyICBXZW5zb24gSHNp
ZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3Bs
YXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQg
bWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAo
Li4udGhpcyBDaGFuZ2VMb2cgaXMgZ29pbmcgdG8gbmVlZCB3b3JkcykKKworICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENyZWF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0pOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENy
ZWF0ZVNoYXJlZEl0ZW1EYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkSXRlbUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRm
b3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6RGVjb2Rlcik6Cisg
ICAgICAgIChJUEM6Om1fYnVmZmVyRGVhbGxvY2F0b3IpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRlY29kZXI6OmRlY29kZU9iamVjdCk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpF
bmNvZGVyKToKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6cmVsZWFzZUF0dGFjaG1lbnRzKToKKyAg
ICAgICAgKElQQzo6RW5jb2Rlcjo6aGFzQXR0YWNobWVudHMgY29uc3QpOgorICAgICAgICAqIFBs
YXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpj
cmVhdGVEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVk
RGlzcGxheUxpc3RIYW5kbGU6OmRlY29kZSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4
dEFuZENvbW1pdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlU2hhcmVkSXRl
bUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgor
CiAyMDIwLTEwLTMwICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yRnJvbnRlbmRBUElEaXNwYXRjaGVyIHRvIFdlYkNv
cmUsIGNsZWFuIHVwIHVzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNjM3NzFiMDQwNTg3YTk0ODVmNDQ2
MDhmOGMxMjgzZWY3NmM2MTVmOS4uNDkxNTBkNjc1NTQ5OTEyOTgzMWRhNGU5M2NjNjc2ZjY4YzM5
NzRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE5NjEsNiArMTk2MSw4IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9E
aXN0YW50TGlnaHRTb3VyY2UuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjZhZjUwZDIxZWMyNzc2NDZkYzE0N2U0ODY4NjUy
YmFjMjUwNjcyZS4uMmIwNmEzNDQ4ZDllOTI1MDBlNmNiNzI0Y2E0YjI5MWFiYTdkYTBhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTE2MCw2ICs1MTYwLDcgQEAKIAkJRjNBQkZFMEMxMzBFOURBMDAwRTdGN0QxIC8qIEluc3Ry
dW1lbnRpbmdBZ2VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEYzQUJGRTBCMTMwRTlEQTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmgg
Ki87IH07CiAJCUYzRDQ2MTQ5MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjNENDYxNDcxMTYx
RDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JIYW5kbGVyLmggKi87IH07CiAJCUY0MDNFNzg3MjM2M0I1
OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDNFNzg1MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhp
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
NDIyQjhCODI1M0Y3MUZDMDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDIyQjhCNTI1M0Y3MDY1
MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQyOTI2MTgyNTI2NEQ0NDAwMDA3ODk4IC8q
IE1lZGlhUGxheWVySWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQyOTI2MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRl
bnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUY0MzNFOTAzMURCQkRCQTIwMEVGMEQxNCAvKiBTdGF0aWNQYXN0ZWJvYXJkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDMzRTkwMjFEQkJEQkEy
MDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0NDBFNzdBMjMzRDk0RDcwMDYzRjlBQiAvKiBOYXZp
Z2F0b3JDbGlwYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0NDBFNzZGMjMzRDk0RDMwMDYzRjlBQiAvKiBOYXZpZ2F0b3JDbGlwYm9hcmQuaCAq
LzsgfTsKQEAgLTUxODQsNiArNTE4NSw3IEBACiAJCUY0OEQyQTdFMjE1NzE4MjYwMEM2NzUyQiAv
KiBGb250QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ4RDJBNzEyMTU2REMwQTAwQzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ4RDJBQTUy
MTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNv
Y29hLmggKi87IH07CiAJCUY0OTc4Njg4MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRl
bUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
OTc4Njg3MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNEE2RDZBNDI1NEM1MTJD
MDBCNjVGQUEgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRBNkQ2QTMyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3Bs
YXlMaXN0SXRlbVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlGNEI0MjJDNDIyMEMwNTY4MDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QjQyMkMyMjIw
QzAwMDAwMDlFMUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0QkZCOTg1MUUxRERGOUIwMDg2MkMyNCAvKiBE
dW1wRWRpdGluZ0hpc3RvcnkuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0ODM4OTgzMUUxRERGMkIwMDc2QjdFQSAvKiBEdW1wRWRpdGluZ0hp
c3RvcnkuanMgKi87IH07CiAJCUY0QkZCOTg2MUUxRERGOUIwMDg2MkMyNCAvKiBFZGl0aW5nSGlz
dG9yeVV0aWwuanMgaW4gQ29weSBTY3JpcHRzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0ODM4OTg0MUUxRERGMkIwMDc2QjdFQSAvKiBFZGl0aW5nSGlzdG9yeVV0aWwuanMg
Ki87IH07CkBAIC0xNjMxMSw2ICsxNjMxMyw4IEBACiAJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQw
OSAvKiBKU0Vycm9ySGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0Vycm9ySGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NTIz
NjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudGVyS2V5
SGludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NjIzNjNCNThDMDAw
NDQ1NTAgLyogRW50ZXJLZXlIaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVudGVyS2V5SGlu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI1MjUzRjcwNjUwMDRF
NzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI2MjUz
RjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQyOTI2MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250QXR0cmlidXRlQ2hhbmdl
c0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDMzRTkwMjFEQkJEQkEy
MDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2FyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdGF0aWNQYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNjM2NCw2ICsxNjM2OCw4IEBACiAJCUY0OEQyQUE0MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xv
ckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29sb3JDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9h
cmRJdGVtSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkSXRlbUluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ5RTk4RTQyMURFRTZDMTAwOUFFNTVFIC8qIEVkaXRB
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRWRpdEFjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkEzMjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlz
dEl0ZW1UeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbVR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QTYyNTRDNTFFOTAwQjY1RkFBIC8qIERpc3Bs
YXlMaXN0SXRlbVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtVHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjQyMkMyMjIwQzAwMDAwMDlF
MUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01QYXN0ZUFjY2Vzcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEM1RjIwNTI0NzlFN0VFMDBFOUI0RjUg
LyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkSW1hZ2VS
ZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDNUYyMDgyNDc5RTlDODAw
RTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENs
aXBib2FyZEltYWdlUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3
NjE4LDggKzE3NjI0LDEyIEBACiAJCQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwICovLAogCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRB
NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJNzJFQTA5RjcyM0ZDQ0Iz
RDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKKwkJCQlGNDIyQjhCNjI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLywKKwkJCQlGNDIy
QjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8sCiAJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCisJCQkJ
RjRBNkQ2QTYyNTRDNTFFOTAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwICovLAor
CQkJCUY0QTZENkEzMjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi8s
CiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
ICovLAogCQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVy
LmggKi8sCiAJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5
ZXIuY3BwICovLApAQCAtMzE0NDIsNyArMzE0NTIsOSBAQAogCQkJCTFDQUY1NkRCMjUzMDFBQzgw
MDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTVBRDA5NDAyNDA4OTY0MDAwREU0RDJGIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNFMjQwODk2MzUwMERFNEQyRiAvKiBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDIyQjhCODI1M0Y3MUZD
MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRjRBNkQ2QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlBRjJENjkx
NDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDZhODBiODQ2MDBlMGEyYmIwNTU1MjM5NTVmZTlj
YzYwYTlhZWMzY2IuLmY0N2RiZDJkOWY4YmUyZTg1NTVhYjZkOTY3OGE5NWU2NjVkYTI4NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMDIxLDcgKzIwMjEsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKICAg
ICBBU1NFUlQobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIAogICAgIGF1dG8mIGRpc3BsYXlM
aXN0ID0gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdCgpOwotICAgIGlmIChkaXNwbGF5
TGlzdC5pdGVtQ291bnQoKSkgeworICAgIGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIERpc3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcigqY2FudmFzQmFzZSgpLmRyYXdp
bmdDb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KHsgRmxv
YXRQb2ludDo6emVybygpLCBjYW52YXNCYXNlKCkuc2l6ZSgpIH0pOwogICAgICAgICBkaXNwbGF5
TGlzdC5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAppbmRleCAwZDFjYTkyZDYwNDVlYjM3YTc4ZDNlMTg5N2MyNmY0MmI5
Yzc2ZjNhLi41OWQzMjMwZTBlOGY0MzYwZDczZWIzMzY4MjUzNGEzZTQ5MGE2ODNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApA
QCAtMTYzLDEwICsxNjMsMTAgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBX
RUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKIAogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgR3JhcGhpY3NDb250
ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdy
YXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7CiAg
ICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCmluZGV4IGZmZDlkNmRkZmI2MGFjMWEwOTcyMmRmYWRj
ODJmMTE1MzBlOTIwYTEuLjE1NzI3ODU5ZDE0ZTNjOTk0YTA1ZTAwMGU4MmY5YmJlYTMxMjc2MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQ4LDE3ICs0
OSw0MCBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCitEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJiBvdGhlcikKKyAgICA6IG1faXRlbXMo
c3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zLCBudWxscHRyKSkKKyAgICAsIG1fZHJhd2luZ0l0
ZW1FeHRlbnRzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kcmF3aW5nSXRlbUV4dGVudHMsIHsgfSkp
Cit7Cit9CisKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdChJdGVtQnVmZmVySGFuZGxlcyYmIGhh
bmRsZXMpCisgICAgOiBtX2l0ZW1zKG1ha2VVbmlxdWU8SXRlbUJ1ZmZlcj4oV1RGTW92ZShoYW5k
bGVzKSkpCit7Cit9CisKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKK0Rp
c3BsYXlMaXN0Ojp+RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisKK0Rpc3BsYXlMaXN0JiBEaXNw
bGF5TGlzdDo6b3BlcmF0b3I9KERpc3BsYXlMaXN0JiYgb3RoZXIpCit7CisgICAgbV9pdGVtcyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0cik7CisgICAgbV9kcmF3aW5nSXRl
bUV4dGVudHMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7IH0p
OworICAgIHJldHVybiAqdGhpczsKK30KKwogdm9pZCBEaXNwbGF5TGlzdDo6Y2xlYXIoKQogewot
ICAgIG1fbGlzdC5jbGVhcigpOworICAgIGlmIChtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1zLT5j
bGVhcigpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmNsZWFyKCk7CiB9CiAKLWJvb2wgRGlz
cGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgY29uc3QgSXRl
bSYgaXRlbSkKK2Jvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFn
cyBmbGFncywgSXRlbUhhbmRsZSBpdGVtKQogewogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBBc1Rl
eHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKLSAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHN0YXRlSXRlbSA9IGRvd25jYXN0PFNldFN0YXRlPihpdGVtKTsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIHN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICAg
ICAgLy8gRklYTUU6IGZvciBub3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBzdGF0
ZS1jaGFuZ2UgZmxhZ3MgYXJlIHBsYXRmb3JtLXNwZWNpZmljLgogICAgICAgICAgICAgaWYgKHN0
YXRlSXRlbS5zdGF0ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC04MCwxMyArMTA0LDI2IEBAIGJvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1bXBG
b3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgY29uc3QgSXRlbSYgaXRlbSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZHVtcERyYXdpbmdJdGVtRXh0ZW50KFRleHRTdHJlYW0m
IHN0cmVhbSwgT3B0aW9uYWw8RmxvYXRSZWN0PiYmIGV4dGVudCkKK3sKKyAgICBzdHJlYW0gPDwg
IiBleHRlbnQgIjsKKyAgICBpZiAoZXh0ZW50KQorICAgICAgICBzdHJlYW0gPDwgKmV4dGVudDsK
KyAgICBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAidW5rbm93biI7Cit9CisKIFN0cmluZyBEaXNw
bGF5TGlzdDo6YXNUZXh0KEFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewogICAgIFRleHRTdHJl
YW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2RlOjpNdWx0aXBsZUxpbmUsIFRleHRTdHJlYW06
OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0
KSB7CisgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRdIDogKnRoaXMpIHsKICAgICAgICAgaWYg
KCFzaG91bGREdW1wRm9yRmxhZ3MoZmxhZ3MsIGl0ZW0pKQogICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cChzdHJlYW0pOwogICAgICAg
ICBzdHJlYW0gPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAg
ICAgICAgICAgZHVtcERyYXdpbmdJdGVtRXh0ZW50KHN0cmVhbSwgV1RGTW92ZShleHRlbnQpKTsK
ICAgICB9CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7CiB9CkBAIC05NiwxMCArMTMzLDEx
IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgVGV4
dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgImRpc3BsYXkgbGlzdCI7
CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBtX2xpc3Quc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNj
b3BlIHNjb3BlKHRzKTsKLSAgICAgICAgdHMgPDwgaSA8PCAiICIgPDwgbV9saXN0W2ldLmdldCgp
OworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7CisgICAgICAgIFRleHRT
dHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgICAgICB0cyA8PCBpdGVtOworICAgICAg
ICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICBkdW1wRHJhd2luZ0l0ZW1F
eHRlbnQodHMsIFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogICAgIHRzLnN0YXJ0R3JvdXAoKTsK
ICAgICB0cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOwpAQCAtMTA4LDEz
ICsxNDYsMjc2IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
CiAKIHNpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAogewotICAgIHNpemVf
dCByZXN1bHQgPSAwOwotICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KQotICAgICAgICByZXN1
bHQgKz0gSXRlbTo6c2l6ZUluQnl0ZXMocmVmKTsKKyAgICByZXR1cm4gbV9pdGVtcyA/IG1faXRl
bXMtPnNpemVJbkJ5dGVzKCkgOiAwOworfQorCitib29sIERpc3BsYXlMaXN0Ojppc0VtcHR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gIW1faXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpOworfQor
CitJdGVtQnVmZmVyJiBEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2l0
ZW1zKQorICAgICAgICBtX2l0ZW1zID0gbWFrZVVuaXF1ZTxJdGVtQnVmZmVyPigpOworICAgIHJl
dHVybiAqbV9pdGVtczsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNsaWVu
dChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIoKS5z
ZXRDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNs
aWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIo
KS5zZXRDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1C
dWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rp
b24pIGNvbnN0Cit7CisgICAgaWYgKG1faXRlbXMpCisgICAgICAgIG1faXRlbXMtPmZvckVhY2hJ
dGVtQnVmZmVyKFdURk1vdmUobWFwRnVuY3Rpb24pKTsKK30KIAotICAgIHJldHVybiByZXN1bHQ7
Cit2b2lkIERpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCB2YWx1
ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCkp
OworICAgIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgRGlz
cGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCit7CisgICAgc3dpdGNoIChpdGVtLnR5
cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNsYXRl
PihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0
PFNjYWxlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRD
VE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4o
aXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENv
bG9yPihpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZVN0
cm9rZUNvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0
cm9rZVRoaWNrbmVzcz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRl
bS5nZXQ8U2V0U3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
TGluZURhc2g+KGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8
U2V0TGluZUpvaW4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8Q2xlYXJTaGFkb3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwOgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xp
cE91dD4oaXRlbS5nZXQ8Q2xpcE91dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRv
UGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihpdGVtLmdldDxDbGlw
T3V0VG9QYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxDbGlwUGF0aD4oaXRlbS5nZXQ8Q2xpcFBhdGg+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTog
U3VwcG9ydCB0aGUgYWJpbGl0eSB0byBjbG9uZSBkaXNwbGF5IGxpc3RzICh0aGlzIGlzIGN1cnJl
bnRseSBvbmx5IHVzZWQgZm9yIGRpc3BsYXkgbGlzdCB0cmFja2luZykuCisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3R2x5cGhzPihpdGVt
LmdldDxEcmF3R2x5cGhzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlPihpdGVtLmdldDxEcmF3SW1hZ2U+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdUaWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U+KGl0ZW0uZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJh
d0ltYWdlQnVmZmVyPihpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZl
SW1hZ2U+KGl0ZW0uZ2V0PERyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0
PERyYXdQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3UmVjdD4oaXRlbS5nZXQ8RHJhd1JlY3Q+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lPihpdGVt
LmdldDxEcmF3TGluZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxEcmF3TGlu
ZXNGb3JUZXh0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0
ZW0uZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdFbGxpcHNlPihpdGVtLmdl
dDxEcmF3RWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd1BhdGg+KGl0ZW0uZ2V0PERyYXdQYXRoPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3
Rm9jdXNSaW5nUGF0aD4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3
Rm9jdXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3Q+KGl0
ZW0uZ2V0PEZpbGxSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xv
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8Rmls
bFJlY3RXaXRoQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdl
dDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRl
bS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91
bmRlZFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdl
dDxGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihpdGVtLmdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RmlsbElubGluZVBhdGg+KGl0ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigp
KTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4g
YXBwZW5kPEZpbGxQYXRoPihpdGVtLmdldDxGaWxsUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbEVsbGlwc2U+KGl0ZW0u
Z2V0PEZpbGxFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRp
YT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTdHJva2VSZWN0PihpdGVtLmdldDxTdHJva2VSZWN0PigpKTsKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZUlubGluZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZUlubGlu
ZVBhdGg+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTdHJva2VQYXRoPihpdGVtLmdldDxTdHJva2VQYXRoPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0
cm9rZUVsbGlwc2U+KGl0ZW0uZ2V0PFN0cm9rZUVsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclJlY3Q+KGl0ZW0uZ2V0
PENsZWFyUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdl
dDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFu
c3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXll
cj4oaXRlbS5nZXQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworI2lmIFVTRShDRykKKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8
QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtLmdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8
QXBwbHlGaWxsUGF0dGVybj4oaXRlbS5nZXQ8QXBwbHlGaWxsUGF0dGVybj4oKSk7CisjZW5kaWYK
KyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAgICAgICByZXR1
cm4gYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0uZ2V0PEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I+KCkpOworICAgIH0KK30KKworYm9vbCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0
RW5kKCkgY29uc3QKK3sKKyAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgYXV0byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1z
OworICAgIGF1dG8gZW5kQ3Vyc29yID0gaXRlbXMubV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRl
bXMubV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICByZXR1cm4gbV9jdXJzb3IgPT0gZW5kQ3Vy
c29yOworfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0o
KQoreworICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKworICAgIGlmIChhdEVuZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7Cisg
ICAgYXV0byBpdGVtVHlwZSA9IHN0YXRpY19jYXN0PEl0ZW1UeXBlPihtX2N1cnNvclswXSk7Cisg
ICAgaWYgKGlzRHJhd2luZ0l0ZW0oaXRlbVR5cGUpICYmICFtX2Rpc3BsYXlMaXN0Lm1fZHJhd2lu
Z0l0ZW1FeHRlbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBtX2Rp
c3BsYXlMaXN0Lm1fZHJhd2luZ0l0ZW1FeHRlbnRzW21fZHJhd2luZ0l0ZW1JbmRleF07CisgICAg
ICAgIG1fZHJhd2luZ0l0ZW1JbmRleCsrOworICAgIH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRF
eHRlbnQgPSBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvKiBjbGllbnQgPSBpdGVtcy5tX3JlYWRp
bmdDbGllbnQ7CisgICAgaWYgKGNsaWVudCAmJiBjbGllbnQtPnJlcXVpcmVzRGVjb2RpbmcoaXRl
bVR5cGUpKSB7CisgICAgICAgIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplT2ZJdGVtSW5C
eXRlcyhpdGVtVHlwZSkgKyBzaXplb2YoSXRlbVR5cGUpOworICAgICAgICBtX2N1cnJlbnRCdWZm
ZXJGb3JEZWNvZGVkSXRlbSA9IHNpemVPZlR5cGVBbmRJdGVtIDw9IHNpemVPZkZpeGVkQnVmZmVy
Rm9yRGVjb2RlZEl0ZW1zID8gbV9maXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA6IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KG1hbGxvYyhzaXplT2ZUeXBlQW5kSXRlbSkpOworICAgICAgICBt
X2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGl0
ZW1UeXBlKTsKKworICAgICAgICBhdXRvIHNpemVPZkRhdGEgPSByZWludGVycHJldF9jYXN0PHNp
emVfdCo+KG1fY3Vyc29yICsgc2l6ZW9mKEl0ZW1UeXBlKSlbMF07CisgICAgICAgIGF1dG8qIHN0
YXJ0T2ZQYWRkaW5nID0gbV9jdXJzb3IgKyBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVf
dCk7CisgICAgICAgIHNpemVfdCBwYWRkaW5nID0gKGFsaWdub2YodWludDY0X3QpIC0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0T2ZQYWRkaW5nKSAlIGFsaWdub2YodWludDY0X3Qp
KSAlIGFsaWdub2YodWludDY0X3QpOworICAgICAgICBhdXRvIGRlY29kZWRJdGVtSGFuZGxlID0g
Y2xpZW50LT5kZWNvZGVJdGVtKHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZywgc2l6ZU9mRGF0YSwg
aXRlbVR5cGUsIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVkSXRlbUhhbmRsZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgY3Jh
c2hpbmcsIHRoaXMgbmVlZHMgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBpbmZvcm0gdGhlIGNhbGxl
ci4KKyAgICAgICAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgdGhpcyBhc3NlcnRpb24gbWFr
ZXMgYnVncyBpbiBpdGVtIGJ1ZmZlciBlbmNvZGluZyBsb2dpYyBlYXNpZXIKKyAgICAgICAgICAg
IC8vIHRvIGNhdGNoIGJ5IGF2b2lkaW5nIG15c3RlcmlvdXMgb3V0LW9mLWJvdW5kcyByZWFkcyBh
bmQgaW5jb3JyZWN0bHkgYWxpZ25lZCBpdGVtcworICAgICAgICAgICAgLy8gZG93biB0aGUgbGlu
ZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KyAgICAgICAgbV9jdXJyZW50SXRlbSA9ICpkZWNvZGVkSXRlbUhhbmRsZTsKKyAgICAgICAgbV9j
dXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90
KSArIHBhZGRpbmcgKyBzaXplT2ZEYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fY3VycmVu
dEl0ZW0gPSBJdGVtSGFuZGxlIHsgbV9jdXJzb3IgfTsKKyAgICAgICAgbV9jdXJyZW50SXRlbVNp
emVJbkJ1ZmZlciA9IG1fY3VycmVudEl0ZW0uc2l6ZSgpOworICAgIH0KK30KKwordm9pZCBEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2UoKQoreworICAgIGlmIChhdEVuZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2N1cnNvciArPSBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyOwor
CisgICAgaWYgKG1fY3Vyc29yID09IG1fY3VycmVudEVuZE9mQnVmZmVyICYmIG1fcmVhZE9ubHlC
dWZmZXJJbmRleCA8IG1fZGlzcGxheUxpc3QubV9pdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnMuc2l6
ZSgpKSB7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCsrOworICAgICAgICBtb3ZlQ3Vy
c29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgIH0KKworICAgIHVwZGF0ZUN1cnJlbnRJ
dGVtKCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVhckN1cnJlbnRJdGVt
KCkKK3sKKyAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKworICAgIGlmIChhdXRv
IGl0ZW0gPSBzdGQ6OmV4Y2hhbmdlKG1fY3VycmVudEl0ZW0sIHsgfSkpCisgICAgICAgIGl0ZW0u
ZGVzdHJveSgpOworCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJ
dGVtICE9IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMpKSB7CisgICAgICAgIGZyZWUobV9j
dXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JE
ZWNvZGVkSXRlbSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVy
YXRvcjo6bW92ZVRvRW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0
Lm1faXRlbXMpIHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5k
YXRhICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1fY3VycmVudEVu
ZE9mQnVmZmVyID0gbV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9IGl0
ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlM
aXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKQoreworICAg
IGF1dG8mIGl0ZW1zID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICghaXRlbXMpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMgPSBpdGVt
cy0+bV9yZWFkT25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5QnVmZmVySW5k
ZXggPCBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBuZXh0QnVmZmVy
SGFuZGxlID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZmZXJJbmRleF07
CisgICAgICAgIG1fY3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAgICAgICBtX2N1
cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5jYXBhY2l0eTsK
KyAgICB9IGVsc2UgaWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJPZlJlYWRPbmx5
QnVmZmVycykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRh
dGE7CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBpdGVtcy0+bV93
cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
aW5kZXggZDZiZTI3NGM2OGRlZWZiNGMwZDUzNjFiZTY0ODE1MjQwMzJjOWY0MS4uODgxOGQ1YjVk
MmZiMjZhZGE3NzVlOTkwZDA0ZDk5MWY3YTFlZWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
QEAgLTI1LDEwICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMzksMTAxICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3Qg
ewotICAgIFNhdmUsCi0gICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAot
ICAgIFNjYWxlLAotICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKLSAgICBTZXRJbmxp
bmVGaWxsR3JhZGllbnQsCi0gICAgU2V0SW5saW5lRmlsbENvbG9yLAotICAgIFNldElubGluZVN0
cm9rZUNvbG9yLAotICAgIFNldFN0cm9rZVRoaWNrbmVzcywKLSAgICBTZXRTdGF0ZSwKLSAgICBT
ZXRMaW5lQ2FwLAotICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1p
dGVyTGltaXQsCi0gICAgQ2xlYXJTaGFkb3csCi0gICAgQ2xpcCwKLSAgICBDbGlwT3V0LAotICAg
IENsaXBPdXRUb1BhdGgsCi0gICAgQ2xpcFBhdGgsCi0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
LAotICAgIERyYXdHbHlwaHMsCi0gICAgRHJhd0ltYWdlLAotICAgIERyYXdUaWxlZEltYWdlLAot
ICAgIERyYXdUaWxlZFNjYWxlZEltYWdlLAotICAgIERyYXdJbWFnZUJ1ZmZlciwKLSAgICBEcmF3
TmF0aXZlSW1hZ2UsCi0gICAgRHJhd1BhdHRlcm4sCi0gICAgRHJhd1JlY3QsCi0gICAgRHJhd0xp
bmUsCi0gICAgRHJhd0xpbmVzRm9yVGV4dCwKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
LAotICAgIERyYXdFbGxpcHNlLAotICAgIERyYXdQYXRoLAotICAgIERyYXdGb2N1c1JpbmdQYXRo
LAotICAgIERyYXdGb2N1c1JpbmdSZWN0cywKLSAgICBGaWxsUmVjdCwKLSAgICBGaWxsUmVjdFdp
dGhDb2xvciwKLSAgICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRlZFJl
Y3QsCi0gICAgRmlsbFJvdW5kZWRSZWN0LAotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAot
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIEZpbGxJbmxpbmVQYXRoLAotI2VuZGlm
Ci0gICAgRmlsbFBhdGgsCi0gICAgRmlsbEVsbGlwc2UsCi0gICAgUHV0SW1hZ2VEYXRhLAotICAg
IFBhaW50RnJhbWVGb3JNZWRpYSwKLSAgICBTdHJva2VSZWN0LAotI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotICAgIFN0cm9rZUlubGluZVBhdGgsCi0jZW5kaWYKLSAgICBTdHJva2VQYXRo
LAotICAgIFN0cm9rZUVsbGlwc2UsCi0gICAgQ2xlYXJSZWN0LAotICAgIEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIsCi0gICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIsCi0jaWYgVVNFKENHKQotICAgIEFw
cGx5U3Ryb2tlUGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVt
LgotICAgIEFwcGx5RmlsbFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3Jk
ZWQgaXRlbS4KLSNlbmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCi19OwotCi1jbGFz
cyBJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgotICAgIEl0ZW0oKSA9
IGRlbGV0ZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlz
RHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYgIWRlZmluZWQoTkRF
QlVHKSB8fCAhTE9HX0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3Q7Ci0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mKTsK
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEl0ZW0+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBlIG1fdHlwZTsKLX07
Ci0KIGVudW0gQXNUZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDAsCiAgICAgSW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKQEAg
LTE0Niw4NiArNTQsMTA5IEBAIGNsYXNzIERpc3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xhc3Mg
UmVjb3JkZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGxheWVyOwogcHVibGljOgotICAgIERpc3Bs
YXlMaXN0KCkgPSBkZWZhdWx0OwotICAgIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0gZGVm
YXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3Bs
YXlMaXN0KEl0ZW1CdWZmZXJIYW5kbGVzJiYpOwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJhdG9y
PShEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3BsYXlM
aXN0KCk7CiAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAotICAg
IGNvbnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9
Ci0gICAgSXRlbSYgaXRlbUF0KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
bmRleCA8IG1fbGlzdC5zaXplKCkpOwotICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQo
KTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNF
bXB0eSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygpIGNv
bnN0OwogCi0gICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLSAgICAKICAgICBTdHJpbmcg
YXNUZXh0KEFzVGV4dEZsYWdzKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCopOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCop
OworCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECiAgICAgV1RGOjpDU3Ry
aW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKCkg
Y29uc3Q7CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8RGlzcGxheUxpc3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhh
bmRsZSYpPiYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFy
Z3M+IHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKTsKKyAgICB2b2lkIGFwcGVuZChJdGVtSGFu
ZGxlKTsKKworICAgIGJvb2wgdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKCkgY29uc3QgeyByZXR1
cm4gbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHM7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhib29sKTsKKworICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gY2xhc3MgSW1tZWRpYXRlbHlNb3ZlVG9FbmQg
eyBObywgWWVzIH07CisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCwgSW1tZWRpYXRlbHlNb3ZlVG9FbmQgaW1tZWRpYXRlbHlNb3ZlVG9FbmQgPSBJbW1lZGlh
dGVseU1vdmVUb0VuZDo6Tm8pCisgICAgICAgICAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxp
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseU1vdmVUb0VuZCA9PSBJ
bW1lZGlhdGVseU1vdmVUb0VuZDo6WWVzKQorICAgICAgICAgICAgICAgIG1vdmVUb0VuZCgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1
cnJlbnRCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgfml0ZXJhdG9yKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gJm1fZGlzcGxheUxp
c3QgPT0gJm90aGVyLm1fZGlzcGxheUxpc3QgJiYgbV9jdXJzb3IgPT0gb3RoZXIubV9jdXJzb3I7
IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBhZHZh
bmNlKCk7IH0KKyAgICAgICAgc3RkOjpwYWlyPEl0ZW1IYW5kbGUsIE9wdGlvbmFsPEZsb2F0UmVj
dD4+IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jdXJyZW50SXRlbSwgbV9jdXJyZW50
RXh0ZW50IH07IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IHNpemVPZkZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zID0gMjU2OworCisgICAgICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKTsKKyAg
ICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG9FbmQoKTsKKyAgICAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhckN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdXBkYXRlQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZh
bmNlKCk7CisgICAgICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKworICAgICAgICBjb25zdCBEaXNw
bGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKKyAgICAgICAgdWludDhfdCogbV9jdXJzb3IgeyBudWxs
cHRyIH07CisgICAgICAgIHNpemVfdCBtX3JlYWRPbmx5QnVmZmVySW5kZXggeyAwIH07CisgICAg
ICAgIHNpemVfdCBtX2RyYXdpbmdJdGVtSW5kZXggeyAwIH07CisgICAgICAgIHVpbnQ4X3QqIG1f
Y3VycmVudEVuZE9mQnVmZmVyIHsgbnVsbHB0ciB9OworCisgICAgICAgIHVpbnQ4X3QgbV9maXhl
ZEJ1ZmZlckZvckRlY29kZWRJdGVtc1tzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtc10g
eyAwIH07CisgICAgICAgIHVpbnQ4X3QqIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtIHsg
bnVsbHB0ciB9OworICAgICAgICBJdGVtSGFuZGxlIG1fY3VycmVudEl0ZW07CisgICAgICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbV9jdXJyZW50RXh0ZW50OworICAgICAgICBzaXplX3QgbV9jdXJy
ZW50SXRlbVNpemVJbkJ1ZmZlciB7IDAgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiB7ICp0aGlzIH07IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiB7ICp0aGlzLCBpdGVyYXRvcjo6SW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcyB9OyB9
CiAKIHByaXZhdGU6Ci0gICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCi0gICAgewot
ICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwotICAgICAgICByZXR1cm4gbV9s
aXN0Lmxhc3QoKS5nZXQoKTsKLSAgICB9CisgICAgSXRlbUJ1ZmZlciogaXRlbUJ1ZmZlcklmRXhp
c3RzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtcy5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IEl0ZW1CdWZmZXImIGl0ZW1CdWZmZXIoKTsKIAotICAgIC8vIExlc3MgZWZmaWNpZW50IGFwcGVu
ZCwgb25seSB1c2VkIGZvciB0cmFja2luZyByZXBsYXkuCi0gICAgdm9pZCBhcHBlbmRJdGVtKEl0
ZW0mIGl0ZW0pCisgICAgdm9pZCBhZGREcmF3aW5nSXRlbUV4dGVudChPcHRpb25hbDxGbG9hdFJl
Y3Q+JiYgZXh0ZW50KQogICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChpdGVtKTsKKyAgICAg
ICAgQVNTRVJUKG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKTsKKyAgICAgICAgbV9kcmF3aW5n
SXRlbUV4dGVudHMuYXBwZW5kKFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzLCBjb25zdCBJdGVtJik7Ci0KLSAg
ICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIHN0YXRp
YyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7CiAKLSAg
ICBWZWN0b3I8UmVmPEl0ZW0+PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW1CdWZm
ZXI+IG1faXRlbXM7CisgICAgVmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVjdD4+IG1fZHJhd2luZ0l0
ZW1FeHRlbnRzOworICAgIGJvb2wgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgeyB0cnVlIH07
CiB9OwogCi0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERpc3BsYXlMaXN0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4u
IEFyZ3M+Cit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAg
ZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNw
bGF5TGlzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDY0
X3Q+IGl0ZW1Db3VudDsKLSAgICBkZWNvZGVyID4+IGl0ZW1Db3VudDsKLSAgICBpZiAoIWl0ZW1D
b3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIERpc3BsYXlMaXN0IGRp
c3BsYXlMaXN0OwotCi0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICppdGVtQ291bnQ7IGkr
KykgewotICAgICAgICBhdXRvIGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAg
IC8vIEZJWE1FOiBPbmNlIHdlIGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBmYWlsaW5nIHRvIGRlY29k
ZSBhbiBpdGVtIHNob3VsZCB0dXJuIGludG8gYSBkZWNvZGUgZmFpbHVyZS4KLSAgICAgICAgLy8g
Rm9yIG5vdywgd2UganVzdCBoYXZlIHRvIGlnbm9yZSBpdC4KLSAgICAgICAgaWYgKCFpdGVtKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIGl0ZW1CdWZm
ZXIoKS5hcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogfSAvLyBE
aXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGY3Y2E2YmJmZmQ5OGZhMGRmNjhh
ODEzNDhjYWVkNTg2M2FhN2Q1MDMuLjA4MWNlYzc5ZTNjOWFlMmEyODA0YzAxNTFlZWFmM2M1YjI5
Yjk2NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdAogICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENHR1N0YXRlR2V0U3Ryb2tl
Q29sb3IoZ3N0YXRlKSk7CiAgICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRl
KSk7CiAKLSAgICBtX293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0dseXBoczo6
Y3JlYXRlKCptX29yaWdpbmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRp
b25zKHBvc2l0aW9ucywgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCBj
dXJyZW50VGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUp
KTsKKyAgICBtX293bmVyLmFwcGVuZDxEcmF3R2x5cGhzPigqbV9vcmlnaW5hbEZvbnQsIGdseXBo
cywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50
VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9z
aXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKIAogICAgIG1fb3duZXIuY29uY2F0Q1RNKGlu
dmVyc2VDVE1GaXh1cCk7CiB9CkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdGUKICAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCiAgICAgYXV0byBp
bWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5hcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCByZWN0LCB7eyB9LCBp
bWFnZS0+c2l6ZSgpfSwgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pKTsKKyAg
ICBtX293bmVyLmFwcGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0
UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9y
aWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwogCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1m
bGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcAppbmRleCBkNDYxN2QzNTE2ZjRmM2U1MWQ3NWQ2NDQzNGE2YTM5NDU3YTAwMDFmLi5mOWIz
MjNjNzQyNjZlZDFmNjFkNDRiMDQ3MmVmNTUxODUzZThjN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFJl
Y29yZGVyJiBEcmF3aW5nQ29udGV4dDo6cmVjb3JkZXIoKQogCiB2b2lkIERyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewotICAg
IGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICBpZiAobV9kaXNwbGF5TGlzdC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RD
b250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFm
NDdjYzAuLjk2ZTRiMWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzks
NyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAg
IFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRh
a2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBE
aXNwbGF5TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlz
cGxheUxpc3QsIHsgfSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVy
biBtX2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiBy
ZXBsYXllZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0
LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAppbmRl
eCAzMjU5OWUwNjJkN2NmNTlkMWRjMmVhZDAxZTc2MGQ2NmUzZjdlYzNjLi5mZmQ5NGI1MjljMDZh
N2UyY2RlMDBlYzk0YjM1NWM4NWRkYWZiNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBm
bHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChtX2RyYXdp
bmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXRlbUNvdW50KCkpCisgICAgICAgIGlmICghbV9kcmF3
aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZHJhd2lu
Z0NvbnRleHQucmVwbGF5RGlzcGxheUxpc3QoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNmMDY2ZjJhN2VmZWMxY2ZmNWE5NDI4NDkyOTNlMTA2YjlhMjI5NzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDQ5OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKwordm9pZCBJdGVtSGFuZGxlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB7CisgICAgICAgIGdldDxTYXZlPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6
IHsKKyAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB7CisgICAgICAgIGdldDxU
cmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOiB7CisgICAgICAgIGdldDxSb3RhdGU+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6
IHsKKyAgICAgICAgZ2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB7CisgICAgICAgIGdl
dDxDb25jYXRlbmF0ZUNUTT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAgICAgICAgZ2V0PFNldENUTT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PFNldElubGluZUZpbGxHcmFk
aWVudD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAgZ2V0PFNldElubGluZUZp
bGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAgICAgICBnZXQ8U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB7CisgICAgICAgIGdldDxT
ZXRTdHJva2VUaGlja25lc3M+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRl
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVDYXA6IHsKKyAgICAgICAgZ2V0PFNldExpbmVDYXA+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6IHsKKyAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB7Cisg
ICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB7CisgICAgICAgIGdl
dDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAgIGdldDxDbGVhclNo
YWRvdz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwOiB7CisgICAgICAgIGdldDxDbGlwPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAg
ICAgICAgZ2V0PENsaXBPdXQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogeworICAgICAgICBnZXQ8Q2xp
cE91dFRvUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogeworICAgICAgICBnZXQ8Q2xpcFBhdGg+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIGdldDxDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0dseXBoczogeworICAgICAgICBnZXQ8RHJhd0dseXBocz4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogewor
ICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHsK
KyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjog
eworICAgICAgICBnZXQ8RHJhd0ltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogewor
ICAgICAgICBnZXQ8RHJhd05hdGl2ZUltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOiB7CisgICAgICAg
IGdldDxEcmF3UGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogeworICAgICAgICBnZXQ8RHJhd1JlY3Q+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0Zv
clRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjogeworICAgICAgICBnZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3RWxsaXBzZTogeworICAgICAgICBnZXQ8RHJhd0VsbGlwc2U+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOiB7Cisg
ICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHsK
KyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAg
ICBnZXQ8RmlsbFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAgICAgICAgZ2V0PEZp
bGxSZWN0V2l0aENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIGdl
dDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHsKKyAgICAg
ICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHsKKyAgICAg
ICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogewor
ICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAgICAgZ2V0PEZpbGxJbmxpbmVQ
YXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsKKyAgICAgICAgZ2V0PEZpbGxQYXRoPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIGdldDxGaWxsRWxsaXBzZT4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURh
dGE6IHsKKyAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6
IHsKKyAgICAgICAgZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB7Cisg
ICAgICAgIGdldDxTdHJva2VSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZUlubGluZVBhdGg+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VQYXRoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUVsbGlwc2U6IHsKKyAgICAgICAgZ2V0PFN0cm9rZUVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB7
CisgICAgICAgIGdldDxDbGVhclJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogewor
ICAgICAgICBnZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lM
YXllcjogeworICAgICAgICBnZXQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogeworICAgICAgICBnZXQ8QXBwbHlTdHJva2VQYXR0ZXJu
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5RmlsbFBhdHRlcm4+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB7CisgICAgICAgIGdldDxBcHBs
eURldmljZVNjYWxlRmFjdG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIH0KK30KKwordm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsKKyAgICAg
ICAgZ2V0PENsaXBPdXRUb1BhdGg+KCkufkNsaXBPdXRUb1BhdGgoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogeworICAgICAgICBnZXQ8Q2xp
cFBhdGg+KCkufkNsaXBQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIGdldDxDbGlwVG9EcmF3
aW5nQ29tbWFuZHM+KCkufkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOiB7CisgICAgICAg
IGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKS5+RHJhd0ZvY3VzUmluZ1BhdGgoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHsK
KyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKS5+RHJhd0ZvY3VzUmluZ1JlY3RzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczog
eworICAgICAgICBnZXQ8RHJhd0dseXBocz4oKS5+RHJhd0dseXBocygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogeworICAgICAgICBnZXQ8
RHJhd0ltYWdlPigpLn5EcmF3SW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZUJ1
ZmZlcj4oKS5+RHJhd0ltYWdlQnVmZmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAgICBnZXQ8RHJhd0xpbmVz
Rm9yVGV4dD4oKS5+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogeworICAgICAgICBnZXQ8RHJhd05h
dGl2ZUltYWdlPigpLn5EcmF3TmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBnZXQ8RHJhd1BhdGg+KCku
fkRyYXdQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLn5EcmF3UGF0dGVybigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZElt
YWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5+RHJhd1RpbGVkSW1hZ2UoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkufkRyYXdUaWxl
ZFNjYWxlZEltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+
KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0aD4oKS5+RmlsbFBh
dGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkufkZpbGxSZWN0
V2l0aENvbG9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50
PigpLn5GaWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB7CisgICAgICAgIGdldDxG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKS5+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
IHsKKyAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5kZWRSZWN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7
CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuflB1dEltYWdlRGF0YSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB7CisgICAgICAg
IGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogeworICAgICAgICBnZXQ8U2V0U3RhdGU+
KCkuflNldFN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5+U3Ryb2tlUGF0aCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBh
dHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgIGNhc2Ug
SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbElubGluZVBhdGg6CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgY2FzZSBJdGVt
VHlwZTo6UmVzdG9yZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgY2FzZSBJdGVt
VHlwZTo6U2F2ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRDVE06CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgSXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKHR5
cGUoKSk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJiBo
YW5kbGVzKQorICAgIDogbV9yZWFkT25seUJ1ZmZlcnMoV1RGTW92ZShoYW5kbGVzKSkKK3sKK30K
KworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcigpID0gZGVmYXVsdDsKKworSXRlbUJ1ZmZlcjo6fkl0
ZW1CdWZmZXIoKQoreworICAgIGNsZWFyKCk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIo
SXRlbUJ1ZmZlciYmIG90aGVyKQorICAgIDogbV9yZWFkaW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fd3JpdGluZ0NsaWVudChz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX25v
bklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fYWxsb2NhdGVkQnVm
ZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAs
IG1fcmVhZE9ubHlCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMs
IHsgfSkpCisgICAgLCBtX3dyaXRhYmxlQnVmZmVyKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
YWJsZUJ1ZmZlciwgeyB9KSkKKyAgICAsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMoc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKSkKK3sKK30KKworSXRlbUJ1ZmZl
ciYgSXRlbUJ1ZmZlcjo6b3BlcmF0b3I9KEl0ZW1CdWZmZXImJiBvdGhlcikKK3sKKyAgICBtX3Jl
YWRpbmdDbGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0
cik7CisgICAgbV93cml0aW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdD
bGllbnQsIG51bGxwdHIpOworICAgIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMs
IHsgfSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2Fs
bG9jYXRlZEJ1ZmZlcnMsIHsgfSk7CisgICAgbV9yZWFkT25seUJ1ZmZlcnMgPSBzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pOworICAgIG1fd3JpdGFibGVCdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZC
eXRlcywgMCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJdGVtQnVmZmVySGFuZGxlIEl0ZW1C
dWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIGlmIChtX3dy
aXRpbmdDbGllbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gbV93cml0aW5nQ2xpZW50
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgfQorCisgICAgY29uc3RleHByIHNpemVfdCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5
ID0gMSA8PCAxMDsKKworICAgIGF1dG8gbmV3QnVmZmVyQ2FwYWNpdHkgPSBzdGQ6Om1heChjYXBh
Y2l0eSwgZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSk7CisgICAgYXV0byogYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4obWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAg
bV9hbGxvY2F0ZWRCdWZmZXJzLmFwcGVuZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZm
ZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpLCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9
CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25z
dCBJdGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChh
dXRvJiBoYW5kbGUgOiBtX3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFu
ZGxlKTsKKworICAgIGlmIChtX3dyaXRhYmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0
ZXMpCisgICAgICAgIG1hcEZ1bmN0aW9uKHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBt
X3dyaXRhYmxlQnVmZmVyLmRhdGEsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3Zv
aWQgSXRlbUJ1ZmZlcjo6Y2xlYXIoKQoreworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNo
YW5nZShtX25vbklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBp
dGVtLmRlc3Ryb3koKTsKKworICAgIGZvciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZSht
X2FsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgICAgIGZyZWUoYnVmZmVyKTsKKworICAgIG1f
cmVhZE9ubHlCdWZmZXJzLmNsZWFyKCk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHsgfTsKKyAg
ICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGQ4YWU3MjIxMjY1MDgwODc5NmI3MDVmNjZhNTU4
YmMzZWQ2Zjc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCkBAIC0wLDAgKzEsMjA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5o
IgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJ
ZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0OworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitlbnVtIEl0ZW1CdWZmZXJJZGVudGlm
aWVyVHlwZSB7IH07Cit1c2luZyBJdGVtQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZp
ZXI8SXRlbUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworLy8gQW4gSXRlbUJ1ZmZlckhhbmRsZSB3
cmFwcyBhIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGRpc3BsYXkgbGlz
dCBpdGVtIGRhdGEuCitzdHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZSB7CisgICAgSXRlbUJ1ZmZlcklk
ZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworICAg
IHNpemVfdCBjYXBhY2l0eSB7IDAgfTsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhISgqdGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFk
YXRhOyB9Cit9OworCit1c2luZyBJdGVtQnVmZmVySGFuZGxlcyA9IFZlY3RvcjxJdGVtQnVmZmVy
SGFuZGxlLCAyPjsKKworLy8gQW4gSXRlbUhhbmRsZSB3cmFwcyBhIHBvaW50ZXIgdG8gYW4gSXRl
bVR5cGUsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIGl0ZW0gb2YgdGhhdCB0eXBlLgorc3Ry
dWN0IEl0ZW1IYW5kbGUgeworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZGVzdHJveSgpOworICAgIGJv
b2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuICEhZGF0YTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWRh
dGE7IH0KKworICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxJ
dGVtVHlwZT4oZGF0YVswXSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
emVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVtSW5CeXRlcyh0eXBlKCkpOyB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gYm9vbCBpcygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUOjppdGVt
VHlwZTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQmIGdldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXM8VD4oKSk7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxUKj4oJmRhdGFbc2l6ZW9mKEl0ZW1UeXBlKV0pOworICAgIH0KK307CisKK2NsYXNzIEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyV3Jp
dGluZ0NsaWVudCgpID0gMDsKKworICAgIHZpcnR1YWwgSXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJ
dGVtQnVmZmVyKHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0VuY29kaW5n
KEl0ZW1UeXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBl
bmNvZGVJdGVtKEl0ZW1IYW5kbGUpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0RlY29kaW5nKEl0ZW1UeXBl
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBPcHRpb25hbDxJdGVtSGFuZGxlPiBXQVJOX1VOVVNF
RF9SRVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCwgSXRlbVR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKSA9IDA7Cit9OworCitJdGVtQnVm
ZmVyV3JpdGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KCkgeyB9CitJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KCkgeyB9CisKKy8vIEFu
IEl0ZW1CdWZmZXIgY29udGFpbnMgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgYW5kIGNvbnNpc3Rz
IG9mIGEgcmVhZHdyaXRlIEl0ZW1CdWZmZXJIYW5kbGUgKHRvIHdoaWNoIGRpc3BsYXkKKy8vIGxp
c3QgaXRlbXMgYXJlIGFwcGVuZGVkKSBhcyB3ZWxsIGFzIGEgbnVtYmVyIG9mIHJlYWRvbmx5IEl0
ZW1CdWZmZXJIYW5kbGVzLiBJdGVtcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHJlYWR3cml0ZQorLy8g
YnVmZmVyIHVudGlsIGFsbCBhdmFpbGFibGUgY2FwYWNpdHkgaXMgZXhoYXVzdGVkLCBhdCB3aGlj
aCBwb2ludCB3ZSB3aWxsIG1vdmUgdGhpcyB3cml0YWJsZSBoYW5kbGUgdG8gdGhlIGxpc3QKKy8v
IG9mIHJlYWRvbmx5IGhhbmRsZXMuCitjbGFzcyBJdGVtQnVmZmVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJdGVtQnVmZmVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgSXRl
bUJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5JdGVtQnVmZmVyKCk7CisgICAgSXRlbUJ1
ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZm
ZXIoSXRlbUJ1ZmZlciYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBvcGVyYXRv
cj0oSXRlbUJ1ZmZlciYmKTsKKworICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0CisgICAg
eworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChhdXRvIGJ1ZmZlciA6
IG1fcmVhZE9ubHlCdWZmZXJzKQorICAgICAgICAgICAgcmVzdWx0ICs9IGJ1ZmZlci5jYXBhY2l0
eTsKKyAgICAgICAgcmVzdWx0ICs9IG1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpOworCisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV93cml0dGVuTnVtYmVyT2ZCeXRl
cyAmJiBtX3JlYWRPbmx5QnVmZmVycy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgSXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCk7CisKKyAgICAv
LyBJdGVtQnVmZmVyOjphcHBlbmQ8VD4oLi4uKSBhcHBlbmRzIGEgZGlzcGxheSBsaXN0IGl0ZW0g
b2YgdHlwZSBUIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKKyAgICAvLyB3cml0YWJsZSBidWZm
ZXIgaGFuZGxlOyBpZiByZW1haW5pbmcgYnVmZmVyIGNhcGFjaXR5IGlzIGluc3VmZmljaWVudCB0
byBzdG9yZSB0aGUgaXRlbSwgYQorICAgIC8vIG5ldyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQg
KGVpdGhlciBieSB0aGUgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQsIGlmIHNldCwgb3IgYnkgdGhl
IGl0ZW0KKyAgICAvLyBidWZmZXIgaXRzZWxmIGlmIHRoZXJlIGlzIG5vIGNsaWVudCkuIEl0ZW1z
IGFyZSBwbGFjZWQgYmFjay10by1iYWNrIGluIHRoZXNlIGl0ZW0gYnVmZmVycywKKyAgICAvLyB3
aXRoIGFuIEl0ZW1UeXBlIHNlcGFyYXRpbmcgZWFjaCBpdGVtLgorICAgIC8vCisgICAgLy8gSWYg
YSB3cml0aW5nIGNsaWVudCBpcyBwcmVzZW50IGFuZCByZXF1aXJlcyBjdXN0b20gZW5jb2Rpbmcg
Zm9yIHRoZSBnaXZlbiBpdGVtIHR5cGUgVCAoaS5lLgorICAgIC8vIGJ5IHJldHVybmluZyB0cnVl
IGZyb20gcmVxdWlyZXNFbmNvZGluZyksIHRoZSBpdGVtIGJ1ZmZlciB3aWxsIGFzayB0aGUgY2xp
ZW50IGZvciBhbiBvcGFxdWUKKyAgICAvLyBTaGFyZWRCdWZmZXIgY29udGFpbmluZyBlbmNvZGVk
IGRhdGEgZm9yIHRoZSBpdGVtLiBUaGlzIGVuY29kZWQgZGF0YSBpcyB0aGVuIGFwcGVuZGVkIHRv
IHRoZQorICAgIC8vIGl0ZW0gYnVmZmVyLCB3aXRoIHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgdGhl
IHN0YXJ0IG9mIHRoaXMgZGF0YSBpcyBhbGlnbmVkIHRvIDggYnl0ZXMsIGlmCisgICAgLy8gbmVj
ZXNzYXJ5LiBXaGVuIGNvbnN1bWluZyBlbmNvZGVkIGl0ZW0gZGF0YSwgYSBjb3JyZXNwb25kaW5n
IEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHdpbGwgYmUKKyAgICAvLyByZXF1aXJlZCB0byBjb252
ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBhbiBpdGVtIG9mIHR5cGUgVC4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4g
YXJncykKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNpemVPZlR5cGVBbmRJdGVtID0g
c2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihUKTsKKworICAgICAgICBpZiAobV93cml0aW5nQ2xp
ZW50ICYmIG1fd3JpdGluZ0NsaWVudC0+cmVxdWlyZXNFbmNvZGluZyhUOjppdGVtVHlwZSkpIHsK
KyAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlwZUFuZEl0ZW1d
OworICAgICAgICAgICAgaXRlbUJ1ZmZlclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0
ZW1UeXBlKTsKKyAgICAgICAgICAgIG5ldyAoaXRlbUJ1ZmZlciArIHNpemVvZihJdGVtVHlwZSkp
IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHNo
YXJlZEJ1ZmZlciA9IG1fd3JpdGluZ0NsaWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1CdWZmZXIgfSkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIG1heEFkZGl0aW9uYWxDYXBhY2l0eUZvckl0ZW0gPSBz
aGFyZWRCdWZmZXItPnNpemUoKSArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KSAr
IGFsaWdub2YodWludDY0X3QpOworICAgICAgICAgICAgICAgIGlmIChtX3dyaXR0ZW5OdW1iZXJP
ZkJ5dGVzICsgbWF4QWRkaXRpb25hbENhcGFjaXR5Rm9ySXRlbSA+IG1fd3JpdGFibGVCdWZmZXIu
Y2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsYXN0V3JpdGFibGVCdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgICAgICAgICAgICAg
ICAgIGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0dGVu
TnVtYmVyT2ZCeXRlcywgMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0V3JpdGFibGVC
dWZmZXIuY2FwYWNpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRPbmx5QnVmZmVy
cy5hcHBlbmQoV1RGTW92ZShsYXN0V3JpdGFibGVCdWZmZXIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIobWF4QWRkaXRpb25hbENhcGFj
aXR5Rm9ySXRlbSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV93cml0
YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZEYXRhTGVu
Z3RoID0gbV93cml0YWJsZUJ1ZmZlci5kYXRhICsgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIHNp
emVvZihJdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxzaXplX3Qq
PihzdGFydE9mRGF0YUxlbmd0aClbMF0gPSBzaGFyZWRCdWZmZXItPnNpemUoKTsKKworICAgICAg
ICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gc3RhcnRPZkRhdGFMZW5ndGggKyBzaXpl
b2Yoc2l6ZV90KTsKKyAgICAgICAgICAgICAgICBzaXplX3QgcGFkZGluZyA9IChhbGlnbm9mKHVp
bnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydE9mUGFkZGluZykgJSBh
bGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90KTsKKyAgICAgICAgICAgICAgICBh
dXRvKiBzdGFydE9mRGF0YSA9IHN0YXJ0T2ZEYXRhTGVuZ3RoICsgc2l6ZW9mKHNpemVfdCkgKyBw
YWRkaW5nOworICAgICAgICAgICAgICAgIG1lbWNweShzdGFydE9mRGF0YSwgc2hhcmVkQnVmZmVy
LT5kYXRhQXNVSW50OFB0cigpLCBzaGFyZWRCdWZmZXItPnNpemUoKSk7CisKKyAgICAgICAgICAg
ICAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yo
c2l6ZV90KSArIHBhZGRpbmcgKyBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzICsgc2l6ZU9mVHlwZUFuZEl0ZW0gPiBtX3dyaXRhYmxlQnVmZmVyLmNhcGFj
aXR5KSB7CisgICAgICAgICAgICBhdXRvIGxhc3RXcml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFu
Z2UobV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICAgICAgICAgIGxhc3RXcml0YWJsZUJ1ZmZl
ci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7Cisg
ICAgICAgICAgICBpZiAobGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQorICAgICAgICAgICAg
ICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGxhc3RXcml0YWJsZUJ1ZmZlcikp
OworICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZU9m
VHlwZUFuZEl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgYXV0byogc3RhcnRPZkl0ZW0gPSAm
bV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdOworICAgICAgICBz
dGFydE9mSXRlbVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAg
ICAgbmV3IChzdGFydE9mSXRlbSArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArPSBzaXplb2Yo
SXRlbVR5cGUpICsgc2l6ZU9mSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpOworCisgICAgICAgIGlm
ICghVDo6aXNJbmxpbmVJdGVtKQorICAgICAgICAgICAgbV9ub25JbmxpbmVJdGVtc0luQWxsb2Nh
dGVkQnVmZmVycy5hcHBlbmQoeyBzdGFydE9mSXRlbSB9KTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1fd3JpdGluZ0NsaWVu
dCA9IGNsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50
KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9CisKK3ByaXZhdGU6CisgICAg
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNvbnN0IHsgcmV0dXJu
IG1fcmVhZE9ubHlCdWZmZXJzOyB9CisgICAgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlv
bjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICBJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0ciB9OworICAgIEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxscHRyIH07CisgICAgVmVj
dG9yPEl0ZW1IYW5kbGU+IG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnM7CisgICAg
VmVjdG9yPHVpbnQ4X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRs
ZXMgbV9yZWFkT25seUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZSBtX3dyaXRhYmxlQnVm
ZmVyOworICAgIHNpemVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsgMCB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTA2NDI5OWQ4ZTVk
YzYzODc0MGU3NTIxNTE3YmIwZjI5YmU1NzIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUu
Y3BwCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0
SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
Kworc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihTYXZlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKFJlc3RvcmUpOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0
dXJuIHNpemVvZihUcmFuc2xhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTToKKyAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldElubGluZUZpbGxHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xvcik7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIHJldHVybiBzaXpl
b2YoU2V0SW5saW5lU3Ryb2tlQ29sb3IpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25lc3MpOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0YXRl
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldExpbmVDYXApOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRlckxpbWl0KTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJuIHNpemVvZihD
bGVhclNoYWRvdyk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihDbGlwKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICByZXR1cm4g
c2l6ZW9mKENsaXBPdXQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAg
ICAgIHJldHVybiBzaXplb2YoQ2xpcE91dFRvUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcFBhdGgpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwVG9E
cmF3aW5nQ29tbWFuZHMpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAg
IHJldHVybiBzaXplb2YoRHJhd0dseXBocyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdJbWFnZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1RpbGVkSW1hZ2UpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4g
c2l6ZW9mKERyYXdUaWxlZFNjYWxlZEltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ltYWdlQnVmZmVyKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJh
d05hdGl2ZUltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihEcmF3UGF0dGVybik7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6
CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1JlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdMaW5lKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdMaW5lc0Zv
clRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0VsbGlw
c2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KERyYXdQYXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihEcmF3Rm9jdXNSaW5nUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdGb2N1c1JpbmdS
ZWN0cyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBzaXpl
b2YoRmlsbFJlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdp
dGhHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSb3VuZGVkUmVj
dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAg
IHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOworI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEZpbGxJbmxpbmVQYXRoKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxQYXRoKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsRWxsaXBz
ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKFB1dEltYWdlRGF0YSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlh
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKFBhaW50RnJhbWVGb3JNZWRpYSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJva2VSZWN0KTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gc2l6
ZW9mKFN0cm9rZUlubGluZVBhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tlUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJva2VFbGxpcHNlKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xlYXJSZWN0
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOworICAgIGNhc2UgSXRlbVR5cGU6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEVuZFRyYW5zcGFy
ZW5jeUxheWVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAg
ICAgIHJldHVybiBzaXplb2YoQXBwbHlTdHJva2VQYXR0ZXJuKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFwcGx5RmlsbFBhdHRl
cm4pOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisgICAgICAg
IHJldHVybiBzaXplb2YoQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgfQorfQorCitib29s
IGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93
OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgor
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBJdGVtVHlwZTo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0Ogor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxh
eWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5s
aW5lUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBp
c0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRo
OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3SW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgY2FzZSBJ
dGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAg
IGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGlu
ZVBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1UeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlNGY4NTc5YWM4NzdiYjg4M2I0OTYz
MzMyN2ZhNzhjMjMxNzFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC0wLDAg
KzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50
OF90IHsKKyAgICBTYXZlLAorICAgIFJlc3RvcmUsCisgICAgVHJhbnNsYXRlLAorICAgIFJvdGF0
ZSwKKyAgICBTY2FsZSwKKyAgICBDb25jYXRlbmF0ZUNUTSwKKyAgICBTZXRDVE0sCisgICAgU2V0
SW5saW5lRmlsbEdyYWRpZW50LAorICAgIFNldElubGluZUZpbGxDb2xvciwKKyAgICBTZXRJbmxp
bmVTdHJva2VDb2xvciwKKyAgICBTZXRTdHJva2VUaGlja25lc3MsCisgICAgU2V0U3RhdGUsCisg
ICAgU2V0TGluZUNhcCwKKyAgICBTZXRMaW5lRGFzaCwKKyAgICBTZXRMaW5lSm9pbiwKKyAgICBT
ZXRNaXRlckxpbWl0LAorICAgIENsZWFyU2hhZG93LAorICAgIENsaXAsCisgICAgQ2xpcE91dCwK
KyAgICBDbGlwT3V0VG9QYXRoLAorICAgIENsaXBQYXRoLAorICAgIENsaXBUb0RyYXdpbmdDb21t
YW5kcywKKyAgICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3VGlsZWRJbWFn
ZSwKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKKyAgICBEcmF3SW1hZ2VCdWZmZXIsCisgICAg
RHJhd05hdGl2ZUltYWdlLAorICAgIERyYXdQYXR0ZXJuLAorICAgIERyYXdSZWN0LAorICAgIERy
YXdMaW5lLAorICAgIERyYXdMaW5lc0ZvclRleHQsCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlciwKKyAgICBEcmF3RWxsaXBzZSwKKyAgICBEcmF3UGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5n
UGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRmlsbFJlY3QsCisgICAgRmlsbFJl
Y3RXaXRoQ29sb3IsCisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCisgICAgRmlsbENvbXBvc2l0
ZWRSZWN0LAorICAgIEZpbGxSb3VuZGVkUmVjdCwKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBGaWxsSW5saW5lUGF0aCwKKyNl
bmRpZgorICAgIEZpbGxQYXRoLAorICAgIEZpbGxFbGxpcHNlLAorICAgIFB1dEltYWdlRGF0YSwK
KyAgICBQYWludEZyYW1lRm9yTWVkaWEsCisgICAgU3Ryb2tlUmVjdCwKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKyAgICBTdHJva2VJbmxpbmVQYXRoLAorI2VuZGlmCisgICAgU3Ryb2tl
UGF0aCwKKyAgICBTdHJva2VFbGxpcHNlLAorICAgIENsZWFyUmVjdCwKKyAgICBCZWdpblRyYW5z
cGFyZW5jeUxheWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAorI2lmIFVTRShDRykKKyAg
ICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQg
aXRlbS4KKyAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJl
Y29yZGVkIGl0ZW0uCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9yLAorfTsKKwor
V0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlKTsKK1dFQkNP
UkVfRVhQT1JUIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJv
b2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAKaW5kZXggNDdjNzYyZTFhNjE5N2Q2YzhiOGM0NWZhOWNmZGMwNWEwM2RlZTUxYi4uNjBhZTYy
NjgxMzNmMzdlZWVlZGNiMWI1NGY1MTM0NmM1MzRhMzkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcApAQCAtNTIsMTk1ICs1MiwxNiBAQCBXVEY6OkNTdHJpbmcgSXRlbTo6
ZGVzY3JpcHRpb24oKSBjb25zdAogfQogI2VuZGlmCiAKLUl0ZW06Okl0ZW0oSXRlbVR5cGUgdHlw
ZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1JdGVtOjp+SXRlbSgpID0gZGVmYXVsdDsK
LQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgc3dp
dGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJl
c3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U2V0Q1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElu
bGluZVN0cm9rZUNvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVz
cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxD
bGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3R2x5cGhzPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZEltYWdl
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd05hdGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRp
dmVJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Jl
Y3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVz
Rm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Bh
dGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbENv
bXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKSk7Ci0j
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGlu
ZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0
ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbEVsbGlwc2U+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFBh
aW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSkpOwotI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGlu
ZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4o
aXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJv
a2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEVu
ZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxB
cHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBhdHRlcm4+
KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBpdGVtKQotewot
ICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYgKGl0ZW0u
ZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHRzIDw8ICJ1bmtub3duIjsKLSAgICAKLSAgICB0cy5lbmRHcm91cCgpOwotICAgIHJl
dHVybiB0czsKLX0KLQotRHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCi0g
ICAgOiBJdGVtKHR5cGUpCi17Ci19Ci0KLURyYXdpbmdJdGVtOjp+RHJhd2luZ0l0ZW0oKSA9IGRl
ZmF1bHQ7Ci0KLVNhdmU6OlNhdmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2F2ZSkKLXsKLX0K
LQotU2F2ZTo6flNhdmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2F2ZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2F2ZSgpOwogfQogCi1SZXN0
b3JlOjpSZXN0b3JlKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCi17Ci19Ci0KLVJl
c3RvcmU6On5SZXN0b3JlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0K
IAotVHJhbnNsYXRlOjpUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICA6IEl0ZW0oSXRl
bVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAsIG1feCh4KQotICAgICwgbV95KHkpCi17Ci19Ci0KLVRy
YW5zbGF0ZTo6flRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBUcmFuc2xhdGU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnRyYW5zbGF0
ZShtX3gsIG1feSk7CkBAIC0yNTQsMTQgKzc1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKLVJvdGF0ZTo6Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6Um90YXRlKQotICAgICwgbV9hbmdsZShhbmdsZSkKLXsKLX0KLQotUm90YXRlOjp+Um90YXRl
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUpOwpAQCAtMjc0LDE0ICs4
Nyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSb3RhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TY2FsZTo6U2NhbGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUpCi0gICAgLCBtX3Np
emUoc2l6ZSkKLXsKLX0KLQotU2NhbGU6On5TY2FsZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTY2Fs
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
c2NhbGUobV9zaXplKTsKQEAgLTI5NCwxNCArOTksNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRz
OwogfQogCi1TZXRDVE06OlNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldENUTSkKLSAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9y
bSkKLXsKLX0KLQotU2V0Q1RNOjp+U2V0Q1RNKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldENUTTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMxNCwxNCArMTExLDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLUNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
KQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1Db25jYXRlbmF0ZUNUTTo6
fkNvbmNhdGVuYXRlQ1RNKCkgPSBkZWZhdWx0OwotCiB2b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jb25jYXRD
VE0obV90cmFuc2Zvcm0pOwpAQCAtMzM1LDggKzEyNCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKIH0K
IAogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3Jh
ZGllbnQmIGdyYWRpZW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRp
ZW50KQotICAgICwgbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKKyAgICA6IG1fZGF0YShncmFkaWVu
dC5kYXRhKCkpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudC5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCiAgICAgLCBtX3NwcmVhZE1ldGhvZChncmFkaWVudC5z
cHJlYWRNZXRob2QoKSkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGljX2Nhc3Q8dWludDhf
dD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQpAQCAtMzU4LDE0ICsxNDYsOCBAQCBSZWY8R3Jh
ZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAogICAgIHJldHVy
biBncmFkaWVudDsKIH0KIAotUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gU2V0SW5saW5lRmls
bEdyYWRpZW50OjpjcmVhdGUoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChncmFkaWVudCkpOwotfQotCiBT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRz
W21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENv
dW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRN
ZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZGF0YSkKKyAgICA6IG1fZGF0YShkYXRh
KQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uKQogICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKQogICAgICwgbV9j
b2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKQEAgLTM3Nyw4ICsxNTksNiBAQCBTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENv
bG9yU3RvcENvdW50XSwgUwogICAgIH0KIH0KIAotU2V0SW5saW5lRmlsbEdyYWRpZW50Ojp+U2V0
SW5saW5lRmlsbEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGluZUZpbGxHcmFk
aWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmICht
X2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KQpAQCAtNDA0LDEzICsxODQsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
SW5saW5lRmlsbEdyYWRpZW50JikKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRJbmxpbmVG
aWxsQ29sb3I+IFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
RGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsQ29sb3IoY29s
b3JEYXRhKSk7Ci19Ci0KLVNldElubGluZUZpbGxDb2xvcjo6flNldElubGluZUZpbGxDb2xvcigp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigp
KTsKQEAgLTQyMiwxMyArMTk1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxDb2xvciYgc3RhdGUpCiAgICAgcmV0dXJu
IHRzOwogfQogCi1SZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+IFNldElubGluZVN0cm9rZUNvbG9y
OjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNldElubGluZVN0cm9rZUNvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1TZXRJbmxpbmVT
dHJva2VDb2xvcjo6flNldElubGluZVN0cm9rZUNvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNl
dElubGluZVN0cm9rZUNvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvcigpKTsKQEAgLTQ0MCwxMyArMjA2
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxT
ZXRTdHJva2VUaGlja25lc3M+IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGZsb2F0IHRoaWNr
bmVzcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdHJva2VUaGlja25lc3ModGhp
Y2tuZXNzKSk7Ci19Ci0KLVNldFN0cm9rZVRoaWNrbmVzczo6flNldFN0cm9rZVRoaWNrbmVzcygp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyht
X3RoaWNrbmVzcyk7CkBAIC00NTksMTkgKzIxOCwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkK
IH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUsIGZsYWdzKQorICAg
IDogbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCiB7CiB9CiAKIFNldFN0YXRlOjpTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGVDaGFuZ2UpCisgICAgOiBtX3N0
YXRlKHN0YXRlQ2hhbmdlKQogewogfQogCi1TZXRTdGF0ZTo6flNldFN0YXRlKCkgPSBkZWZhdWx0
OwotCiB2b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKQEAgLTQ4MywxNCArMjM4LDYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRl
JiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVDYXA6OlNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkKLSAgICAsIG1f
bGluZUNhcChsaW5lQ2FwKQotewotfQotCi1TZXRMaW5lQ2FwOjp+U2V0TGluZUNhcCgpID0gZGVm
YXVsdDsKLQogdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7CkBAIC01MDIsMTUg
KzI0OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZURh
c2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zm
c2V0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCi0gICAgLCBtX2Rhc2hBcnJh
eShkYXNoQXJyYXkpCi0gICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLXsKLX0KLQotU2V0
TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lRGFzaDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7CkBAIC01MjMsMTQgKzI2MSw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRMaW5lSm9pbjo6U2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbikKLSAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCi17Ci19Ci0KLVNldExpbmVKb2luOjp+
U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVKb2luKG1f
bGluZUpvaW4pOwpAQCAtNTQyLDE0ICsyNzIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2luKQogICAgIHJl
dHVybiB0czsKIH0KIAotU2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKLSAgICAsIG1fbWl0ZXJM
aW1pdChtaXRlckxpbWl0KQotewotfQotCi1TZXRNaXRlckxpbWl0Ojp+U2V0TWl0ZXJMaW1pdCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1p
dCk7CkBAIC01NjEsMjYgKzI4MywxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKICAgICByZXR1
cm4gdHM7CiB9CiAKLUNsZWFyU2hhZG93OjpDbGVhclNoYWRvdygpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpDbGVhclNoYWRvdykKLXsKLX0KLQotQ2xlYXJTaGFkb3c6On5DbGVhclNoYWRvdygpID0g
ZGVmYXVsdDsKLQogdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKIH0KIAotQ2xpcDo6Q2xp
cChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAg
ICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXA6On5DbGlwKCkgPSBkZWZhdWx0OwotCiB2b2lk
IENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTU5MiwxNCArMjk5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1DbGlwT3V0OjpDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotQ2xp
cE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3Qp
OwpAQCAtNjExLDE0ICszMTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNs
aXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotQ2xp
cE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dFRv
UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNjMwLDE1ICszMjEsNiBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0aCYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBQYXRoOjpDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQotICAg
ICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotewotfQotCi1DbGlw
UGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBQYXRoOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwUGF0aChtX3Bh
dGgsIG1fd2luZFJ1bGUpOwpAQCAtNjUxLDE2ICszMzMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFBhdGgmIGl0ZW0pCiAgICAgcmV0
dXJuIHRzOwogfQogCi1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERp
c3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAs
IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotICAgICwgbV9kcmF3aW5nQ29tbWFuZHMoV1RGTW92
ZShkcmF3aW5nQ29tbWFuZHMpKQotewotfQotCi1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6On5DbGlw
VG9EcmF3aW5nQ29tbWFuZHMoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobV9kZXN0aW5hdGlvbiwgbV9jb2xvclNwYWNlLCBbJl0g
KEdyYXBoaWNzQ29udGV4dCYgY2xpcHBpbmdDb250ZXh0KSB7CkBAIC02NzMsMTMgKzM0NSwxMSBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzJiBpdGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdGlu
YXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3It
c3BhY2UiLCBpdGVtLmNvbG9yU3BhY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3aW5n
LWNvbW1hbmRzLWNvdW50IiwgaXRlbS5kcmF3aW5nQ29tbWFuZHMoKS5pdGVtQ291bnQoKSk7CiAg
ICAgcmV0dXJuIHRzOwogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhC
dWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5j
aG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9u
dCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAg
ICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBocykpCiAgICAgLCBtX2FkdmFuY2VzKFdURk1vdmUo
YWR2YW5jZXMpKQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKQEAgLTY4OSw4ICsz
NTksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLAogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZs
b2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29u
c3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0
PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQogICAgICwg
bV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUpCiB7CkBAIC03MDMsMTkgKzM3MiwxNyBAQCBE
cmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgRwogICAgIGNvbXB1dGVCb3VuZHMoKTsKIH0KIAotRHJhd0ds
eXBoczo6fkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7Ci0KIGlubGluZSBHbHlwaEJ1ZmZlciBEcmF3
R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBy
ZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgbV9mb250LmdldCgpLCBtX2FkdmFuY2Vz
W2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOworICAgICAgICByZXN1bHQuYWRkKG1fZ2x5cGhz
W2ldLCAqbV9mb250LCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZHJhd0dseXBocyhtX2ZvbnQsIGdl
bmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBt
X3Ntb290aGluZ01vZGUpOworICAgIGNvbnRleHQuZHJhd0dseXBocygqbV9mb250LCBnZW5lcmF0
ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9v
dGhpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKQEAgLTcz
NSwxNCArNDAyLDggQEAgdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKICAgICB9CiB9
CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBoczo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ib3VuZHM7Ci19Ci0KIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhz
JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHko
ImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwpAQCAtNzUxLDE3ICs0MTIsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0dseXBocyYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZTo6RHJhd0ltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2UpCi0gICAgLCBtX2lt
YWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291
cmNlKHNvdXJjZSkKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09w
dGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZTo6fkRyYXdJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9p
ZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJj
ZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjksMjYgKzQxOSwxMiBAQCB2b2lkIERy
YXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLURyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1f
dGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBtX3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1faW1h
Z2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdUaWxl
ZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1RpbGVkSW1h
Z2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBt
X3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzk2LDcg
KzQzMiw2IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIs
IGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVt
LnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGlu
YXRpb24oKSk7CkBAIC04MDUsMjAgKzQ0MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxl
U2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAs
IG1fdlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRp
bmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6fkRyYXdUaWxlZFNjYWxl
ZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJ
bWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVG
YWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtODI2
LDI0ICs0NDcsMTIgQEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCiB7Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNv
dXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJl
Y3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdl
QnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCi0gICAgLCBtX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0g
ICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKLSAgICAsIG1fc3JjUmVjdChzcmNSZWN0
KQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZUJ1ZmZlcjo6fkRy
YXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkg
dGhlIGRlbGVnYXRlLgpAQCAtODUyLDcgKzQ2MSw2IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjph
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRlbnRpZmllciIsIGl0ZW0ucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBp
dGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVz
dGluYXRpb25SZWN0KCkpOwpAQCAtODYwLDggKzQ2OCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2VCdWZmZXImIGl0ZW0pCiB9
CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
KQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2lt
YWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKICAg
ICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY5LDggKzQ3Niw2IEBAIERyYXdOYXRpdmVJbWFn
ZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJbWFnZTo6fkRyYXdOYXRpdmVJbWFnZSgpID0g
ZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBt
X2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3QsIG1fc3JjUmVjdCwgbV9vcHRpb25zKTsKQEAg
LTg3OCw3ICs0ODMsNiBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAg
bW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3Vy
Y2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9u
UmVjdCgpKTsKQEAgLTg4Niw4ICs0OTAsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogfQogCiBEcmF3
UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAg
ICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0dGVyblRyYW5z
Zm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RSZWN0KQpAQCAtODk3LDggKzUwMCw2IEBAIERyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjCiB7CiB9
CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1Bh
dHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3Qs
IG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29wdGlvbnMpOwpAQCAt
OTA2LDcgKzUwNyw2IEBAIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIs
IGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRyYW5zZm9ybSIs
IGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInRpbGUtcmVj
dCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTYsMTUgKzUxNiw2IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0OjpEcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9ib3JkZXJUaGlja25lc3Mo
Ym9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3UmVjdDo6fkRyYXdSZWN0KCkgPSBkZWZhdWx0
OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKQEAg
LTkzMiwyMSArNTIzLDExIEBAIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0u
Ym9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0xpbmU6OkRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICwgbV9wb2ludDEocG9p
bnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQotewotfQotCi1EcmF3TGluZTo6fkRyYXdMaW5l
KCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZHM7
CkBAIC05NjEsMTUgKzU0MiwxMyBAQCB2b2lkIERyYXdMaW5lOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQt
MSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0u
cG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNp
emUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2Nh
dGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQogICAgICwgbV9sb2Nh
bEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fd2lkdGhzKHdpZHRocykKICAgICAsIG1fdGhp
Y2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3OCw4ICs1NTcsNiBAQCBEcmF3TGluZXNGb3JUZXh0OjpE
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZs
b2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVm
YXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1f
dGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7CkBAIC05OTks
NyArNTc2LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwpAQCAtMTAxMSwx
NSArNTg3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLSAgICAsIG1fcmVj
dChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkKLXsKLX0KLQotRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3JlY3Qs
IG1fc3R5bGUpOwpAQCAtMTAzMiwxOSArNTk5LDEwIEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0VsbGlwc2U6OkRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1EcmF3RWxsaXBzZTo6fkRy
YXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdFbGxpcHNlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3RWxsaXBzZShtX3Jl
Y3QpOwpAQCAtMTA1NiwxNCArNjE0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogICAgIHJldHVybiB0czsK
IH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRHJh
d1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogI2lmIFVTRShDRykKQEAgLTEwNzMsMjQg
KzYyMywxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVtKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKIHsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5
KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgor
ICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQotICAgICwgbV9wYXRoKHBhdGgp
Ci0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICwgbV9j
b2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3VzUmluZ1BhdGg6On5EcmF3Rm9jdXNSaW5nUGF0
aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3Bh
dGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExMDUsNyArNjQzLDYgQEAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAvLyAgICB0cy5kdW1wUHJv
cGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0
aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExMTQsMTYgKzY1MSwx
MyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAKIERyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0Zv
Y3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAsIG1fcmVjdHMocmVjdHMpCisgICAgOiBt
X3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLURyYXdGb2N1c1JpbmdSZWN0czo6fkRy
YXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRy
YXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtMTE0
MCw3ICs2NzQsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29ucwogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJv
ZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExNDgsMTQgKzY4MSw2IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVj
dHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdDo6RmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQot
ICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxSZWN0Ojp+RmlsbFJlY3QoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7CkBAIC0xMTYzLDIwICs2ODgsMTAg
QEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAg
cmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAs
IG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aENvbG9yOjp+RmlsbFJlY3RXaXRo
Q29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVj
dCwgbV9jb2xvcik7CkBAIC0xMTg0LDIxICs2OTksMTcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xv
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoQ29sb3Im
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBG
aWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBtX3JlY3QocmVjdCkKKyAgICA6IG1fcmVjdChy
ZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAotRmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVj
dFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKQEAgLTEyMDYs
MjMgKzcxNywxMSBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1F
OiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9j
b2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUp
Ci17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6fkZpbGxDb21wb3NpdGVkUmVjdCgpID0gZGVm
YXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwg
bV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIzMCw3ICs3MjksNiBAQCB2b2lkIEZpbGxDb21wb3Np
dGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0
ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7CkBA
IC0xMjM4LDE2ICs3MzYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogICAgIHJldHVybiB0czsK
IH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAgICAsIG1fcmVjdChy
ZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkK
LXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0Owot
CiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9i
bGVuZE1vZGUpOwpAQCAtMTI1NSwyMyArNzQzLDEyIEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
YmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fcm91bmRlZEhvbGVSZWN0
KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVj
dCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtMTI3OSw3ICs3NTYsNiBAQCB2b2lk
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0
IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIs
IGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg4LDE0ICs3NjQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUm
IGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxJbmxpbmVQYXRoOjpG
aWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhE
YXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkgPSBkZWZhdWx0
OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOwpAQCAtMTMwMywyMSArNzcx
LDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRl
bS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewot
fQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxs
UGF0aChtX3BhdGgpOwpAQCAtMTMyNSwxOSArNzg0LDEwIEBAIHZvaWQgRmlsbFBhdGg6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbEVs
bGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1G
aWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxFbGxpcHNl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5m
aWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NSwxNCArNzk1LDEyIEBAIHZvaWQgRmlsbEVsbGlw
c2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsK
IH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0g
ICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwg
bV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoaW1hZ2VEYXRhLmRlZXBD
bG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhl
IHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KICAgICAsIG1faW5wdXRGb3JtYXQoaW5wdXRG
b3JtYXQpCkBAIC0xMzYxLDggKzgwOSw3IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYKIH0KIAog
UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZv
cm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0gICAgLCBt
X3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0
UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFnZURhdGEpKQog
ICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNzAsOCArODE3LDYgQEAgUHV0
SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1QdXRJbWFnZURhdGE6On5QdXRJbWFnZURhdGEo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAg
LTEzODAsNyArODI1LDYgQEAgdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0
IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNp
emUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNS
ZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwpAQCAtMTM4OSwzMiArODMzLDEyIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0
ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZy
YW1lRm9yTWVkaWE6OmNyZWF0ZShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JN
ZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+
IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShpZGVudGlmaWVyLCBkZXN0aW5hdGlvbikpOwotfQot
CiBQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihwbGF5ZXIuaWRl
bnRpZmllcigpKQorICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCiAgICAg
LCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQogCi1QYWludEZyYW1lRm9yTWVkaWE6
OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAs
IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLVBhaW50RnJhbWVGb3JNZWRpYTo6
flBhaW50RnJhbWVGb3JNZWRpYSgpID0gZGVmYXVsdDsKLQogdm9pZCBQYWludEZyYW1lRm9yTWVk
aWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhh
bmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMTQyMywyMCArODQ3LDEwIEBAIHZvaWQgUGFpbnRG
cmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGFpbnRGcmFtZUZvck1l
ZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0aW5hdGlvbiIsIGl0ZW0uZGVzdGluYXRp
b24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJva2VSZWN0OjpTdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fbGluZVdpZHRo
KGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVjdDo6flN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7
Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OwpA
QCAtMTQ1MSw3ICs4NjUsNiBAQCB2b2lkIFN0cm9rZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5s
aW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpAQCAtMTQ3NCwxOSArODg3LDEwIEBAIHZvaWQg
U3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0
aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAg
LCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tlRWxsaXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9
IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xNTAzLDcgKzkw
Nyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0u
cmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBAIC0xNTI3LDM3ICs5MzAsMTIgQEAgdm9pZCBT
dHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJv
a2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0
aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19
Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiAj
ZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLVN0cm9rZVBhdGg6OlN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQ
YXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLVN0cm9rZVBhdGg6On5TdHJva2VQYXRo
KCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQotICAgICwgbV9yZWN0
KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKLQogdm9p
ZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpAQCAtMTU2NSwxOSArOTQzLDEwIEBAIHZvaWQg
Q2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3Qm
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJu
IHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotewotfQotCi1CZWdpblRyYW5z
cGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9p
ZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7
CkBAIC0xNTg1LDU3ICs5NTQsMjggQEAgdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkpOwogICAgIHJl
dHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLXsK
LX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVm
YXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
IH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tlUGF0dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJu
KCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikKLXsKLX0KLQotQXBw
bHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiB2b2lk
IEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLUFwcGx5RmlsbFBh
dHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxs
UGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0dGVybjo6fkFwcGx5RmlsbFBhdHRlcm4oKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVybigpOwogfQog
I2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKLXsKLX0KLQotQXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxl
RmFjdG9yKTsKQEAgLTE2NDcsNyArOTg3LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0KICAg
ICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7CkBAIC0xNzE4
LDE3MiArMTA1OCwxNzAgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRlbSkKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKLSAg
ICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKICAgICB0cyA8PCBpdGVtLnR5cGUo
KTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3Ig
YWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkg
ewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5s
aW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmls
bENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVT
dHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRT
dGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGlu
ZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFBhdGg+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0dseXBo
cz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdUaWxlZEltYWdlPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxE
cmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2VC
dWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJ
bWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdlPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0dGVybj4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JU
ZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3Vz
UmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVj
dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpOwogICAgICAgICBicmVh
azsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
SW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJl
YWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUGF0
aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9rZVJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpOwogICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlRWxsaXBzZT4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGVhclJlY3Q+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKTsKICAgICAgICAg
YnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGYwMTViZTVlODY2MDZlY2MyZjZjZTg1N2MxZjcx
MTY3Njk0ZmU4ZTMuLjJhNDYyNmU4ZWIzMTUwZDgxODU0Y2ZiMmFlMmFiNjNlMzJjMGE3NDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtNTEsMzIwICs1MSwxNjMgQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1j
bGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNhdmUgewogcHVibGljOgot
ICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdpbmdJdGVtKEl0ZW1UeXBlKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNhdmU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4
dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJvb2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KLQotICAgIC8vIFJldHVybiBib3Vu
ZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAv
LyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhl
IHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotICAg
IC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJbWFnZURhdGEpIG9wZXJhdGUgaW4gZ2xvYmFs
IGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMsIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotICAg
IC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4gdmFsdWUgbmVlZHMgdG8gaW5jbHVkZSB0aGUg
ZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywgZXRjLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
LQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBi
YXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBhbmQgdHJhbnNmb3JtcyBpbnRvIGFjY291
bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsK
IAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFJlc3RvcmUgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNhdmUoKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2F2ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2F2ZSgpOwotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+IFNhdmU6OmRlY29kZShEZWNvZGVyJikKLXsK
LSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVzdG9y
ZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlc3RvcmUp
OwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc3RvcmUoKTsKLQotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFJlc3RvcmUo
KTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19
OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBSZXN0b3JlOjplbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gUmVzdG9y
ZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICBUcmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBtX3goeCkKKyAgICAgICAgLCBtX3koeSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zbGF0ZSh4LCB5KSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VHJhbnNsYXRlKCk7Ci0KICAgICBm
bG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0IG1feSB7IDAgfTsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7Ci0gICAgZW5jb2RlciA8PCBtX3k7Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gVHJhbnNs
YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4geDsK
LSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAgZGVjb2RlciA+PiB5OwotICAgIGlm
ICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBUcmFuc2xh
dGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7Citj
bGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRp
YW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Um90YXRlKCk7Ci0K
ICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFJvdGF0ZT4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUm90YXRlKGZsb2F0IGFu
Z2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBmbG9hdCBtX2FuZ2xlOyAv
LyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiBy
YWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgUm90YXRlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fYW5nbGU7Ci19
Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Um90YXRlPj4gUm90YXRl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gYW5nbGU7
Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBpZiAoIWFuZ2xlKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJvdGF0ZTo6Y3JlYXRlKCphbmdsZSk7Ci19Ci0K
LWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworY2xhc3MgU2NhbGUgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9zaXplOwogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2NhbGU6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zaXplOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxlPj4gU2NhbGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0U2l6ZT4gc2NhbGU7Ci0gICAgZGVjb2RlciA+
PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNjYWxlKTsKLX0KLQotY2xhc3MgU2V0Q1RNIDog
cHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNl
dENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RNOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0Q1RNKG1hdHJpeCkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldENUTSgpOwotCiAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0
Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldENUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRDVE0+PiBTZXRDVE06OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3Jt
OwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldENUTTo6Y3JlYXRlKCp0cmFu
c2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RN
PiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ29uY2F0ZW5hdGVDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0o
dHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5h
dGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q29u
Y2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNhdGVuYXRlQ1RNPj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDb25jYXRlbmF0ZUNUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0ZW5hdGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3Jt
PiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zv
cm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ29uY2F0ZW5h
dGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRp
ZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IHsKIHB1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7
CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdy
YWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKLQot
ICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVudCgpOwotCi0gICAgUmVmPEdyYWRpZW50
PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRl
KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNb
bWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChv
ZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgc3ByZWFk
TWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAgIH0KLQorICAgIFNldElubGluZUZpbGxHcmFk
aWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNldElubGluZUZpbGxH
cmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4g
Y29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmLAogICAgICAg
ICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3Jh
ZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpOwogCi0gICAgU2V0SW5s
aW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxp
bmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9v
ZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yc1tt
YXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGllbnQ6OkRhdGEgbV9kYXRhOwpAQCAtMzczLDE5
OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWludDhfdCBtX2NvbG9yU3RvcENvdW50IHsgMCB9
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0SW5saW5lRmlsbEdyYWRp
ZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
Y29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BD
b3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgbV9vZmZzZXRzW2ldOwotICAgICAgICBl
bmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvcnNbaV0gfS52YWx1ZTsKLSAgICB9
Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAgZW5jb2RlciA8PCBtX2dyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8IG1fc3ByZWFkTWV0aG9kOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+
IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBjb2xvclN0
b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BDb3VudCA+IG1heENvbG9yU3RvcENvdW50KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xv
clN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50
XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAqY29sb3JTdG9wQ291bnQ7ICsraSkgewot
ICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0OwotICAgICAgICBkZWNvZGVyID4+IG9mZnNl
dDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBjb2xvcjsKLSAgICAgICAgZGVjb2RlciA+
PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0gYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7
ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tpXSA9ICpvZmZzZXQ7Ci0gICAgfQotCi0gICAg
T3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7Ci0gICAgZGVjb2RlciA+PiBkYXRhOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAgIGRlY29k
ZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAgIGlmICghZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0
aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNwcmVhZE1ldGhvZDsKLSAgICBkZWNvZGVyID4+
IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVhZE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRl
KG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sICpz
cHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkgfTsKLX0KLQotY2xhc3MgU2V0SW5saW5lRmls
bENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1Ymxp
YzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZUZpbGxDb2xvcj4gY3Jl
YXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5s
aW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9j
b2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotICAg
ICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcikKLSAgICAgICAgLCBtX2Nv
bG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAg
IHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBTUkdC
QTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmls
bENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAq
dmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxpbmVTdHJva2VDb2xvciA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9rZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhf
dD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3Io
KTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1wcml2YXRlOgogICAgIFNl
dElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0
YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
Ci0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7Ci19OworICAgIENvbG9yIGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEg
fS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZVN0cm9rZUNvbG9y
Pj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAgICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlm
ICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNldElubGluZVN0
cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7
Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOworfTsKIAotY2xh
c3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0U3Ryb2tlVGhp
Y2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldFN0cm9r
ZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNrbmVzcyk7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3MoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgZmxvYXQgdGhpY2tuZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0cm9rZVRoaWNrbmVzcz4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVz
cykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3MpCi0gICAgICAg
ICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAgICAgICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVz
cykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhpY2tuZXNzIHsgMCB9OwotfTsKKyAgICBmbG9h
dCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90aGlja25lc3M7Ci19CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+PiBTZXRTdHJva2VUaGlja25lc3M6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiB0aGlja25l
c3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7Ci0gICAgaWYgKCF0aGlja25lc3MpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRl
KCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsK
K307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0U3RhdGUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3Rh
dGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlQ2hhbmdlKSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0U3Rh
dGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAgCiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogCkBAIC01NzMs
MTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhX
VEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3RhdGU+IGRlY29k
ZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZTsKIH07CiAKQEAgLTY2OSw3
ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNl
dFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFNldFN0YXRlPiBTZXRT
dGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8R3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwogICAgIGRlY29kZXIg
Pj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYyMCw1NSBAQCBPcHRpb25hbDxSZWY8U2V0U3Rh
dGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNldFN0YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2Up
OworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07CiB9CiAKLWNsYXNzIFNldExpbmVDYXAgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2FwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGluZUNhcCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAoKTsKLSAgICAKICAgICBMaW5lQ2FwIGxpbmVD
YXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVDYXAoTGluZUNhcCk7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIExpbmVDYXAgbV9saW5l
Q2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGluZUNhcDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+
IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExp
bmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+PiBsaW5lQ2FwOwotICAgIGlmICghbGluZUNh
cCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRMaW5lQ2Fw
OjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVE
YXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAg
IFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0
KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJheSkKKyAgICAgICAgLCBtX2Rhc2hPZmZz
ZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExp
bmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0KICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZURhc2g+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQg
ZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFNldExpbmVEYXNo
PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIERhc2hBcnJheSBtX2Rhc2hBcnJh
eTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9OwpAQCAtOTcwLDcgKzY4MSw3IEBAIHZvaWQg
U2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U2V0TGluZURhc2g+IFNldExpbmVE
YXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxEYXNoQXJyYXk+
IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKQEAgLTk4MiwyMTUgKzY5Mywx
MzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9mZnNldCkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5lRGFzaDo6Y3JlYXRlKCpkYXNoQXJyYXksICpk
YXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQgfX07CiB9
CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TGluZUpvaW4g
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBs
aW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKKyAgICAgICAgOiBtX2xpbmVK
b2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGlu
ZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5T
ZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2luKExpbmVKb2luKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGluZUpvaW4gbV9saW5lSm9pbjsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVKb2luOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fbGluZUpvaW47Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5l
Sm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TGluZUpvaW4+
IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGluZUpvaW47Ci0gICAgaWYgKCFsaW5lSm9pbikK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRMaW5lSm9pbjo6
Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgOiBwdWJsaWMgSXRl
bSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1p
dGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJM
aW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRNaXRlckxpbWl0KCk7Ci0KICAgICBmbG9hdCBt
aXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRNaXRlckxpbWl0Pj4gZGVj
b2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRNaXRlckxp
bWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAg
ZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
U2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1pdGVyTGltaXQ6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBtaXRlckxpbWl0OwotICAgIGRlY29kZXIg
Pj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVyTGltaXQpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKCptaXRlckxpbWl0
KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGVhclNo
YWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhclNoYWRvdz4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyU2hhZG93KTsKLSAgICB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclNoYWRvdygpOwotCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGVhclNoYWRvdygpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6
ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBDbGVhclNoYWRvdzo6Y3JlYXRlKCk7Ci19
Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5nSXRlbT8KLWNsYXNzIENsaXAgOiBwdWJsaWMg
SXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPworY2xhc3MgQ2xpcCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xp
cDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlw
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsaXA6OmNyZWF0
ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlw
T3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3Qo
cmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXQoKTsKKyAgICBj
b25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZs
b2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAogcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGlwT3V0OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0Pj4gQ2xpcE91dDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcE91dDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQot
Y2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBPdXRUb1BhdGgg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBh
dGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgo
V1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBP
dXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNs
aXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAg
ICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDbGlwT3V0VG9QYXRo
PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBP
dXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAg
IGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAwLDM3ICs4MzQsNDcgQEAgdm9pZCBDbGlwT3V0
VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxDbGlwT3V0VG9QYXRoPiBDbGlwT3V0
VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBw
YXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xpcE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRo
KTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIENsaXBQYXRo
IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBQ
YXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xp
cFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgICAgICA6IG1fcGF0aChX
VEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwUGF0aCgpOworICAgIENsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgICAgICA6IG1fcGF0aChwYXRoKQor
ICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAg
IFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBAIC0xMjQyLDcgKzg4Niw3IEBAIHZvaWQgQ2xp
cFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBhdGg+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4g
cGF0aDsKQEAgLTEyNTQsMzAgKzg5OCwzNSBAQCBPcHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlw
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCF3aW5kUnVsZSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBDbGlwUGF0aDo6Y3JlYXRlKCpw
YXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSwgKndpbmRSdWxl
IH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgOiBwdWJsaWMgSXRlbSB7Citj
bGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
KworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQor
ICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwgbV9jb2xvclNw
YWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9kcmF3aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3
aW5nQ29tbWFuZHMpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdD
b21tYW5kcykpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKCk7Ci0KICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkcmF3aW5n
Q29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdDb21tYW5kczsgfQogCiAgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdp
bmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAg
IEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwog
ICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1hbmRzOwpAQCAtMTI4OCwxMSArOTM3LDExIEBA
IHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGluYXRpb247CiAgICAgZW5jb2RlciA8PCBtX2Nv
bG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2RyYXdpbmdDb21tYW5kczsKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBpbi1tZW1vcnkgZGlzcGxheSBsaXN0cy4KIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29t
bWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVzdGlu
YXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5hdGlvbjsKQEAgLTEzMDQsMjcgKzk1MywxNiBA
QCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIGlmICghY29sb3JTcGFjZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkcmF3aW5n
Q29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgaWYgKCFkcmF3
aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwg
V1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdh
eSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCisgICAgRGlzcGxheUxpc3QgZHJh
d2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAqZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBX
VEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9CiAKLWNsYXNzIERyYXdHbHlwaHMgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0dseXBocyB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21v
b3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRl
KGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhz
LCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0
UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250LCBXVEZNb3Zl
KGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkp
OwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdHbHlwaHMoKTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdHbHlw
aHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0
IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsg
fQogCkBAIC0xMzMzLDIxICs5NzEsMjEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxHbHlw
aEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2dseXBoczsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ds
eXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6CiAg
ICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdH
bHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3Rv
cjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAorcHJpdmF0ZToKKyAg
ICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBHbHlwaEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVm
ZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4gbV9mb250OworICAgIFJlZlB0cjxGb250PiBt
X2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4gbV9nbHlwaHM7CiAgICAg
VmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVj
dCBtX2JvdW5kczsKQEAgLTEzNTgsNyArOTk2LDcgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+CiB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogewotICAgIGVuY29kZXIgPDwgbV9mb250OworICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9m
b250KTsKICAgICBlbmNvZGVyIDw8IG1fZ2x5cGhzOwogICAgIGVuY29kZXIgPDwgbV9hZHZhbmNl
czsKICAgICBlbmNvZGVyIDw8IG1fbG9jYWxBbmNob3I7CkBAIC0xMzY2LDcgKzEwMDQsNyBAQCB2
b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBEcmF3R2x5cGhz
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdHbHlwaHM+IERyYXdHbHlw
aHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFJlZjxGb250Pj4g
Zm9udDsKICAgICBkZWNvZGVyID4+IGZvbnQ7CkBAIC0xMzk2LDMyICsxMDM0LDM1IEBAIE9wdGlv
bmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdHbHlwaHM6OmNyZWF0ZShmb250LT5nZXQoKSwgV1RGTW92ZSgqZ2x5
cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAqbG9jYWxBbmNob3IsICpzbW9vdGhpbmdNb2RlKTsK
KyAgICByZXR1cm4ge3sgZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFk
dmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSB9fTsKIH0KLQotY2xhc3MgRHJh
d0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdJbWFnZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3SW1hZ2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAg
ICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50
aW5nT3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdJ
bWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFn
ZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPERyYXdJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdJbWFnZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJs
ZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2Ug
dGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBt
dXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3Nv
dXJjZTsKQEAgLTE0NDEsNyArMTA4Miw3IEBAIHZvaWQgRHJhd0ltYWdlOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8RHJhd0ltYWdlPiBEcmF3SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGlt
YWdlSGFuZGxlOwpAQCAtMTQ2MywxNyArMTEwNCwxNCBAQCBPcHRpb25hbDxSZWY8RHJhd0ltYWdl
Pj4gRHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWltYWdlUGFp
bnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IERyYXdJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNv
dXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxl
LT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07
CiB9CiAKLWNsYXNzIERyYXdUaWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IERyYXdUaWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdUaWxlZEltYWdl
PiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVk
SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkRyYXdUaWxlZEltYWdlKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UG9pbnQgc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2U7IH0KQEAgLTE0ODIsMTYgKzExMjAsMjUgQEAgcHVibGljOgogICAgIEZsb2F0U2l6
ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KICAgICBGbG9hdFNpemUg
c3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1hZ2U+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwgbV9zb3Vy
Y2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCisgICAgICAgICwgbV9z
cGFjaW5nKHNwYWNpbmcpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBh
aW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgfQogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RHJhd1RpbGVkSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0
YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1
c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBi
ZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UG9pbnQg
bV9zb3VyY2U7CkBAIC0xNTE0LDcgKzExNjEsNyBAQCB2b2lkIERyYXdUaWxlZEltYWdlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBEcmF3VGlsZWRJbWFnZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGlt
YWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xNTQ2LDMyICsxMTkz
LDM5IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IERyYXdUaWxlZEltYWdlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdUaWxlZEltYWdlOjpj
cmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNp
emUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1h
Z2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNp
bmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd1RpbGVkU2NhbGVk
SW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2Ug
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0ZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAg
ICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwgbV9zb3VyY2Uoc291
cmNlKQorICAgICAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKKyAgICAg
ICAgLCBtX2hSdWxlKGhSdWxlKQorICAgICAgICAsIG1fdlJ1bGUodlJ1bGUpCisgICAgICAgICwg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3
VGlsZWRTY2FsZWRJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZFNjYWxl
ZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToK
ICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2Vz
IGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBo
YXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxv
YXRSZWN0IG1fc291cmNlOwpAQCAtMTU5Niw3ICsxMjUwLDcgQEAgdm9pZCBEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGls
ZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3VGls
ZWRTY2FsZWRJbWFnZT4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNv
ZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTYzMSwzMyArMTI4NSwzNyBAQCBPcHRpb25hbDxSZWY8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0
ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVG
YWN0b3IsIGhSdWxlLCB2UnVsZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4g
e3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xh
c3MgRHJhd0ltYWdlQnVmZmVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdJbWFn
ZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2VCdWZmZXI+IGNyZWF0
ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorICAgICAgICA6IG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBt
X2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAgICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkK
KyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsKLQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Jl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KICAgICBJbWFnZVBhaW50aW5nT3B0
aW9ucyBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdJbWFn
ZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ltYWdlQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYp
OwogCitwcml2YXRlOgogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBtX3JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CiAg
ICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKQEAgLTE2NzQsNyArMTMzMiw3IEBAIHZvaWQgRHJhd0lt
YWdlQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VC
dWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlQnVmZmVy
PiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwpAQCAtMTY5
NiwzMSArMTM1NCwyOSBAQCBPcHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdl
QnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIW9wdGlvbnMpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ltYWdlQnVmZmVyOjpj
cmVhdGUoKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKmRlc3RpbmF0aW9uLCAqc291cmNl
LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICpyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
ICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdOYXRp
dmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3TmF0aXZlSW1hZ2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd05hdGl2ZUltYWdlPiBjcmVhdGUoY29uc3QgTmF0
aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd05hdGl2ZUlt
YWdlKCk7Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0
OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb25SZWN0OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQorICAgIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlv
blJlY3Q7IH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2Uo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IGRlY29k
ZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAg
ICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0
OwpAQCAtMTczOSw3ICsxMzk1LDcgQEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitPcHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IERyYXdOYXRpdmVJbWFnZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8TmF0aXZlSW1hZ2VQdHI+IGlt
YWdlOwogICAgIGRlY29kZXIgPj4gaW1hZ2U7CkBAIC0xNzY2LDE3ICsxNDIyLDE2IEBAIE9wdGlv
bmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiBEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSgqaW1hZ2UsICppbWFnZVNp
emUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7
ICppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25z
IH19OwogfQogCi1jbGFzcyBEcmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBEcmF3UGF0dGVybiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3Jl
YXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7Ci0gICAgfQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdHRlcm47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4o
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9CkBAIC0xNzg1LDE2ICsxNDQwLDE1IEBAIHB1
YmxpYzoKICAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQog
ICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVy
bj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJh
d1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdHRlcm4+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZh
dGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGlt
YWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRu
J3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFu
c2Zvcm07CiAgICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CkBAIC0xODE5LDcgKzE0NzMsNyBAQCB2
b2lkIERyYXdQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0
ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXR0ZXJuPiBEcmF3
UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VI
YW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xODU2
LDE4MiArMTUxMCwxMDAgQEAgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFn
ZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9y
bSwgKnBoYXNlLCAqc3BhY2luZywgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5k
bGUtPmltYWdlLCAqZGVzdGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpw
aGFzZSwgKnNwYWNpbmcsICpvcHRpb25zIH19OwogfQogCi0vLyBJcyBEcmF3aW5nSXRlbSBiZWNh
dXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUg
Y2xpcCBib3VuZHMuCi1jbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK2NsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsg
Ly8gSXMgZHJhd2luZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBs
YXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KKworICAgIEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBtX29wYWNpdHkob3BhY2l0eSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X29wYWNpdHk7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0
IG1fb3BhY2l0eTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9vcGFjaXR5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsK
LSAgICBkZWNvZGVyID4+IG9wYWNpdHk7Ci0gICAgaWYgKCFvcGFjaXR5KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNy
ZWF0ZSgqb3BhY2l0eSk7Ci19Ci0KLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gZGVj
b2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBFbmRUcmFuc3Bh
cmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXll
cjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gRW5kVHJhbnNwYXJlbmN5TGF5
ZXI6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3UmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1JlY3Q7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1JlY3QoRmxvYXRS
ZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBtX3JlY3QocmVjdCkK
KyAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3Mp
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UmVjdCgpOwotCiAg
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBi
b3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1JlY3Q+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZh
dGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsK
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNv
ZGVyIDw8IG1fYm9yZGVyVGhpY2tuZXNzOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gRHJhd1JlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7
Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0
aW9uYWw8ZmxvYXQ+IGJvcmRlclRoaWNrbmVzczsKLSAgICBkZWNvZGVyID4+IGJvcmRlclRoaWNr
bmVzczsKLSAgICBpZiAoIWJvcmRlclRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBEcmF3UmVjdDo6Y3JlYXRlKCpyZWN0LCAqYm9yZGVyVGhpY2tu
ZXNzKTsKLX0KLQotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RHJhd0xpbmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdMaW5lOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdMaW5lKEZsb2F0
UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikKKyAgICAgICAgOiBtX3BvaW50MShwb2lu
dDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZSgpOwotCiAgICAgRmxvYXRQb2ludCBwb2ludDEo
KSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQogICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29u
c3QgeyByZXR1cm4gbV9wb2ludDI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZs
b2F0UG9pbnQgbV9wb2ludDE7CiAgICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdMaW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQxOwotICAgIGVuY29kZXIgPDwgbV9w
b2ludDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0xp
bmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
RmxvYXRQb2ludD4gcG9pbnQxOwotICAgIGRlY29kZXIgPj4gcG9pbnQxOwotICAgIGlmICghcG9p
bnQxKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRQ
b2ludD4gcG9pbnQyOwotICAgIGRlY29kZXIgPj4gcG9pbnQyOwotICAgIGlmICghcG9pbnQyKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIERyYXdMaW5lOjpjcmVh
dGUoKnBvaW50MSwgKnBvaW50Mik7Ci19Ci0KLWNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxv
Y2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQo
YmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGlu
ZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247
IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQyLDE2ICsxNjE0LDE1IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBk
b3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdM
aW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2lu
dCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7CiAgICAgRGFz
aEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3Miw3ICsxNjQzLDcgQEAgdm9pZCBEcmF3TGluZXNGb3JU
ZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBE
cmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwogICAgIGRlY29kZXIgPj4gYmxvY2tMb2NhdGlv
bjsKQEAgLTIxMDQsMTE5ICsxNjc1LDgzIEBAIE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0
Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFk
b3VibGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBE
cmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2NrTG9jYXRpb24sICpsb2NhbEFuY2hvciwgKnRo
aWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMpOworICAgIHJldHVybiB7
eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAqcHJp
bnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAotY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICBGbG9hdFJlY3QgbV9y
ZWN0OworICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7Cit9OworCitjbGFzcyBE
cmF3RWxsaXBzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisg
ICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1f
c3R5bGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBk
ZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgT3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHN0eWxlOwotICAg
IGRlY29kZXIgPj4gc3R5bGU7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUo
KnJlY3QsICpzdHlsZSk7Ci19Ci0KLWNsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdFbGxp
cHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdGg7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CisgICAgICAgIDogbV9wYXRoKHBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkRy
YXdFbGxpcHNlKCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLX07Ci0KLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIERyYXdFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IERyYXdFbGxpcHNlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVj
b2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBEcmF3RWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3Mg
RHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIERyYXdQYXRoKFBhdGgmJiBw
YXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkRyYXdQYXRoKCk7Ci0KICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3UGF0aD4gZGVjb2RlKERlY29kZXIm
KTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25z
dCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjIyNiwyNCArMTc2MSwzNyBAQCB2b2lkIERyYXdQYXRoOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPERyYXdQYXRoPiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAg
ICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IERyYXdQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9
fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0Zv
Y3VzUmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoUGF0aCYm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6
IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRy
YXdGb2N1c1JpbmdQYXRoKCk7CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9w
YXRoKHBhdGgpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQogCiAgICAgY29u
c3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGZsb2F0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMjI1MSwxNiArMTc5OSwxNSBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0Zv
Y3VzUmluZ1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsK
IAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLQotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAg
IFBhdGggbV9wYXRoOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CiAg
ICAgQ29sb3IgbV9jb2xvcjsKQEAgLTIyNzYsNyArMTgyMyw3IEBAIHZvaWQgRHJhd0ZvY3VzUmlu
Z1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmlu
Z1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1Bh
dGg+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBP
cHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTIyOTgsMzMgKzE4
NDUsMzEgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1Bh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0
ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworICAgIHJldHVybiB7eyBXVEZNb3Zl
KCpwYXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1
c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVj
dHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1JlY3RzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwogCiAgICAgY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAg
ICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gZGVjb2RlKERlY29k
ZXImKTsKIAorcHJpdmF0ZToKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwogICAgIGZs
b2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CkBAIC0yMzQxLDcgKzE4ODYsNyBAQCB2
b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1Jl
Y3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlv
bmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxWZWN0b3I8RmxvYXRSZWN0Pj4gcmVjdHM7CiAg
ICAgZGVjb2RlciA+PiByZWN0czsKQEAgLTIzNjMsNzEgKzE5MDgsNTUgQEAgT3B0aW9uYWw8UmVm
PERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwg
Km9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQs
ICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRmlsbFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsUmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Rmls
bFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsK
IAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbFJlY3Q6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gRmlsbFJlY3Q6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAg
ICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCi0vLyBG
SVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmls
bFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRo
Q29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9y
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVj
dFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAg
ICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3Ip
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhDb2xv
cigpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhD
b2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhDb2xv
cihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aENv
bG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7
CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CkBAIC0yNDQwLDcgKzE5NjksNyBAQCB2b2lkIEZpbGxS
ZWN0V2l0aENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxS
ZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0
V2l0aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAg
LTI0NTIsMjkgKzE5ODEsMjggQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmls
bFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3Ip
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRo
Q29sb3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xv
ciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZp
bGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsK
IAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29u
c3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFk
aWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhHcmFk
aWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aEdy
YWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtl
IHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3LDcgKzIwMTUsNyBAQCB2b2lkIEZpbGxSZWN0
V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZp
bGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZp
bGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIg
Pj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjYsMzcgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0
aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUK
ICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUoKnJlY3QsIGdyYWRpZW50LT5nZXQo
KSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNz
IEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsQ29t
cG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsQ29tcG9zaXRl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChvcCkKKyAgICAgICAg
LCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsQ29tcG9zaXRlZFJlY3QoKTsK
LQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAg
IEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbENvbXBv
c2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxDb21wb3Np
dGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7
CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKQEAgLTI1NDAsNyArMjA3Myw3IEBAIHZvaWQg
RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+
PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+
IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk1LDM1IEBAIE9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRl
ZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKCpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5k
TW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsK
IH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpOwotCiAgICAg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxs
Um91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVj
dCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0K
IAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2Nv
bG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKQEAgLTI2MDEsNyArMjEzOCw3IEBAIHZv
aWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBG
aWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJv
dW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0
OwpAQCAtMjYxOCwzMSArMjE1NSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4g
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5k
TW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUm91
bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlKTsKKyAgICByZXR1cm4g
e3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQor
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9y
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0
ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yb3VuZGVk
SG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTI2NTcsNyArMjE5OCw3IEBAIHZvaWQg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjY3NCw3NCArMjIxNSw2MyBAQCBP
cHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRl
KCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdCwg
KnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19OwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxJbmxpbmVQ
YXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbElubGluZVBh
dGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEo
cGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsSW5saW5l
UGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZp
bGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpm
cm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYpOwotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCitwcml2YXRl
OgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gRmlsbElubGluZVBhdGg6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBw
YXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0aERhdGEpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRmlsbElubGluZVBhdGg6
OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RG
TW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRo
KHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUGF0aCgp
OworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgp
CisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
K3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMjc1MSw5MCArMjI4MSw2NSBAQCB2b2lkIEZpbGxQYXRoOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxQYXRoOjpjcmVh
dGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3Mg
RmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbEVsbGlwc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBz
ZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbEVsbGlw
c2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsRWxs
aXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9h
dFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbEVs
bGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxF
bGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxFbGxp
cHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBQdXRJbWFnZURhdGEgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVhdGUoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92ZShpbWFnZURhdGEpLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflB1dElt
YWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0KLSAgICBJbWFnZURhdGEmIGltYWdl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9CisgICAgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0KICAgICBJbnRSZWN0IHNyY1Jl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBJbnRQb2ludCBkZXN0UG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdEZvcm1hdDsgfQogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0
UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KG1fZGVzdFBv
aW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRl
OgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIEludFBvaW50IG1fZGVzdFBvaW50OwotICAg
IFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1faW1h
Z2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9pbnB1dEZvcm1hdDsKICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsKIH07CkBAIC0yODQzLDE0ICsyMzQ4
LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1dEltYWdlRGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0
OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCpt
X2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7CiAgICAgZW5jb2RlciA8PCBt
X2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZvcm1hdDsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFn
ZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEFscGhhUHJl
bXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+
PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjM4MywxMDkgQEAgT3B0aW9uYWw8UmVmPFB1dElt
YWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwg
KnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0KTsKKyAgICByZXR1cm4ge3sgKmlucHV0
Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RG
b3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJhbWVGb3JNZWRpYSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QYWludEZyYW1l
Rm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVG
b3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAg
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9CiAKK3ByaXZh
dGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFBh
aW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAgZW5jb2RlciA8PCBtX2Rlc3RpbmF0aW9uOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JN
ZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGRlY29k
ZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwotICAg
IGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBQYWludEZyYW1lRm9yTWVkaWE6OmNy
ZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9uKTsKLX0KLQotY2xhc3MgU3Ryb2tlUmVjdCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VSZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lk
dGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3Qs
IGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9r
ZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVJl
Y3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgZmxvYXQgbV9saW5lV2lk
dGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VSZWN0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAg
ICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJva2VSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiBy
ZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0gICAgZGVjb2RlciA+PiBsaW5lV2lkdGg7Ci0g
ICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGluZVdpZHRoKTsKLX0KLQogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VJbmxpbmVQYXRoIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlubGluZVBhdGggewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBw
YXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERh
dGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRo
IHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQ
YXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
dHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERhdGEgbV9wYXRoRGF0YTsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUlubGluZVBhdGg6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRo
Pj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAgIGRlY29kZXIgPj4gcGF0aERhdGE7
Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0K
LQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZVBhdGggewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VQYXRoOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VQYXRo
KFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUGF0aCgpOworICAgIFN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQog
CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzA1MCw3MjEgKzI0OTUsMTE1IEBA
IHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+IFN0cm9rZVBh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U3Ryb2tlUGF0aD4gU3Ryb2tl
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0
aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0cm9rZVBhdGg6OmNyZWF0ZSgqcGF0aCk7Cisg
ICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBTdHJva2VFbGxpcHNl
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUVsbGlwc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNl
KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOwor
ICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ry
b2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsZWFyUmVjdCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVhclJlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJSZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIENsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVjdCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQot
CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlm
ICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGVh
clJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNpZiBVU0UoQ0cpCi1jbGFzcyBBcHBseVN0cm9r
ZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseVN0
cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXIm
KTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseVN0cm9rZVBh
dHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+PiBBcHBseVN0cm9rZVBhdHRl
cm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlTdHJva2VQYXR0ZXJuOjpj
cmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxs
UGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFw
cGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFw
cGx5RmlsbFBhdHRlcm4oKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseUZp
bGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlGaWxsUGF0dGVybj4+IEFwcGx5RmlsbFBhdHRl
cm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlGaWxsUGF0dGVybjo6Y3Jl
YXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciA6IHB1Ymxp
YyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9y
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKyAg
ICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
KTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3Rv
cjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3Rv
cjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zY2FsZUZhY3RvcjsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseURldmljZVNj
YWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9yOwotICAgIGRlY29kZXIgPj4g
c2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoKnNj
YWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBJ
dGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
dHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTYXZlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2NhbGU+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRT
dGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRNaXRlckxp
bWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hh
ZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyU2hhZG93PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBPdXQ+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJ
bWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERy
YXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdSZWN0PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGlu
ZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUGF0aD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UHV0
SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxQYWludEZyYW1l
Rm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ry
b2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseURldmljZVNj
YWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRlbVR5cGU+IGl0ZW1UeXBlOwotICAgIGRlY29k
ZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVtVHlwZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1UeXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNhdmU6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2NhbGU6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRDVE06OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0U3RhdGU6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZUNhcDo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURhc2g6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVKb2luOjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1pdGVyTGltaXQ6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93OjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBD
bGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlw
UGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RWxsaXBz
ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1BhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdQ
YXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJh
d0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBG
aWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJvdW5kZWRSZWN0OjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbElubGluZVBhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxFbGxpcHNlOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUHV0SW1hZ2VEYXRhOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUGFpbnRGcmFtZUZvck1l
ZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVJlY3Q6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVBhdGg6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBCZWdpblRyYW5zcGFyZW5jeUxheWVy
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBFbmRU
cmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhhbmRsZSk7CiAKIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0
ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0o
KSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9W
YWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgp
ID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShU
cmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldENUTSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNUTSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbENvbG9yKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZVN0cm9rZUNvbG9y
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0cm9rZVRoaWNr
bmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZp
bGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUHV0
SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFBhaW50
RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
dHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGluZVBhdGgpCi0jZW5kaWYKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0j
aWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5
U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShB
cHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggZDE0MmMzNzc5
Y2I5OTNlNzM3MmJiOGI4ODg3ZmNjNGM3NTJmZTk4OS4uOTBlYmRlNTVmODk3OTZhODExODc5ZGIw
Nzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNv
cmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5k
SXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7CisgICAgYXBw
ZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3Rh
dGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKQEAgLTg3LDMx
ICs4NywzMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogdm9pZCBSZWNvcmRlcjo6YXBwZW5k
U3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2Vz
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKIHsK
ICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VG
bGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldFN0YXRlOjpjcmVh
dGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncykpOworICAgICAgICBhcHBlbmQ8U2V0U3Rh
dGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lu
bGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oY2hhbmdlcy5t
X3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUo
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICBhcHBlbmQ8U2V0U3Ry
b2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xv
cjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAg
ICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFz
SW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVu
ZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoKmNoYW5nZXMubV9zdGF0ZS5maWxs
R3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oKmNoYW5n
ZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5k
SXRlbShjb25zdCBJdGVtJiBpdGVtKQordm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW1PZlR5
cGUoSXRlbVR5cGUgdHlwZSkKIHsKICAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxl
Z2F0ZS0+d2lsbEFwcGVuZEl0ZW0oaXRlbSk7CisgICAgICAgIG1fZGVsZWdhdGUtPndpbGxBcHBl
bmRJdGVtT2ZUeXBlKHR5cGUpOwogCi0gICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpCisgICAg
aWYgKGlzRHJhd2luZ0l0ZW0odHlwZSkKICNpZiBVU0UoQ0cpCi0gICAgICAgIHx8IGl0ZW0udHlw
ZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gfHwgaXRlbS50eXBlKCkgPT0gSXRl
bVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgorICAgICAgICB8fCB0eXBlID09IEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm4gfHwgdHlwZSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
CiAjZW5kaWYKICAgICApIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0
YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwpAQCAtMTI2LDEwICsxMjYs
MTAgQEAgdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKICAg
ICB9CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkK
K3ZvaWQgUmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKIHsKICAg
ICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkQXBwZW5kSXRlbShpdGVt
KTsKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkQXBwZW5kSXRlbU9mVHlwZSh0eXBlKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKQEAgLTEz
OSwyNyArMTM5LDI3IEBAIHZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhCiAKIHZvaWQgUmVjb3JkZXI6
OmNsZWFyU2hhZG93KCkKIHsKLSAgICBhcHBlbmRJdGVtKENsZWFyU2hhZG93OjpjcmVhdGUoKSk7
CisgICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVDYXA6OmNyZWF0
ZShsaW5lQ2FwKSk7CisgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwogfQogCiB2b2lk
IFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQg
ZGFzaE9mZnNldCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFy
cmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwZW5kPFNldExpbmVEYXNoPihkYXNoQXJyYXksIGRh
c2hPZmZzZXQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5l
Sm9pbikKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVKb2luOjpjcmVhdGUobGluZUpvaW4pKTsK
KyAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TWl0
ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGltaXQpKTsKKyAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4o
bWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0xNjksMTkgKzE2OSwxOSBAQCB2b2lkIFJlY29yZGVy
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgdW5zaQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7
Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8
RHJhd0ltYWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlv
bnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VE
cmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxv
YXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBh
cHBlbmQ8RHJhd1RpbGVkSW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6
ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdS
ZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50
aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQog
CkBAIC0xOTAsMjMgKzE5MCwyMyBAQCBib29sIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwogICAgIGlmICgh
bV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+bG9ja1JlbW90ZUltYWdlQnVmZmVyKGltYWdlQnVm
ZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8
RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdOYXRpdmVJbWFnZTo6
Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Cisg
ICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGFwcGVuZEl0
ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxTYXZlPigpOwogICAgIG1fc3RhdGVTdGFj
ay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7CiB9CiAKQEAgLTIy
MSwyNSArMjIxLDI1IEBAIHZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIC8vIEhhdmUgdG8g
YXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9SZXN0b3JlIHdoZW4gYSBkZXNjZW5kYW50IHN0YXRl
IGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCiAgICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRy
YXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2luZzsKIAotICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6
Y3JlYXRlKCkpOworICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xh
dGUoeCwgeSk7Ci0gICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7CisgICAg
YXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucykKIHsKICAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJh
ZGlhbnMpOwotICAgIGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsK
KyAgICBhcHBlbmQ8Um90YXRlPihhbmdsZUluUmFkaWFucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5zY2Fs
ZShzaXplKTsKLSAgICBhcHBlbmRJdGVtKFNjYWxlOjpjcmVhdGUoc2l6ZSkpOworICAgIGFwcGVu
ZDxTY2FsZT4oc2l6ZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKQEAgLTI0OCwxMyArMjQ4LDEzIEBAIHZvaWQgUmVjb3Jk
ZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
YXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworICAgIGFwcGVu
ZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGN1cnJlbnRTdGF0ZSgp
LnNldENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oU2V0Q1RNOjpjcmVhdGUodHJhbnNm
b3JtKSk7CisgICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKIH0KIAogQWZmaW5lVHJhbnNm
b3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
CkBAIC0yNjUsMTU4ICsyNjUsMTU4IEBAIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQogCiB2b2lkIFJlY29yZGVyOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpOwor
ICAgIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZEl0ZW0oRW5kVHJh
bnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAgICBhcHBlbmQ8
RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0xpbmU6OmNyZWF0ZShwb2lu
dDEsIHBvaW50MikpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJh
d0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7CisgICAgYXBwZW5kPERy
YXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25l
c3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQo
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHJlY3QsIHN0eWxlKSk7CisgICAgYXBw
ZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0VsbGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBw
ZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXRo
OjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ZvY3VzUmlu
Z1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgYXBwZW5k
PERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBw
ZW5kPEZpbGxSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9yKSk7Cisg
ICAgYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoR3JhZGllbnQ6
OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChG
aWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwor
ICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2Rl
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsK
LSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJl
Y3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0
LCBjb2xvciwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRl
ZEhvbGVSZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4o
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAg
ICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRmlsbElubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEoKSkpOworICAg
ICAgICBhcHBlbmQ8RmlsbElubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmls
bFBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSk7Cisg
ICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgp
KTsKKyAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewotICAgICAgICBh
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlu
bGluZURhdGEoKSkpOworICAgICAgICBhcHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4ocGF0aC5pbmxp
bmVEYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxT
dHJva2VQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJv
a2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KENsZWFyUmVjdDo6Y3JlYXRlKHJlY3Qp
KTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogI2lmIFVTRShDRykKIHZvaWQg
UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kSXRlbShBcHBseVN0
cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigp
OwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJ
dGVtKEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0
dGVybj4oKTsKIH0KICNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChyZWN0
KTsKLSAgICBhcHBlbmRJdGVtKENsaXA6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENsaXA+
KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXQ6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5k
PENsaXBPdXQ+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0aCkpOwor
ICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CiAgICAgY3VycmVu
dFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOwot
ICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNyZWF0ZShwYXRoLCB3aW5kUnVsZSkpOworICAgIGFw
cGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCiBJbnRSZWN0IFJlY29yZGVyOjpj
bGlwQm91bmRzKCkKQEAgLTQ0NCwxOSArNDQ0LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNv
CiAKICAgICBhdXRvIHJlY29yZGluZ0NvbnRleHQgPSBtYWtlVW5pcXVlPERyYXdpbmdDb250ZXh0
PihkZXN0aW5hdGlvbi5zaXplKCksIGluaXRpYWxDVE0pOwogICAgIGRyYXdpbmdGdW5jdGlvbihy
ZWNvcmRpbmdDb250ZXh0LT5jb250ZXh0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzOjpjcmVhdGUoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRl
eHQtPnRha2VEaXNwbGF5TGlzdCgpKSk7CisgICAgYXBwZW5kPENsaXBUb0RyYXdpbmdDb21tYW5k
cz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRha2VEaXNwbGF5
TGlzdCgpKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgYXBwZW5k
SXRlbShQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7Cisg
ICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2gg
d2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCiAgICAgLy8gQXNzZXJ0
IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICBhcHBlbmRJdGVtKEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGFwcGVuZDxB
cHBseURldmljZVNjYWxlRmFjdG9yPihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKIEZsb2F0UmVj
dCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtNDY1LDI5ICs0NjUsNiBAQCBGbG9hdFJl
Y3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBH
cmFwaGljc0NvbnRleHQ6OgogICAgIHJldHVybiByZWN0OwogfQogCi12b2lkIFJlY29yZGVyOjph
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJiBpdGVtKQotewotICAg
IERyYXdpbmdJdGVtJiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICBhcHBlbmRJdGVtKFdURk1v
dmUoaXRlbSkpOwotICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKLXsKLSAgICBJdGVtJiBuZXdJdGVt
ID0gaXRlbS5nZXQoKTsKLSAgICB3aWxsQXBwZW5kSXRlbShpdGVtLmdldCgpKTsKLSAgICBtX2Rp
c3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICBkaWRBcHBlbmRJdGVtKG5ld0l0
ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBp
dGVtKSBjb25zdAotewotICAgIGlmIChPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxv
Y2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0
ZW50RnJvbUxvY2FsQm91bmRzKHJlY3QudmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKE9wdGlvbmFs
PEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCi0gICAgICAgIGl0ZW0uc2V0
RXh0ZW50KHJlY3QudmFsdWUoKSk7Ci19Ci0KIC8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0Rh
dGEKIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJh
ZGl1cykKIHsKQEAgLTUwNyw3ICs0ODQsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZy
b21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgZmxvYXQgc2hh
ZG93UmFkaXVzOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIGlmIChncmFwaGljc0NvbnRl
eHQoKS5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkg
ewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAgICAgIEZsb2F0
UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNo
YWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5n
RXh0ZW50KHNoYWRvd1JhZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDMxYzhjODk2Mzc4
YzBjYWZiYjIxMTI4OTU5N2NlZTI4YjRmYTc1ZDIuLmZmZTE1OTFiYWZkNDlkYjMzZTk0M2U5OWMx
YmExNGNkYmM0YzYwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApA
QCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKICNpbmNsdWRlICJE
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRl
bXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKQEAgLTQ4
LDggKzQ5LDYgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbTsKLQogY2xhc3MgUmVjb3JkZXIgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwpAQCAtNjAsMTQgKzU5LDE0IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCk7CiAKLSAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAgICBjbGFzcyBEZWxlZ2F0ZSB7
CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5EZWxlZ2F0ZSgpIHsgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgbG9ja1JlbW90ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxBcHBlbmRJdGVtKGNv
bnN0IEl0ZW0mKSB7IH07Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBlbmRJdGVtKGNvbnN0
IEl0ZW0mKSB7IH07CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQXBwZW5kSXRlbU9mVHlwZShJ
dGVtVHlwZSkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKEl0
ZW1UeXBlKSB7IH0KICAgICB9OwogCiBwcml2YXRlOgpAQCAtMTQ4LDE1ICsxNDcsMzQgQEAgcHJp
dmF0ZToKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
YXBwZW5kSXRlbShSZWY8SXRlbT4mJik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJ
dGVtJik7Ci0gICAgdm9pZCBkaWRBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKLSAgICB2b2lkIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOwor
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pOworICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1UeXBlKTsKKworICAgICAg
ICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVtID0gVChzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5k
cyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdp
bmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOworICAgICAgICBlbHNl
IGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQorICAgICAgICAgICAgbV9kaXNw
bGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGOjpudWxsb3B0KTsK
KyAgICB9CisKKyAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKTsKKyAgICB2
b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwogCiAgICAgdm9pZCBhcHBlbmRTdGF0
ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJv
bUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlSXRl
bUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggY2Y0ZTc0
NmU4MmRmZDRiNzMzYzNiYmY3ZTgyNDVlNWFmOTczNTQwZi4uZmViYmI5MmNmNTZlNjA2Y2RjOTMy
NTFmNGNiZDA3YzMxOTU4MTBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmNwcApAQCAtNTIsMTMgKzUyLDkgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBS
ZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wKICAgICBp
ZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKICAgICAgICAgcmVwbGF5TGlzdCA9IG1ha2VV
bmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBtX2Rpc3BsYXlM
aXN0Lml0ZW1Db3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsr
aSkgewotICAgICAgICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5TGlzdC5saXN0KClbaV0uZ2V0KCk7
Ci0KLSAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxEcmF3aW5nSXRlbT4o
aXRlbSkpIHsKLSAgICAgICAgICAgIGNvbnN0IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRlbSA9IGRv
d25jYXN0PERyYXdpbmdJdGVtPihpdGVtKTsKLSAgICAgICAgICAgIGlmIChkcmF3aW5nSXRlbS5l
eHRlbnRLbm93bigpICYmICFkcmF3aW5nSXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxD
bGlwKSkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6IG1fZGlzcGxheUxpc3QpIHsK
KyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpdGVtLmlzRHJhd2luZ0l0ZW0o
KSkgeworICAgICAgICAgICAgaWYgKGV4dGVudCAmJiAhZXh0ZW50LT5pbnRlcnNlY3RzKGluaXRp
YWxDbGlwKSkgewogICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMs
IHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY4LDEwICs2NCwxMyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgYm9vbAogICAgICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1fZGVsZWdhdGUt
PmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAgICAgICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4
dCk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCi0gICAgICAgICAg
ICByZXBsYXlMaXN0LT5hcHBlbmRJdGVtKGNvbnN0X2Nhc3Q8SXRlbSY+KGl0ZW0pKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpIHsKKyAgICAgICAgICAgIHJlcGxheUxp
c3QtPmFwcGVuZChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSkK
KyAgICAgICAgICAgICAgICByZXBsYXlMaXN0LT5hZGREcmF3aW5nSXRlbUV4dGVudChXVEZNb3Zl
KGV4dGVudCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHJlcGxheUxp
c3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmluZGV4IDQwY2Qw
ZmYwZDQxNjgwY2ZjNzNlNTA0ZGVjZmMzZGVmODc3NTMyMzMuLjA0NWNhY2NlOGEwMWM4ZDVkY2I2
NThjNDBkNjNlOWEzNTg5YjViNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5
ZXIuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZWdhdGUgewogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+RGVsZWdhdGUoKSB7IH0KLSAgICAgICAgdmlydHVh
bCBib29sIGFwcGx5KEl0ZW0mLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQor
ICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhpY3NDb250ZXh0Jikg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB9OwogICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXgg
Y2VkMWNhOTBmY2I4ZTJhODdmZTQzNGJiYjk3N2FlYTUwNmU5YzY1Yi4uOTU3YTBkOWI3NDVmZDBi
N2JjMTYyMjczN2NlYzg4ODhkNmFhNjlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTI3LDE0ICsyNywxNyBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogI2lu
Y2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bmNyZXRlSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdFJlcGxheWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdl
YkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVi
bGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUsIHB1YmxpYyBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgewogICAgIHVzaW5nIEJh
c2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAg
ICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKQEAgLTY0LDE2ICs2
NywxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgaWYgKGRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKSB7CisgICAgICAg
IGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSwgZGlzcGxheUxpc3QsIHRoaXMpOwogICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtJiBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRl
CisgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJ
bWFnZURhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAg
IGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dElt
YWdlRGF0YUl0ZW0uaW5wdXRGb3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwg
cHV0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCks
IHB1dEltYWdlRGF0YUl0ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CkBAIC04NCw2ICs4NywxMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5hcHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsK
ICAgICB9CiAKKyAgICBib29sIHJlcXVpcmVzRGVjb2RpbmcoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlIHR5cGUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gIVdl
YkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0odHlwZSk7CisgICAgfQorCisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVS
TiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aD4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVj
b2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJ
bWFnZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0
aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVh
clJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2Jq
ZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24g
KyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVt
KSk7CisgICAgICAgICAgICByZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKaW5kZXggZDViYjBmMmQwM2U2ZjM1YTk4ZTQxOWM0MTVkMDU2YjI5NGJlNTdiYS4u
NDY1YjZmNTkwMzg5YzBmMDI4MWU0NWFkNDY0MTYyZWNhMDA1ZjNmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEwIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVt
JiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0
ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRl
bSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgewor
ICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VC
dWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCkpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlS
ZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVt
KGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Citib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAo
aXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVk
aWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsK
LQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5
ICsxMzksNDkgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0IGZsdXNoQ29udGV4
dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5j
YWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICBp
bWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CisgICAgVmVjdG9yPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcj4gYnVmZmVySWRlbnRpZmll
cnM7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlzdChbJl0g
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSAt
PiB1aW50OF90KiB7CisgICAgICAgIGJ1ZmZlcklkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gc2hhcmVkSXRlbUJ1ZmZlcihpZGVu
dGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihz
aGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pOwor
CisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2Fn
ZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNo
ZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGlmICghaW1h
Z2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVy
bWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBkaXNwbGF5TGlzdC0+c2V0
SXRlbUJ1ZmZlckNsaWVudChkb3duY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihp
bWFnZUJ1ZmZlcikpOworICAgIGVsc2UKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZm
ZXJDbGllbnQoZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1
ZmZlcikpOworCisgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoKmRpc3BsYXlMaXN0
KTsKKworICAgIGlmIChmbHVzaENvbnRleHQgPT0gU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMpCisg
ICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKKworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFdU
Rk1vdmUoYnVmZmVySWRlbnRpZmllcnMpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNw
bGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVm
ZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXIt
PmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOwotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1
c2hDb250ZXh0KCk7Ci0gICAgICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJ
ZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIH0KKyAgICBhcHBs
eURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRG
bHVzaENvbnRleHQ6Ok5vKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVz
aERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5k
bGUsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBh
cHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91
bGRGbHVzaENvbnRleHQ6Olllcyk7CisgICAgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChm
bHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNjgsNiArMTk3LDE3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByCiAg
ICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRp
ZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxlKQoreworICAg
IGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICBtX3NoYXJlZEl0
ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpOworfQorCitS
ZWZQdHI8U2hhcmVkTWVtb3J5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRJdGVtQnVm
ZmVyKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAor
eworICAgIHJldHVybiBtX3NoYXJlZEl0ZW1CdWZmZXJzLmdldChpZGVudGlmaWVyKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaAppbmRleCAyODVlMmY3NGI0ZDRmZDZlNmE4YzVlOTEwMjVhMWM5MjZm
NWZmYjE1Li5mZGFhNjg2MzVhMjE3YTRmMmUzMjk0ZTAxYWEzZGZiNGYxNWI3NGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjMsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0
OwogCiAgICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseVJlc291cmNl
SXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpOwotICAgIGJvb2wgYXBwbHlNZWRpYUl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5
UmVzb3VyY2VJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5TWVkaWFJdGVtKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8v
IE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVh
dGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKQEAgLTczLDYgKzc1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91bGRGbHVzaENv
bnRleHQgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5TGlzdChjb25z
dCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0KTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
aGFyZWRJdGVtQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmll
cikgY29uc3Q7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0
aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04Mywx
NCArODksMTYgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgog
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAg
IHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29u
c3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRS
ZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9p
ZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUm
KTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAg
IFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCmluZGV4IGE4OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMu
LmJiOTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90
UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNp
emUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RB
bmRDb21taXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBX
ZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUs
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hE
aXNwbGF5TGlzdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWlu
dDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29y
ZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2Ug
aW1hZ2VEYXRhKSBTeW5jaHJvbm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUgaGFuZGxlKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9E
ZWNvZGVyLmNwcAppbmRleCA1Y2EyMTI3YTM0NmNkMmE0NjljYTI5N2Y0YWIxMzkwMmY2YTA2Zjhh
Li41MWI5ZmZkOTMwMzQwYmRmZjJmYjcxZDBlNDZjYWNmNDA5MzQ2NTMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApAQCAtNzQsNiArNzQsMTYgQEAgRGVjb2Rlcjo6RGVj
b2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCB2b2lkICgqYnVm
ZmVyRGVhbGxvY2EKICAgICAgICAgcmV0dXJuOwogfQogCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0
IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnN0cnVjdFdpdGhvdXRIZWFk
ZXJUYWcpCisgICAgOiBtX2J1ZmZlciB7IGJ1ZmZlciB9CisgICAgLCBtX2J1ZmZlclBvcyB7IG1f
YnVmZmVyIH0KKyAgICAsIG1fYnVmZmVyRW5kIHsgbV9idWZmZXIgKyBidWZmZXJTaXplIH0KKyAg
ICAsIG1fYnVmZmVyRGVhbGxvY2F0b3IoW10gKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIHsgfSkK
K3sKKyAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fYnVmZmVyKSAlIGFsaWdu
b2YodWludDY0X3QpKQorICAgICAgICBtYXJrSW52YWxpZCgpOworfQorCiBEZWNvZGVyOjp+RGVj
b2RlcigpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuaAppbmRleCAzZGQyNDY5NmVmNmNhN2RjOTdkMDEzYTBmZTg3NWQ3YmQ0N2RlMzBhLi5h
MDNlYmIxYjI4MzdlZjZhMzg3M2ExMTVjNGRiZTBmYzU4Y2Q5OTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRGVjb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZU5h
bWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE3
Myw3ICsxNzQsMjIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNv
ZGVyID0gdHJ1ZTsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBPcHRp
b25hbDxUPiBkZWNvZGVPYmplY3QoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSkKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPFQ+IHJlc3VsdDsKKyAgICAgICAgRGVjb2Rl
ciBkZWNvZGVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSwgQ29uc3RydWN0V2l0aG91dEhlYWRlcik7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIGRlY29kZXIgPj4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKwogcHJpdmF0ZToKKyAgICBlbnVtIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJU
YWcgeyBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyIH07CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKTsK
KwogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwogICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QgYWxpZ25tZW50
LCBzaXplX3QpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCmlu
ZGV4IDg3ZmU5NTU1MmFjNjA1MmRiY2Q3NmU0OTBkNGFiNmE2NjJlYzhhZDQuLmIwNTU2NjU3Y2Iw
NmYyNGE0Mzc5YmIzM2Q1ZDdmOTdlMTIwY2Q5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0VuY29kZXIuY3BwCkBAIC03Miw2ICs3MiwxNiBAQCBFbmNvZGVyOjpFbmNvZGVyKE1lc3NhZ2VO
YW1lIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogICAgIGVuY29kZUhlYWRl
cigpOwogfQogCitFbmNvZGVyOjpFbmNvZGVyKENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpCisg
ICAgOiBtX21lc3NhZ2VOYW1lKHN0YXRpY19jYXN0PE1lc3NhZ2VOYW1lPigwKSkKKyAgICAsIG1f
ZGVzdGluYXRpb25JRCgwKQorICAgICwgbV9idWZmZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBt
X2J1ZmZlclBvaW50ZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAg
ICAsIG1fYnVmZmVyQ2FwYWNpdHkoc2l6ZW9mKG1faW5saW5lQnVmZmVyKSkKK3sKK30KKwogRW5j
b2Rlcjo6fkVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlciAhPSBtX2lubGluZUJ1ZmZlcikK
QEAgLTIxOSw3ICsyMjksMTIgQEAgdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1l
bnQmJiBhdHRhY2htZW50KQogCiBWZWN0b3I8QXR0YWNobWVudD4gRW5jb2Rlcjo6cmVsZWFzZUF0
dGFjaG1lbnRzKCkKIHsKLSAgICByZXR1cm4gV1RGTW92ZShtX2F0dGFjaG1lbnRzKTsKKyAgICBy
ZXR1cm4gc3RkOjpleGNoYW5nZShtX2F0dGFjaG1lbnRzLCB7IH0pOworfQorCitib29sIEVuY29k
ZXI6Omhhc0F0dGFjaG1lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fYXR0YWNobWVudHMu
aXNFbXB0eSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0VuY29kZXIuaAppbmRleCAzNjc4ZDRmYWUyOTE1MmQ5OTBmNGQzYTRmMGI3ZTBhZjZjZjc0NzJi
Li5lZmM5NmQ3NDgyMjM5NTI5NWNiNTk5ZDZhZDZhOTU5NDEwOWZhYTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2Fn
ZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTk5LDcgKzEwMCwyNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0Vu
Y29kZXIgPSB0cnVlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlT2JqZWN0KGNvbnN0IFQmIG9iamVjdCkK
KyAgICB7CisgICAgICAgIEVuY29kZXIgZW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyKTsK
KyAgICAgICAgZW5jb2RlciA8PCBvYmplY3Q7CisKKyAgICAgICAgaWYgKGVuY29kZXIuaGFzQXR0
YWNobWVudHMoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgfQorCiBwcml2YXRlOgorICAgIGVudW0gQ29uc3RydWN0V2l0aG91dEhlYWRl
clRhZyB7IENvbnN0cnVjdFdpdGhvdXRIZWFkZXIgfTsKKyAgICBFbmNvZGVyKENvbnN0cnVjdFdp
dGhvdXRIZWFkZXJUYWcpOworCiAgICAgdWludDhfdCogZ3JvdyhzaXplX3QgYWxpZ25tZW50LCBz
aXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgpAQCAtMTA5LDYgKzEyNyw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGVuY29kZShXVEY6OmVudW1Ub1VuZGVybHlpbmdUeXBlPEU+KGVudW1WYWx1
ZSkpOwogICAgIH0KIAorICAgIGJvb2wgaGFzQXR0YWNobWVudHMoKSBjb25zdDsKKwogICAgIHZv
aWQgZW5jb2RlSGVhZGVyKCk7CiAgICAgY29uc3QgT3B0aW9uU2V0PE1lc3NhZ2VGbGFncz4mIG1l
c3NhZ2VGbGFncygpIGNvbnN0OwogICAgIE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+JiBtZXNzYWdl
RmxhZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDk5
MTExYTc4OTBiNTc4NWY0ZTEwNjJkNjg4MjA2NTQ3ZDUyNTAzYmQuLjlmZjk0OGU4YmUxYWFlZGQw
OTNiNGJlMjk5MzQ2MGUyY2Q5OWIyNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQpAQCAtMjA4LDYgKzIwOCw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9m
b3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdTdHJpbmcnLAogICAgICAgICAnV2ViQ29yZTo6
Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEaWN0YXRpb25Db250ZXh0JywKKyAgICAg
ICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncycsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1
bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRPcldvcmtlcklkZW50
aWZpZXInLApAQCAtNTg1LDYgKzU4Niw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgog
ICAgICAgICAnSlNDOjpNZXNzYWdlU291cmNlJzogWyc8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5
cGVzLmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUnOiBbJzxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPiddLAorICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyJzogWyc8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
aD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAg
ICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAn
U2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhNzRkNjE1YWJkM2Y0
YTMxODYyNTJmZjBmZGNiODcxZTcwZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShj
b25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3Bs
YXlMaXN0LmZvckVhY2hJdGVtQnVmZmVyKFsmXSAoYXV0byYgaGFuZGxlKSB7CisgICAgICAgIG1f
YnVmZmVycy5hcHBlbmQoeyBoYW5kbGUuaWRlbnRpZmllciwgaGFuZGxlLmNhcGFjaXR5IH0pOwor
ICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3Zp
ZGVyJiYgYnVmZmVyUHJvdmlkZXIpIGNvbnN0Cit7CisgICAgRGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJIYW5kbGVzIGhhbmRsZXM7CisgICAgaGFuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
YnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgW2lkZW50aWZpZXIsIGNhcGFjaXR5XSA6
IG1fYnVmZmVycykgeworICAgICAgICBhdXRvKiBkYXRhID0gYnVmZmVyUHJvdmlkZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGhhbmRsZXMudW5jaGVja2VkQXBwZW5kKHsgaWRlbnRpZmllciwgZGF0YSwgY2Fw
YWNpdHkgfSk7CisgICAgfQorICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdD4oV1RGTW92ZShoYW5kbGVzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDE3NWUxMTRmMjNiYzhmYjhlNTdjZDkwZjY0YTMzYmUyNjJlMWYzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUgeworcHVibGljOgorICAgIHVzaW5nIEl0ZW1CdWZmZXJQcm92
aWRlciA9IEZ1bmN0aW9uPHVpbnQ4X3QqKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllcik+OworCisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gY3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZl
clByb3ZpZGVyJiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gZGVjb2RlKERlY29kZXImKTsKKwor
cHJpdmF0ZToKKyAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShWZWN0b3I8c3RkOjpwYWlyPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4mJiBidWZm
ZXJzKQorICAgICAgICA6IG1fYnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAgIHsKKyAgICB9
CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgc2l6ZV90Pj4gbV9idWZmZXJzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2J1ZmZlcnM7Cit9CisKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+IE9wdGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8
VmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXIsIHNpemVfdD4+PiBidWZmZXJzOworICAgIGRlY29kZXIgPj4gYnVmZmVyczsKKyAgICBpZiAo
IWJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sg
V1RGTW92ZSgqYnVmZmVycykgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKaW5kZXggZTBhYjc0MzZiYWRjMzQ2Mzc0OTQ2NjMzNDcxOWI0NWVkZmQyYjMwNi4uNTBlMTAy
NGNhZTBkYzA0MGNhYzMyM2NiY2Q3ZWM1ZTE0NzQ0OTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNzMs
NiArMTczLDcgQEAgU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBT
aGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVu
aWZ5CiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCitTaGFyZWQvU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUuY3BwCiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcAogU2hhcmVkL1No
YXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRPbmx5LmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQ2NjVjY2I3YmM2YWY3YTdhMDg5MTVmZGU0NjcyNmQ5NjdmNWZjYjQuLmM4MWU0
OGFiMTg3NTg0N2MwZjU2ODA5YTU4MjcwZmFiNzE1MTk4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg3Myw2ICsxODczLDcgQEAK
IAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYw
MDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0Uw
MEM2NzUyQiAvKiBBcHBLaXRTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsg
fTsKIAkJRjQ5NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0
MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9Owor
CQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0
Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNENC
MDlFNTIyNUQ1QTA5MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAz
MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJCUY0RDVGNTFE
MjA2MDg3QTEwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1MTkyMDYwODdB
MDAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CiAJCUY0
RDVGNTFGMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTFC
MjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsg
fTsKQEAgLTU0NTksNiArNTQ2MCw4IEBACiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBB
cHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBh
dGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
bW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8q
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1
NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1
QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8q
IFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlTWVkaWFT
b3VyY2VQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNjYsNiArNjE2
OSw4IEBACiAJCQkJMUE2NDIwRTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5o
ICovLAogCQkJCTUxMjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5j
cHAgKi8sCiAJCQkJNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNl
LmggKi8sCisJCQkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmNwcCAqLywKKwkJCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGUuaCAqLywKIAkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hh
cmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKIAkJCQk4MzEzRjdFOTFGN0RBRTAzMDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCiAJCQkJODMxM0Y3RTgxRjdEQUUwMzAwQjk0
NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMTMxNSw2ICsxMTMyMCw3
IEBACiAJCQkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVm
ZmVyQ29weS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8q
IFNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkJD
MjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZm
ZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKaW5kZXggMjI2NGViY2I2NjY0ZDcxZmZmMGE0MDA0MmZiMjU0MmNhODA2NmVi
NC4uYzJkZmQyNzc3ODEzN2QzODMxOTk5YmNiNmM3ODJlZWZjZGU1NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RSZWNvcmRlci5oPgpAQCAtMzYsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1Ymxp
YyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRl
bGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xp
ZW50IHsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZURpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsKQEAgLTc3LDYgKzgxLDggQEAgcHJvdGVjdGVk
OgogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3Bs
YXlMaXN0KCkuc2V0SXRlbUJ1ZmZlckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7CiAg
ICAgfQogCiAgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZs
dXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CkBAIC0xMDQsMTAg
KzExMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBhdXRvJiBk
aXNwbGF5TGlzdCA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5t
X2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlzdC5p
dGVtQ291bnQoKSkgewotICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Jj4oKnRoaXMpLmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOworICAgICAgICBhdXRv
JiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlz
KTsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250
ZXh0LmRpc3BsYXlMaXN0KCk7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsK
ICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICBtdXRhYmxlVGhp
cy5tX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0ID0gMDsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIGdldEltYWdlRGF0YSBpcyBzeW5jaHJvbm91cywgd2hpY2ggbWVhbnMgd2UndmUgYWxy
ZWFkeSByZWNlaXZlZCB0aGUgQ29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQgbWVzc2FnZS4K
QEAgLTE0MSwxOCArMTQ5LDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KTsKLSAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKGRp
c3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBUcmFj
ZVNjb3BlIHRyYWNpbmdTY29wZShGbHVzaFJlbW90ZUltYWdlQnVmZmVyU3RhcnQsIEZsdXNoUmVt
b3RlSW1hZ2VCdWZmZXJFbmQsIDEpOwogICAgICAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChk
aXNwbGF5TGlzdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkudW5s
b2NrUmVtb3RlUmVzb3VyY2VzRm9yUmVtb3RlQ2xpZW50KG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICAgICAgbV9pdGVtQ291
bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaERpc3Bs
YXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IHx8ICFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKCFtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCBkaXNwbGF5TGlzdC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoRmx1c2hSZW1v
dGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJlbW90ZUltYWdlQnVmZmVyRW5kKTsKQEAgLTE3MCwy
MCArMTc5LDEzMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0m
KSBvdmVycmlkZQorICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgY29uc3RleHByIHNpemVf
dCBEaXNwbGF5TGlzdEJhdGNoU2l6ZSA9IDUxMjsKICAgICAgICAgYXV0byYgZGlzcGxheUxpc3Qg
PSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlz
dC5pdGVtQ291bnQoKSA8IERpc3BsYXlMaXN0QmF0Y2hTaXplKQorICAgICAgICBpZiAoKyttX2l0
ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0IDwgRGlzcGxheUxpc3RCYXRjaFNpemUpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgZmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7
CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNvdW50SW5DdXJy
ZW50RGlzcGxheUxpc3QgPSAwOwogICAgIH0KIAotICAgIHZvaWQgZGlkQXBwZW5kSXRlbShjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSkgb3ZlcnJpZGUKKyAgICBib29sIHJl
cXVpcmVzRW5jb2RpbmcoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiAhV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRlbSh0eXBlKTsKKyAgICB9CisKKyAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVf
dCBjYXBhY2l0eSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZlcihjYXBhY2l0eSk7CisKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZSBpdGVtKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpdGVt
LnR5cGUoKSkgeworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgor
ICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6
ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0dseXBocz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5j
b2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+
KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4
dDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZl
SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6
CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmpl
Y3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZElt
YWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KCkpOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoQ29sb3I+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVt
LmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkpOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRS
ZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6
RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+
KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVu
Y29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyNpZiBVU0Uo
Q0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZp
bGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0
b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRl
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkaWRBcHBlbmRJ
dGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAg
ICAgfQogCkBAIC0xOTEsNiArMzEwLDcgQEAgcHJvdGVjdGVkOgogICAgIERpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHsg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiAgICAg
V2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OworICAgIHNpemVfdCBtX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0IHsg
MCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKaW5kZXggN2EwMTkzMGFiNjZjNDQ3MzA1MTA5MzAzNGQ0ZjM2ZDJj
MGU2NDhhMi4uOWRmMTIxNDhiMGE0NWM5YTlhZjQ5ZDExZmM5YTMwYTE5ZWUxNmU1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMzQsNiArMzQsOCBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgogI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDEzICsxMTgsMTMgQEAgUmVmUHRyPEltYWdl
RGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGkKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlz
cGxheUxpc3QoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlM
aXN0KGRpc3BsYXlMaXN0LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KHsgZGlzcGxheUxpc3QgfSwgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKIERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQogewogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50
aWZpZXIgPSBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29t
bWl0KGRpc3BsYXlMaXN0LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KHsg
ZGlzcGxheUxpc3QgfSwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHNlbnRG
bHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NSw2ICsxNTcsMzEgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoRGlzcGxheUxp
c3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVy
UHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hEaXNwbGF5TGlzdChmbHVzaElkZW50aWZp
ZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVNoYXJl
ZEl0ZW1CdWZmZXJzKFZlY3RvcjxEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+JiYg
aWRlbnRpZmllcnMsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCit7CisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykg
eworICAgICAgICBpZiAoIW1fc2hhcmVkSXRlbUJ1ZmZlcnMucmVtb3ZlKGlkZW50aWZpZXIpKQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0Rp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8PCAxNjsKKworICAgIGF1
dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6Om1heChkZWZhdWx0
U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5KSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgU2hhcmVkTWVtb3J5OjpI
YW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOworICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxl
KHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkQ3JlYXRlU2hh
cmVkSXRlbURhdGEoaWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJlZE1lbW9yeUhhbmRsZSksIHNo
YXJlZE1lbW9yeS0+c2l6ZSgpIH0pLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBzaGFyZWRNZW1vcnkuY29weVJl
ZigpKTsKKworICAgIHJldHVybiB7IGlkZW50aWZpZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkgfTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA5OTU2NWI2ZjE2NmJiMmQ4
MDYxNDE4NDk3MmUzNDM3MDZjZTdmZWM5Li4xMzFlNDkxOTZkZDk1YTI3NWI4MTUxYjg1NmViYTUz
YzY5N2Y0NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCkBAIC02MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KCk7CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9CisgICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihz
aXplX3QpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTcyLDYgKzc0
LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKTsK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRD
cmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik7CiAgICAgRGlzcGxheUxpc3RG
bHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAKQEAgLTg0LDcgKzg3LDkgQEAgcHJpdmF0ZToKICAgICAv
LyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGltYWdlQnVmZmVyQmFja2VuZFdh
c0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1p
dHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VTaGFyZWRJdGVtQnVmZmVycyhWZWN0b3I8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyPiYmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3No
YXJlZEl0ZW1CdWZmZXJzOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJl
c291cmNlQ2FjaGVQcm94eSB7ICp0aGlzIH07CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4ZjI0NTg1NjM1ZjQ3MDgzZDFkYjI3YTViMzk2
NjY1ZjMxNWViY2IwLi43OWE5ODY2NTA2ZDFjMjVhMDk2YmE1MTQ2OTZiZDljOGJhOTIzMTBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5p
bgpAQCAtMjMsOCArMjMsOSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMg
LT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgewotICAgIHZvaWQg
SW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNp
emUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0V2FzQ29t
bWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQorICAgIEltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoV2ViQ29yZTo6Rmxv
YXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxh
eUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVz
aElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFZlY3Rv
cjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+IGlkZW50aWZpZXJz
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmluZGV4IDNmNWE3M2JlYzNiZjI4NmU1Mjk4MWRlNDhi
OTBjMzFkMDE5ZDhjM2QuLjBmOWE2ZThmMTllMWQ5ODU2OWZlZDFiYmM0MWQwNzY4M2VhY2YxYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODFmZDhlNjQ0NDU2
MzYzYTIwN2RiN2EwMmFhNWU3ODIzMGY3MWNiMC4uMmJiMTEyMGZmMjRkYTk4M2NlODkzY2E3NGZl
ODAwYmY0MjRhMDllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTMwICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRp
c3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFy
ZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWJhc2VsaW5lIHNldmVyYWwgZXhpc3RpbmcgKG5vbi1HUFUtcHJvY2VzcykgZGlzcGxheSBs
aXN0IHRlc3RzIHRvIGFjY291bnQgZm9yIGEgc2xpZ2h0IHR3ZWFrIGluIHRoZSBmb3JtYXQgaW4K
KyAgICAgICAgd2hpY2ggZGlzcGxheSBsaXN0cyBhcmUgZHVtcGVkIGFzIHRleHQuIE1vcmUgc3Bl
Y2lmaWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgbm93IGR1bXBlZCBhZnRlciBlYWNo
CisgICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0aGVyIHRoYW4gYmVmb3JlLgorCisgICAgICAgICog
ZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQ6CisKIDIwMjAtMTAtMzAgIEthcmwgUmFja2xlciAgPHJhY2tsZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjkwNzApOiBbIEJpZyBTdXIgXSBlZGl0aW5nL2lucHV0
L3JldmVhbC1jYXJldC1vZi1tdWx0aWxpbmUtaW5wdXQuaHRtbCBpcyBhIGNvbnN0YW50IGZhaWx1
cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1s
aXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxh
eS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAzMjg4NDgwNjI3MDE5ZDU0MDJkOTQyNWZjNGExMzEz
NzcwZWNiMzFhLi4xNDUxYjE5MjUzYzMyMzg5MjhiYmQ5ZjVlNWRlYmI5Mjc0YzUwZDU3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxp
c3QtZXhwZWN0ZWQudHh0CkBAIC02LDEwICs2LDggQEAKICAgKGZpbGwtY29sb3IgI0M4MDAwMCkK
ICAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQg
YXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
KyAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSBleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1
NXg1MCkKIChzZXQtaW5saW5lLWZpbGwtY29sb3IKICAgKGNvbG9yICMwMDAwQzg4MCkpCiAoZmls
bC1yZWN0Ci0gIChleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDMw
LDMwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSBleHRlbnQg
YXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCBlOWY1
NDA0MTdiZDZlNWRjNzc4NjE1ZTVmMzc5NDk3NmU0MTk1ZjhkLi41OTBiOTNmNWM4OTJjYWUzN2Y0
MjQ2MDlhOGZlNDgwMzNlNjY4MzY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC05LDkg
KzksOCBAQAogICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dz
LXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQg
YXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAw
KQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIp
Ci0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0
ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVj
dGVkLnR4dAppbmRleCBlMDQ1MmExNzNhMWFmZTIzN2Y3MjhkMzBiYzI3ZWM2MGVlYzk2MjNkLi4y
OGNjZjRjMDE4NTlkZTE5MGIwYTlhMjdmYTJmZWMwMDYzZWQ4ZTFjIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNm
b3Jtcy1leHBlY3RlZC50eHQKQEAgLTExLDExICsxMSwxMCBAQAogICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZp
bGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4
MTg1LjY1KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZG
KQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9y
bWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAx
ODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCiAoc2V0LWN0bQogICAoc2V0LWN0bSB7bT0oKDEuMDAs
MC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJk
ODc2ZGY0MDNhNGFkZDBiYzM5MWY3YzYyYWMyYjRjM2JjZjdkYTAuLmJjMTdiNTExNDk5ZjgyNTZj
OTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMywyOSArMywyNCBA
QAogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0
ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0
KQogICAoY29sb3IgIzAwODAwMCkKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIp
Ci0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0
ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKICAgKGNoYW5nZS1mbGFncyAzMjk2MCkK
ICAgKGZpbGwtY29sb3IgIzAwMDBGRikKICAgKHN0cm9rZS1zdHlsZSAwKQogICAoc2hvdWxkLWFu
dGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQog
ICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQotICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkK
KyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDIpCiAo
ZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQogICAocmVjdCBhdCAo
MCwxMDIpIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVy
LXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQogKGRyYXctcmVj
dAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUg
MngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAx
LjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBh
dCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKLSAg
KGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVu
dCBhdCAoMTAyLDApIHNpemUgMngxMDQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CmluZGV4
IGFkZGQyY2E0MjUwYzI0YTBjOWVlMjI1NWQ0Mjc1YTc2ZjYwNDNlZWQuLmJiNTkzZDIwZjZkYTY0
ODYyOTJkMzZjMDIyMGUyYTlkODcyZjgyYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0
CkBAIC0zLDExICszLDEwIEBAIHJlY29yZGVkOgogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChm
aWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQog
ICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChj
b21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQor
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAog
cmVwbGF5ZWQ6CiAoCg==
</data>
<flag name="commit-queue"
          id="429516"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412985</attachid>
            <date>2020-11-02 16:11:01 -0800</date>
            <delta_ts>2020-11-02 17:08:50 -0800</delta_ts>
            <desc>More WIP (feedback + more build fixes)</desc>
            <filename>bug-218406-20201102161100.patch</filename>
            <type>text/plain</type>
            <size>395431</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI3NWNmNjJmYzhiYmE5
NzMxMDQxZDU3ZTcwOTU0MTVhYWZiY2YwMy4uZDRjYzMzMDYwOGVjMGE1OGI3MTRlYzc2ZTNiN2Fm
ODY5N2U0NmJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxOCBAQAorMjAyMC0xMS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpkdW1wRHJhd2luZ0l0
ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojph
c1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJ
dGVtRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjp1cGRhdGVDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVu
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6bW92ZVRvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDo6aXRlcmF0b3I6Om1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6dHJhY2tzRHJhd2luZ0l0ZW1F
eHRlbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6aXRlcmF0b3I6On5pdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXJJZkV4aXN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFkZERyYXdpbmdJdGVtRXh0ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc0RyYXdpbmdJdGVtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6bGlz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6Oml0ZW1BdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZW1Db3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6dGFrZURpc3BsYXlM
aXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fYWxsb2NhdGVkQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6bV9yZWFkT25seUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Om1fd3JpdGFibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1f
d3JpdHRlbk51bWJlck9mQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6Zm9yRWFjaEl0ZW1CdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGU6Om9wZXJhdG9yIGJv
b2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5k
bGU6Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjppcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUhhbmRsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVu
dDo6fkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVyOjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnJlYWRPbmx5QnVmZmVycyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2Vu
ZXJhdGVHbHlwaEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0dseXBoczo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUluQnl0ZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpEcmF3aW5nSXRlbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6U2F2ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6UmVzdG9yZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNU
TTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tl
VGhpY2tuZXNzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRl
ckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNo
YWRvdzo6Q2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXA6OkNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXQ6OkNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpE
cmF3Rm9jdXNSaW5nUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OkZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
SW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ry
b2tlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
RWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpDbGVhclJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlT
dHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25j
YXRlbmF0ZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
b25jYXRlbmF0ZUNUTTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
RmlsbENvbG9yOjpTZXRJbmxpbmVGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvcjo6U2V0SW5saW5lU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpjb2xvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xv
cjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdHJva2VUaGlja25lc3M6OlNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjp0aGlja25lc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzczo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGlu
ZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpv
aW46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpyZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0
aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBQYXRoOjpDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBh
dGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpE
cmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
SW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1RpbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2VCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d05hdGl2ZUltYWdlOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
OjpEcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UGF0dGVybjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpE
cmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZTo6RHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5l
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lc0ZvclRleHQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9j
dXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVj
dFdpdGhDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Q29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6cmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVs
bGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxp
cHNlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhOjppbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JN
ZWRpYTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0
cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlw
c2U6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVs
bGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xlYXJSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0
ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlGaWxsUGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFj
dG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6c2V0RXh0ZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0ZW50IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0
ZW50S25vd24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdJdGVtOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjplbmNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRy
YW5zbGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Um90YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE06OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VD
b2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91
dDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwT3V0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmVu
Y29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5s
aW5lUGF0aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRG
cmFtZUZvck1lZGlhOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUlubGluZVBhdGg6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6
ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJu
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9y
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkQXBwZW5kSXRlbU9mVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6d2lsbEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkaWRBcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZEl0ZW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRh
dGVJdGVtRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OmRpZEFw
cGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjppdGVt
Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpEZWxlZ2F0ZTo6d2lsbEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZTo6ZGlkQXBwZW5kSXRlbSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVy
OjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5
ZXI6OkRlbGVnYXRlOjphcHBseSk6CisKIDIwMjAtMTAtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFtHUFUgUHJvY2Vzc10gUGVy
Zm9ybSBpbWFnZSBkZWNvZGluZyBvZiBjb2xvciBmb250cyBpbiB0aGUgV2ViIFByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTE1N2I3MDg1ZTQyYThjOTQ3ZDVhNWU2YTk5Y2FkMjZmMzMwOTNhOS4uZGZkZjQz
Nzk0MTJlMDkwYjQ1Y2E5MTk0MGQ0OTMyZjQ2YmZjYmZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
NiBAQAorMjAyMC0xMS0wMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbQ29uY3VycmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0
IGl0ZW1zIGRpcmVjdGx5IGludG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKC4uLnRoaXMgQ2hhbmdlTG9nIGlzIGdvaW5nIHRv
IG5lZWQgd29yZHMpCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpkZWNvZGVBbmRD
cmVhdGUpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
UmVzb3VyY2VJdGVtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
YXBwbHlNZWRpYUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjphcHBseURpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZEl0ZW1CdWZmZXIgY29uc3Qp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHA6CisgICAgICAg
IChJUEM6OkRlY29kZXI6OkRlY29kZXIpOgorICAgICAgICAoSVBDOjptX2J1ZmZlckRlYWxsb2Nh
dG9yKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpE
ZWNvZGVyOjpkZWNvZGVPYmplY3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNw
cDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChJUEM6OkVuY29k
ZXI6OnJlbGVhc2VBdHRhY2htZW50cyk6CisgICAgICAgIChJUEM6OkVuY29kZXI6Omhhc0F0dGFj
aG1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9TaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QgY29uc3QpOgorICAg
ICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpkZWNvZGUpOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OmZsdXNoRHJhd2luZ0NvbnRleHRBbmRDb21taXQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlz
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDoKKwogMjAyMC0xMC0zMCAgQnJpYW4gQnVyZyAgPGJi
dXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlciB0byBXZWJDb3JlLCBjbGVhbiB1cCB1c2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDYzNzcxYjA0MDU4N2E5NDg1ZjQ0NjA4ZjhjMTI4M2VmNzZjNjE1ZjkuLjQ5MTUwZDY3
NTU0OTkxMjk4MzFkYTRlOTNjYzY3NmY2OGMzOTc0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYx
LDYgKzE5NjEsOCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY2
YWY1MGQyMWVjMjc3NjQ2ZGMxNDdlNDg2ODY1MmJhYzI1MDY3MmUuLjJiMDZhMzQ0OGQ5ZTkyNTAw
ZTZjYjcyNGNhNGIyOTFhYmE3ZGEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUxNjAsNiArNTE2MCw3IEBACiAJCUYzQUJG
RTBDMTMwRTlEQTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3
RDEgLyogSW5zdHJ1bWVudGluZ0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBD
QTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxl
ci5oICovOyB9OwogCQlGNDAzRTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIz
NjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0MjkyNjE4MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRE
NDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQg
LyogU3RhdGljUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDQw
RTc3QTIzM0Q5NEQ3MDA2M0Y5QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQwRTc2RjIzM0Q5NEQzMDA2M0Y5
QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggKi87IH07CkBAIC01MTg0LDYgKzUxODUsNyBAQAog
CQlGNDhEMkE3RTIxNTcxODI2MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2
NzUyQiAvKiBGb250QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29h
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFB
MzIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5oICovOyB9OwogCQlGNDk3ODY4ODFGRjQ1
RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFz
dGVib2FyZEl0ZW1JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRjRBNkQ2QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZE
NkEzMjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAw
OUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nl
c3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
NEJGQjk4NTFFMURERjlCMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkg
U2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURE
RjJCMDA3NkI3RUEgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwogCQlGNEJGQjk4NjFF
MURERjlCMDA4NjJDMjQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgU2NyaXB0cyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4NDFFMURERjJCMDA3NkI3
RUEgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovOyB9OwpAQCAtMTYzMTEsNiArMTYzMTMsOCBA
QAogCQlGM0Q0NjE0NzExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGlu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjQwM0U3ODYyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFbnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQwMDAwNzg5
OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0MjE0MDMx
RUUwMDJEQ0E3MiAvKiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2FyZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzNjQsNiArMTYzNjgsOCBAQAogCQlGNDhE
MkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENvbG9yQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3
MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFzdGVib2FyZEl0ZW1JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5
OEU0MjFERUU2QzEwMDlBRTU1RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEVkaXRBY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBMzI1
NEM1MTJDMDBCNjVGQUEgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXNwbGF5TGlzdEl0ZW1UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZE
NkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NUGFzdGVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjRDNUYyMDUyNDc5RTdFRTAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENsaXBib2FyZEltYWdlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0QzVGMjA4MjQ3OUU5QzgwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzYxOCw4ICsxNzYyNCwxMiBAQAogCQkJCTU1QzBB
Mjk1MjNGRTJDRTAwMEYyQ0I5MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywK
IAkJCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oICovLAogCQkJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmggKi8sCisJCQkJRjQyMkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0
SXRlbUJ1ZmZlci5jcHAgKi8sCisJCQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RJdGVtcy5oICovLAorCQkJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBE
aXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLywKKwkJCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEg
LyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKIAkJCQkwRkU1RkJDRjFDM0RENTFFMDAw
N0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oICovLAogCQkJCTBGRTVGQkQwMUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLywKQEAgLTMxNDQyLDcgKzMxNDUy
LDkgQEAKIAkJCQkxQ0FGNTZEQjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQy
RiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NUFE
MDkzRTI0MDg5NjM1MDBERTREMkYgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkE0MjU0QzUxMkMwMEI2
NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJE
NzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2
YTgwYjg0NjAwZTBhMmJiMDU1NTIzOTU1ZmU5Y2M2MGE5YWVjM2NiLi5mNDdkYmQyZDlmOGJlMmU4
NTU1YWI2ZDk2NzhhOTVlNjY1ZGEyODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjAy
MSw3ICsyMDIxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgQVNTRVJUKG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyk7CiAKICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlz
cGxheUxpc3QoKTsKLSAgICBpZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICBpZiAo
IWRpc3BsYXlMaXN0LmlzRW1wdHkoKSkgewogICAgICAgICBEaXNwbGF5TGlzdDo6UmVwbGF5ZXIg
cmVwbGF5ZXIoKmNhbnZhc0Jhc2UoKS5kcmF3aW5nQ29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CiAg
ICAgICAgIHJlcGxheWVyLnJlcGxheSh7IEZsb2F0UG9pbnQ6Onplcm8oKSwgY2FudmFzQmFzZSgp
LnNpemUoKSB9KTsKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMGQxY2E5
MmQ2MDQ1ZWIzN2E3OGQzZTE4OTdjMjZmNDJiOWM3NmYzYS4uNTlkMzIzMGUwZThmNDM2MGQ3M2Vi
MzM2ODI1MzRhM2U0OTBhNjgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4
dFN0YXRlKCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVy
YXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAg
IGVudW0gQ2hhbmdlIDogdWludDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRl
eCBmZmQ5ZDZkZGZiNjBhYzFhMDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi41MjVmMjg2MWUxYjY3
YTllMGJhMmRjZTdiYmU5ODZhNGEzMWZlOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
QEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUxpc3QuaCIKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5
TGlzdDo6ZHVtcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
KERpc3BsYXlMaXN0JiYgb3RoZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9pdGVtcywgbnVsbHB0cikpCisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVt
cyhtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlM
aXN0KCkgPSBkZWZhdWx0OworCitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShE
aXNwbGF5TGlzdCYmIG90aGVyKQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1faXRlbXMsIG51bGxwdHIpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX2RyYXdpbmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKIHZvaWQgRGlzcGxheUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsK
KyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdp
bmdJdGVtRXh0ZW50cy5jbGVhcigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUg
aXRlbSkKIHsKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CiAgICAgICAgIGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0
Zm9ybU9wZXJhdGlvbnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBk
b3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0
ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93
LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBw
bGF0Zm9ybS1zcGVjaWZpYy4KICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2No
YW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHNDaGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODAsMTMgKzEw
NSwyNiBAQCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2
b2lkIGR1bXBEcmF3aW5nSXRlbUV4dGVudChUZXh0U3RyZWFtJiBzdHJlYW0sIE9wdGlvbmFsPEZs
b2F0UmVjdD4mJiBleHRlbnQpCit7CisgICAgc3RyZWFtIDw8ICIgZXh0ZW50ICI7CisgICAgaWYg
KGV4dGVudCkKKyAgICAgICAgc3RyZWFtIDw8ICpleHRlbnQ7CisgICAgZWxzZQorICAgICAgICBz
dHJlYW0gPDwgInVua25vd24iOworfQorCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1Rl
eHRGbGFncyBmbGFncykgY29uc3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFt
OjpMaW5lTW9kZTo6TXVsdGlwbGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHls
ZVJlY3QpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBb
aXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdz
KGZsYWdzLCBpdGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJl
YW06Okdyb3VwU2NvcGUgZ3JvdXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07Cisg
ICAgICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIGR1bXBEcmF3aW5n
SXRlbUV4dGVudChzdHJlYW0sIFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogICAgIHJldHVybiBz
dHJlYW0ucmVsZWFzZSgpOwogfQpAQCAtOTYsMTAgKzEzNCwxMSBAQCB2b2lkIERpc3BsYXlMaXN0
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUg
Z3JvdXAodHMpOwogICAgIHRzIDw8ICJkaXNwbGF5IGxpc3QiOwogCi0gICAgc2l6ZV90IG51bUl0
ZW1zID0gbV9saXN0LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1z
OyArK2kpIHsKLSAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7Ci0gICAg
ICAgIHRzIDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0
ZW0sIGV4dGVudF0gOiAqdGhpcykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdy
b3VwKHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5n
SXRlbSgpKQorICAgICAgICAgICAgZHVtcERyYXdpbmdJdGVtRXh0ZW50KHRzLCBXVEZNb3ZlKGV4
dGVudCkpOwogICAgIH0KICAgICB0cy5zdGFydEdyb3VwKCk7CiAgICAgdHMgPDwgInNpemUgaW4g
Ynl0ZXM6ICIgPDwgc2l6ZUluQnl0ZXMoKTsKQEAgLTEwOCwxMyArMTQ3LDI3NiBAQCB2b2lkIERp
c3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogCiBzaXplX3QgRGlzcGxheUxp
c3Q6OnNpemVJbkJ5dGVzKCkgY29uc3QKIHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBm
b3IgKGF1dG8mIHJlZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5
dGVzKHJlZik7CisgICAgcmV0dXJuIG1faXRlbXMgPyBtX2l0ZW1zLT5zaXplSW5CeXRlcygpIDog
MDsKK30KKworYm9vbCBEaXNwbGF5TGlzdDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2l0ZW1zIHx8IG1faXRlbXMtPmlzRW1wdHkoKTsKK30KKworSXRlbUJ1ZmZlciYgRGlzcGxh
eUxpc3Q6Oml0ZW1CdWZmZXIoKQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgbV9pdGVt
cyA9IG1ha2VVbmlxdWU8SXRlbUJ1ZmZlcj4oKTsKKyAgICByZXR1cm4gKm1faXRlbXM7Cit9CisK
K3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9
CisKK3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7
Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGlm
IChtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3ZlKG1h
cEZ1bmN0aW9uKSk7Cit9CiAKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBEaXNwbGF5TGlzdDo6
c2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoIW1faXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpKTsKKyAgICBtX3RyYWNrc0RyYXdp
bmdJdGVtRXh0ZW50cyA9IHZhbHVlOwogfQogCit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRl
bUhhbmRsZSBpdGVtKQoreworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTYXZlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNs
YXRlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRl
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0
ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGluZUZp
bGxHcmFkaWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5s
aW5lRmlsbENvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbS5nZXQ8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0u
Z2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNl
dExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVEYXNoOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxT
ZXRMaW5lRGFzaD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNl
dE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVt
LmdldDxDbGVhclNoYWRvdz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXBPdXQ+KGl0ZW0uZ2V0PENsaXBP
dXQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcFBhdGg+
KGl0ZW0uZ2V0PENsaXBQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6CisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGFiaWxpdHkg
dG8gY2xvbmUgZGlzcGxheSBsaXN0cyAodGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBk
aXNwbGF5IGxpc3QgdHJhY2tpbmcpLgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0dseXBocz4oaXRlbS5nZXQ8RHJhd0dseXBocz4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdJbWFnZT4oaXRlbS5nZXQ8RHJhd0ltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaXRlbS5n
ZXQ8RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
LmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0lt
YWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaXRlbS5n
ZXQ8RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpdGVtLmdldDxEcmF3
TmF0aXZlSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdQYXR0ZXJuPihpdGVtLmdldDxEcmF3UGF0dGVybj4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1Jl
Y3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGluZT4oaXRlbS5nZXQ8RHJhd0xpbmU+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtLmdldDxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxEcmF3RWxsaXBzZT4oaXRlbS5nZXQ8RHJhd0VsbGlwc2U+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQ
YXRoPihpdGVtLmdldDxEcmF3UGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0u
Z2V0PERyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVt
LmdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0PihpdGVtLmdldDxGaWxsUmVjdD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVk
UmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KCkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxJ
bmxpbmVQYXRoPihpdGVtLmdldDxGaWxsSW5saW5lUGF0aD4oKSk7CisjZW5kaWYKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUGF0aD4oaXRl
bS5nZXQ8RmlsbFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5k
PFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFt
ZUZvck1lZGlhPihpdGVtLmdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUmVjdD4oaXRl
bS5nZXQ8U3Ryb2tlUmVjdD4oKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxT
dHJva2VJbmxpbmVQYXRoPihpdGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ry
b2tlUGF0aD4oaXRlbS5nZXQ8U3Ryb2tlUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VFbGxpcHNlPihpdGVtLmdl
dDxTdHJva2VFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJSZWN0PihpdGVtLmdldDxDbGVhclJlY3Q+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEVuZFRyYW5z
cGFyZW5jeUxheWVyPigpKTsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4o
aXRlbS5nZXQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KGl0
ZW0uZ2V0PEFwcGx5RmlsbFBhdHRlcm4+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseURldmlj
ZVNjYWxlRmFjdG9yPihpdGVtLmdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpKTsKKyAgICB9
Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBhdXRvIGVuZEN1cnNv
ciA9IGl0ZW1zLm1fd3JpdGFibGVCdWZmZXIuZGF0YSArIGl0ZW1zLm1fd3JpdHRlbk51bWJlck9m
Qnl0ZXM7CisgICAgcmV0dXJuIG1fY3Vyc29yID09IGVuZEN1cnNvcjsKK30KKwordm9pZCBEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVtKCkKK3sKKyAgICBjbGVhckN1cnJl
bnRJdGVtKCk7CisKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gaXRlbVR5cGUgPSBz
dGF0aWNfY2FzdDxJdGVtVHlwZT4obV9jdXJzb3JbMF0pOworICAgIGlmIChpc0RyYXdpbmdJdGVt
KGl0ZW1UeXBlKSAmJiAhbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJ
dGVtRXh0ZW50c1ttX2RyYXdpbmdJdGVtSW5kZXhdOworICAgICAgICBtX2RyYXdpbmdJdGVtSW5k
ZXgrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byogY2xpZW50ID0gaXRlbXMubV9yZWFkaW5nQ2xpZW50OworICAgIGlmIChj
bGllbnQgJiYgY2xpZW50LT5yZXF1aXJlc0RlY29kaW5nKGl0ZW1UeXBlKSkgeworICAgICAgICBh
dXRvIHNpemVPZlR5cGVBbmRJdGVtID0gc2l6ZU9mSXRlbUluQnl0ZXMoaXRlbVR5cGUpICsgc2l6
ZW9mKEl0ZW1UeXBlKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBz
aXplT2ZUeXBlQW5kSXRlbSA8PSBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA/IG1f
Zml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgOiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihm
YXN0TWFsbG9jKHNpemVPZlR5cGVBbmRJdGVtKSk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlckZv
ckRlY29kZWRJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXRlbVR5cGUpOworCisgICAg
ICAgIGF1dG8gc2l6ZU9mRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4obV9jdXJzb3Ig
KyBzaXplb2YoSXRlbVR5cGUpKVswXTsKKyAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBt
X2N1cnNvciArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgc2l6
ZV90IHBhZGRpbmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oc3RhcnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50
NjRfdCk7CisgICAgICAgIGF1dG8gZGVjb2RlZEl0ZW1IYW5kbGUgPSBjbGllbnQtPmRlY29kZUl0
ZW0oc3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nLCBzaXplT2ZEYXRhLCBpdGVtVHlwZSwgbV9jdXJy
ZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBpZiAoIWRlY29kZWRJdGVtSGFuZGxl
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBjcmFzaGluZywgdGhpcyBuZWVk
cyB0byBmYWlsIGdyYWNlZnVsbHkgYW5kIGluZm9ybSB0aGUgY2FsbGVyLgorICAgICAgICAgICAg
Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGFzc2VydGlvbiBtYWtlcyBidWdzIGluIGl0ZW0g
YnVmZmVyIGVuY29kaW5nIGxvZ2ljIGVhc2llcgorICAgICAgICAgICAgLy8gdG8gY2F0Y2ggYnkg
YXZvaWRpbmcgbXlzdGVyaW91cyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3RseSBh
bGlnbmVkIGl0ZW1zCisgICAgICAgICAgICAvLyBkb3duIHRoZSBsaW5lLgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2N1cnJl
bnRJdGVtID0gKmRlY29kZWRJdGVtSGFuZGxlOworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUlu
QnVmZmVyID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIHNp
emVPZkRhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IEl0ZW1IYW5k
bGUgeyBtX2N1cnNvciB9OworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gbV9j
dXJyZW50SXRlbS5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRv
cjo6YWR2YW5jZSgpCit7CisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY3Vyc29yICs9IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXI7CisKKyAgICBpZiAobV9jdXJz
b3IgPT0gbV9jdXJyZW50RW5kT2ZCdWZmZXIgJiYgbV9yZWFkT25seUJ1ZmZlckluZGV4IDwgbV9k
aXNwbGF5TGlzdC5tX2l0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCkpIHsKKyAgICAgICAg
bV9yZWFkT25seUJ1ZmZlckluZGV4Kys7CisgICAgICAgIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJy
ZW50QnVmZmVyKCk7CisgICAgfQorCisgICAgdXBkYXRlQ3VycmVudEl0ZW0oKTsKK30KKwordm9p
ZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVudEl0ZW0oKQoreworICAgIG1fY3Vy
cmVudEl0ZW1TaXplSW5CdWZmZXIgPSAwOworCisgICAgaWYgKGF1dG8gaXRlbSA9IHN0ZDo6ZXhj
aGFuZ2UobV9jdXJyZW50SXRlbSwgeyB9KSkKKyAgICAgICAgaXRlbS5kZXN0cm95KCk7CisKKyAg
ICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gIT0gbV9maXhlZEJ1
ZmZlckZvckRlY29kZWRJdGVtcykpIHsKKyAgICAgICAgZmFzdEZyZWUobV9jdXJyZW50QnVmZmVy
Rm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSA9
IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZVRv
RW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXMpIHsK
KyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRlbXMt
Pm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0g
bV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9IGl0ZW1zLT5tX3JlYWRP
bmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRv
cjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKQoreworICAgIGF1dG8mIGl0ZW1z
ID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICghaXRlbXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMgPSBpdGVtcy0+bV9yZWFkT25s
eUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXggPCBudW1iZXJP
ZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBuZXh0QnVmZmVySGFuZGxlID0gaXRl
bXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZmZXJJbmRleF07CisgICAgICAgIG1f
Y3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAgICAgICBtX2N1cnJlbnRFbmRPZkJ1
ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5jYXBhY2l0eTsKKyAgICB9IGVsc2Ug
aWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykgewor
ICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRhdGE7CisgICAgICAg
IG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBpdGVtcy0+bV93cml0dGVuTnVtYmVy
T2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKIAogVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggZDZiZTI3
NGM2OGRlZWZiNGMwZDUzNjFiZTY0ODE1MjQwMzJjOWY0MS4uODgxOGQ1YjVkMmZiMjZhZGE3NzVl
OTkwZDA0ZDk5MWY3YTFlZWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTI1LDEwICsy
NSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtMzksMTAxICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIAotZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewotICAgIFNhdmUs
Ci0gICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAotICAgIFNjYWxlLAot
ICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKLSAgICBTZXRJbmxpbmVGaWxsR3JhZGll
bnQsCi0gICAgU2V0SW5saW5lRmlsbENvbG9yLAotICAgIFNldElubGluZVN0cm9rZUNvbG9yLAot
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKLSAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCi0gICAgQ2xpcCwKLSAgICBDbGlwT3V0LAotICAgIENsaXBPdXRUb1Bh
dGgsCi0gICAgQ2xpcFBhdGgsCi0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzLAotICAgIERyYXdH
bHlwaHMsCi0gICAgRHJhd0ltYWdlLAotICAgIERyYXdUaWxlZEltYWdlLAotICAgIERyYXdUaWxl
ZFNjYWxlZEltYWdlLAotICAgIERyYXdJbWFnZUJ1ZmZlciwKLSAgICBEcmF3TmF0aXZlSW1hZ2Us
Ci0gICAgRHJhd1BhdHRlcm4sCi0gICAgRHJhd1JlY3QsCi0gICAgRHJhd0xpbmUsCi0gICAgRHJh
d0xpbmVzRm9yVGV4dCwKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyLAotICAgIERyYXdF
bGxpcHNlLAotICAgIERyYXdQYXRoLAotICAgIERyYXdGb2N1c1JpbmdQYXRoLAotICAgIERyYXdG
b2N1c1JpbmdSZWN0cywKLSAgICBGaWxsUmVjdCwKLSAgICBGaWxsUmVjdFdpdGhDb2xvciwKLSAg
ICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCi0gICAgRmls
bFJvdW5kZWRSZWN0LAotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAotI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQotICAgIEZpbGxJbmxpbmVQYXRoLAotI2VuZGlmCi0gICAgRmlsbFBh
dGgsCi0gICAgRmlsbEVsbGlwc2UsCi0gICAgUHV0SW1hZ2VEYXRhLAotICAgIFBhaW50RnJhbWVG
b3JNZWRpYSwKLSAgICBTdHJva2VSZWN0LAotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIFN0cm9rZUlubGluZVBhdGgsCi0jZW5kaWYKLSAgICBTdHJva2VQYXRoLAotICAgIFN0cm9r
ZUVsbGlwc2UsCi0gICAgQ2xlYXJSZWN0LAotICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCi0g
ICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIsCi0jaWYgVVNFKENHKQotICAgIEFwcGx5U3Ryb2tlUGF0
dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgotICAgIEFwcGx5
RmlsbFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KLSNl
bmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCi19OwotCi1jbGFzcyBJdGVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgotICAgIEl0ZW0oKSA9IGRlbGV0ZTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzRHJhd2luZ0l0ZW0o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9H
X0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYK
LSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mKTsKLQotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEl0ZW0+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBlIG1fdHlwZTsKLX07Ci0KIGVudW0gQXNU
ZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCiAgICAg
SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKQEAgLTE0Niw4NiArNTQs
MTA5IEBAIGNsYXNzIERpc3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlcGxheWVyOwogcHVibGljOgotICAgIERpc3BsYXlMaXN0KCkgPSBk
ZWZhdWx0OwotICAgIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlM
aXN0KERpc3BsYXlMaXN0JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KEl0ZW1C
dWZmZXJIYW5kbGVzJiYpOwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3BsYXlMaXN0KCk7CiAKLSAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
RGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9Ci0gICAgSXRlbSYg
aXRlbUF0KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fbGlz
dC5zaXplKCkpOwotICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKLSAgICB9Cisg
ICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCi0gICAg
c2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLSAgICAKICAgICBTdHJpbmcgYXNUZXh0KEFzVGV4
dEZsYWdzKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUJ1ZmZlckNs
aWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCopOworCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECiAgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RGlzcGxh
eUxpc3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZvckVh
Y2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmKSBj
b25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgYXBw
ZW5kKEFyZ3MmJi4uLiBhcmdzKTsKKyAgICB2b2lkIGFwcGVuZChJdGVtSGFuZGxlKTsKKworICAg
IGJvb2wgdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NE
cmF3aW5nSXRlbUV4dGVudHM7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRyYWNrc0Ry
YXdpbmdJdGVtRXh0ZW50cyhib29sKTsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGVudW0gY2xhc3MgSW1tZWRpYXRlbHlNb3ZlVG9FbmQgeyBObywgWWVzIH07
CisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1tZWRp
YXRlbHlNb3ZlVG9FbmQgaW1tZWRpYXRlbHlNb3ZlVG9FbmQgPSBJbW1lZGlhdGVseU1vdmVUb0Vu
ZDo6Tm8pCisgICAgICAgICAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseU1vdmVUb0VuZCA9PSBJbW1lZGlhdGVseU1v
dmVUb0VuZDo6WWVzKQorICAgICAgICAgICAgICAgIG1vdmVUb0VuZCgpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIo
KTsKKyAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgfml0ZXJhdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gJm1fZGlzcGxheUxpc3QgPT0gJm90aGVy
Lm1fZGlzcGxheUxpc3QgJiYgbV9jdXJzb3IgPT0gb3RoZXIubV9jdXJzb3I7IH0KKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBhZHZhbmNlKCk7IH0KKyAg
ICAgICAgc3RkOjpwYWlyPEl0ZW1IYW5kbGUsIE9wdGlvbmFsPEZsb2F0UmVjdD4+IG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jdXJyZW50SXRlbSwgbV9jdXJyZW50RXh0ZW50IH07IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkZp
eGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zID0gMjU2OworCisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKTsKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtb3ZlVG9FbmQoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhckN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlQ3Vy
cmVudEl0ZW0oKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKCk7CisgICAg
ICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKworICAgICAgICBjb25zdCBEaXNwbGF5TGlzdCYgbV9k
aXNwbGF5TGlzdDsKKyAgICAgICAgdWludDhfdCogbV9jdXJzb3IgeyBudWxscHRyIH07CisgICAg
ICAgIHNpemVfdCBtX3JlYWRPbmx5QnVmZmVySW5kZXggeyAwIH07CisgICAgICAgIHNpemVfdCBt
X2RyYXdpbmdJdGVtSW5kZXggeyAwIH07CisgICAgICAgIHVpbnQ4X3QqIG1fY3VycmVudEVuZE9m
QnVmZmVyIHsgbnVsbHB0ciB9OworCisgICAgICAgIHVpbnQ4X3QgbV9maXhlZEJ1ZmZlckZvckRl
Y29kZWRJdGVtc1tzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtc10geyAwIH07CisgICAg
ICAgIHVpbnQ4X3QqIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtIHsgbnVsbHB0ciB9Owor
ICAgICAgICBJdGVtSGFuZGxlIG1fY3VycmVudEl0ZW07CisgICAgICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbV9jdXJyZW50RXh0ZW50OworICAgICAgICBzaXplX3QgbV9jdXJyZW50SXRlbVNpemVJ
bkJ1ZmZlciB7IDAgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiB7ICp0aGlzIH07IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7ICp0
aGlzLCBpdGVyYXRvcjo6SW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcyB9OyB9CiAKIHByaXZhdGU6
Ci0gICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCi0gICAgewotICAgICAgICBtX2xp
c3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5n
ZXQoKTsKLSAgICB9CisgICAgSXRlbUJ1ZmZlciogaXRlbUJ1ZmZlcklmRXhpc3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtcy5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIm
IGl0ZW1CdWZmZXIoKTsKIAotICAgIC8vIExlc3MgZWZmaWNpZW50IGFwcGVuZCwgb25seSB1c2Vk
IGZvciB0cmFja2luZyByZXBsYXkuCi0gICAgdm9pZCBhcHBlbmRJdGVtKEl0ZW0mIGl0ZW0pCisg
ICAgdm9pZCBhZGREcmF3aW5nSXRlbUV4dGVudChPcHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50
KQogICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgQVNTRVJUKG1f
dHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKTsKKyAgICAgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMu
YXBwZW5kKFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxk
RHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzLCBjb25zdCBJdGVtJik7Ci0KLSAgICBWZWN0b3I8UmVm
PEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIHN0YXRpYyBib29sIHNob3Vs
ZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7CiAKLSAgICBWZWN0b3I8UmVm
PEl0ZW0+PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW1CdWZmZXI+IG1faXRlbXM7
CisgICAgVmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVjdD4+IG1fZHJhd2luZ0l0ZW1FeHRlbnRzOwor
ICAgIGJvb2wgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgeyB0cnVlIH07CiB9OwogCi0KLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERpc3BsYXlMaXN0OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+Cit2b2lk
IERpc3BsYXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGl0ZW1Db3Vu
dDsKLSAgICBkZWNvZGVyID4+IGl0ZW1Db3VudDsKLSAgICBpZiAoIWl0ZW1Db3VudCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0Owot
Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICppdGVtQ291bnQ7IGkrKykgewotICAgICAg
ICBhdXRvIGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBP
bmNlIHdlIGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBmYWlsaW5nIHRvIGRlY29kZSBhbiBpdGVtIHNo
b3VsZCB0dXJuIGludG8gYSBkZWNvZGUgZmFpbHVyZS4KLSAgICAgICAgLy8gRm9yIG5vdywgd2Ug
anVzdCBoYXZlIHRvIGlnbm9yZSBpdC4KLSAgICAgICAgaWYgKCFpdGVtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIGl0ZW1CdWZmZXIoKS5hcHBlbmQ8
VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogfSAvLyBEaXNwbGF5TGlzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGY3Y2E2YmJmZmQ5OGZhMGRmNjhhODEzNDhjYWVkNTg2
M2FhN2Q1MDMuLjA4MWNlYzc5ZTNjOWFlMmEyODA0YzAxNTFlZWFmM2M1YjI5Yjk2NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdAogICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KSk7CiAgICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKLSAgICBt
X293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0dseXBoczo6Y3JlYXRlKCptX29y
aWdpbmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9u
cywgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCBjdXJyZW50VGV4dE1h
dHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpKTsKKyAgICBtX293
bmVyLmFwcGVuZDxEcmF3R2x5cGhzPigqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFk
dmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKTsKIAogICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1
cCk7CiB9CkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBt
X293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCiAgICAgYXV0byBpbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCByZWN0LCB7eyB9LCBpbWFnZS0+c2l6ZSgp
fSwgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pKTsKKyAgICBtX293bmVyLmFw
cGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBp
bWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Ub3BMZWZ0IH0pOwogCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3Rv
cmUgdGhlIGNvbnRleHQuCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcAppbmRleCAyM2FjMzI0YjdiMDBhOWUxNmE1NmFkNjcwY2UwNGNmYTc3
ZmM5ZmE4Li4xNGMwZWM3MmM0MGUwZTg4YjE2M2JiY2E5YTg1ODRlYWFlZjZhNjBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwCkBAIC00Myw3ICs0Myw3IEBAIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lcikKIAogdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAg
bV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0ZShmb250
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpKTsKKyAgICBtX293bmVyLmFwcGVu
ZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IGQ0NjE3ZDM1MTZmNGYzZTUxZDc1ZDY0
NDM0YTZhMzk0NTdhMDAwMWYuLmY5YjMyM2M3NDI2NmVkMWY2MWQ0NGIwNDcyZWY1NTE4NTNlOGM3
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5j
cHAKQEAgLTU1LDcgKzU1LDcgQEAgUmVjb3JkZXImIERyYXdpbmdDb250ZXh0OjpyZWNvcmRlcigp
CiAKIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQpCiB7Ci0gICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQor
ICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggMjJlZDI1NmU4MGFk
MjkzYTA1MjA2OWI3NDMwODhhMTM1MWY0N2NjMC4uOTZlNGIxZWZmOTgxZTQyMjc5ZDc0NmRjNmJi
MzljOGFhNTI4ZTE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigq
dGhpcykubV9jb250ZXh0OyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVy
KCk7Ci0gICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gV1RGTW92ZSht
X2Rpc3BsYXlMaXN0KTsgfQorICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAg
ICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheWVkRGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxheWVkRGlzcGxheUxpc3QuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oCmluZGV4IDMyNTk5ZTA2MmQ3Y2Y1OWQxZGMyZWFkMDFlNzYwZDY2
ZTNmN2VjM2MuLmZmZDk0YjUyOWMwNmE3ZTJjZGUwMGVjOTRiMzU1Yzg1ZGRhZmI0YzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5pdGVtQ291bnQo
KSkKKyAgICAgICAgaWYgKCFtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZXBsYXlEaXNwbGF5TGlzdChCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmNjZGM5YzRkY2E5NTNhNWFh
NWE3NWY0ZTQyZmExOTYxY2VlOGU4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
CkBAIC0wLDAgKzEsNjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJ
dGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK3ZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZTogeworICAgICAgICBnZXQ8U2F2ZT4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7Cisg
ICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBnZXQ8VHJhbnNs
YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB7Cisg
ICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBnZXQ8Q29u
Y2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29s
b3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgZ2V0PFNldElubGluZVN0
cm9rZUNvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBnZXQ8U2V0U3Ry
b2tlVGhpY2tuZXNzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogeworICAgICAg
ICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogeworICAgICAgICBnZXQ8U2V0
TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDogeworICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB7CisgICAgICAg
IGdldDxDbGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBPdXRU
b1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
OiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAg
ICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAg
ICAgICAgZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8
RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAgICAgZ2V0PERyYXdSZWN0PigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOiB7CisgICAgICAgIGdldDxEcmF3TGluZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OiB7CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6IHsKKyAgICAgICAgZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgZ2V0PERyYXdFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7
CisgICAgICAgIGdldDxEcmF3UGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAg
ICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAg
ICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAgZ2V0
PEZpbGxSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVj
dFdpdGhDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBnZXQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdl
dDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgIGdl
dDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAgICAg
ICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxGaWxsSW5saW5lUGF0aD4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0aD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZTogeworICAgICAgICBnZXQ8RmlsbEVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7
CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7Cisg
ICAgICAgIGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAgICAg
ICBnZXQ8U3Ryb2tlUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VJbmxpbmVQYXRoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOiB7CisgICAgICAgIGdldDxTdHJva2VFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAg
ICAgICBnZXQ8Q2xlYXJSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAg
ICAgZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
IHsKKyAgICAgICAgZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseUZpbGxQYXR0ZXJuPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBnZXQ8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCit7CisgICAgc3dpdGNoICh0
eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgIGdl
dDxDbGlwT3V0VG9QYXRoPigpLn5DbGlwT3V0VG9QYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRo
PigpLn5DbGlwUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPigpLn5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBnZXQ8
RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAg
ICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkufkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAg
ICAgICAgZ2V0PERyYXdHbHlwaHM+KCkufkRyYXdHbHlwaHMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdJ
bWFnZT4oKS5+RHJhd0ltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+
KCkufkRyYXdJbWFnZUJ1ZmZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRl
eHQ+KCkufkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJ
bWFnZT4oKS5+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3
UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5+RHJhd1BhdHRlcm4oKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTog
eworICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkufkRyYXdUaWxlZEltYWdlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRTY2Fs
ZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5G
aWxsQ29tcG9zaXRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdpdGhD
b2xvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5+
RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAgICBnZXQ8RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU+KCkufkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7Cisg
ICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8
U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5T
ZXRTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuflN0cm9rZVBhdGgoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
QXBwbHlGaWxsUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQYXR0ZXJuPjo6dmFs
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxCZWdpblRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVh
clJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcE91dD46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8RHJhd0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0xpbmU+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd1Jl
Y3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbEVs
bGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbElubGlu
ZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxGaWxsUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UGFpbnRGcmFtZUZv
ck1lZGlhPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RN
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNl
dElubGluZUZpbGxHcmFkaWVudD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xv
cj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRN
aXRlckxpbWl0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
dHJva2VFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
U3Ryb2tlSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlUmVjdD46OnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VHJhbnNs
YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworYm9vbCBJ
dGVtSGFuZGxlOjppc0RyYXdpbmdJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0odHlwZSgpKTsKK30KKworSXRlbUJ1ZmZlcjo6SXRl
bUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhhbmRsZXMpCisgICAgOiBtX3JlYWRPbmx5QnVm
ZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQorCitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKCkg
PSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZlcigpCit7CisgICAgY2xlYXIoKTsK
K30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYgb3RoZXIpCisgICAgOiBt
X3JlYWRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRpbmdDbGllbnQsIG51bGxw
dHIpKQorICAgICwgbV93cml0aW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0aW5n
Q2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZl
cnMoc3RkOjpleGNoYW5nZShvdGhlci5tX25vbklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJz
LCB7IH0pKQorICAgICwgbV9hbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9h
bGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9yZWFkT25seUJ1ZmZlcnMoc3RkOjpleGNo
YW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9KSkKKyAgICAsIG1fd3JpdGFibGVCdWZm
ZXIoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlQnVmZmVyLCB7IH0pKQorICAgICwgbV93
cml0dGVuTnVtYmVyT2ZCeXRlcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdHRlbk51bWJlck9m
Qnl0ZXMsIDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVtQnVmZmVyOjpvcGVyYXRvcj0oSXRl
bUJ1ZmZlciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0NsaWVudCA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX3dyaXRpbmdDbGllbnQgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cik7CisgICAgbV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX2FsbG9jYXRlZEJ1ZmZl
cnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBt
X3JlYWRPbmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMs
IHsgfSk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK0l0ZW1CdWZmZXJIYW5kbGUgSXRlbUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXpl
X3QgY2FwYWNpdHkpCit7CisgICAgaWYgKG1fd3JpdGluZ0NsaWVudCkgeworICAgICAgICBpZiAo
YXV0byBoYW5kbGUgPSBtX3dyaXRpbmdDbGllbnQtPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHkp
KQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6
ZV90IGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkgPSAxIDw8IDEwOworCisgICAgYXV0byBuZXdC
dWZmZXJDYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFj
aXR5KTsKKyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihmYXN0
TWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzLmFwcGVu
ZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
LCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Zm9y
RWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYg
bWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX3JlYWRPbmx5
QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxlKTsKKworICAgIGlmIChtX3dyaXRh
YmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMpCisgICAgICAgIG1hcEZ1bmN0aW9u
KHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEsIG1f
d3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Y2xlYXIoKQor
eworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5nZShtX25vbklubGluZUl0ZW1zSW5B
bGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBpdGVtLmRlc3Ryb3koKTsKKworICAgIGZv
ciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZShtX2FsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkp
CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisKKyAgICBtX3JlYWRPbmx5QnVmZmVycy5jbGVh
cigpOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSB7IH07CisgICAgbV93cml0dGVuTnVtYmVyT2ZC
eXRlcyA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmIwYWZlNTVjY2UyZjdlYTE0ZjI3M2QzOTg0MjgzMWQyNzY4MTkwYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdEl0ZW1UeXBlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKKworZW51bSBJdGVtQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcg
SXRlbUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEl0ZW1CdWZmZXJJZGVudGlm
aWVyVHlwZT47CisKKy8vIEFuIEl0ZW1CdWZmZXJIYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGEg
ZGF0YSBidWZmZXIgdGhhdCBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLgorc3RydWN0
IEl0ZW1CdWZmZXJIYW5kbGUgeworICAgIEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXI7
CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgY2FwYWNpdHkgeyAw
IH07CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEoKnRoaXMpOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZGF0YTsgfQorfTsKKwordXNpbmcg
SXRlbUJ1ZmZlckhhbmRsZXMgPSBWZWN0b3I8SXRlbUJ1ZmZlckhhbmRsZSwgMj47CisKKy8vIEFu
IEl0ZW1IYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGFuIEl0ZW1UeXBlLCBmb2xsb3dlZCBpbW1l
ZGlhdGVseSBieSBhbiBpdGVtIG9mIHRoYXQgdHlwZS4KK3N0cnVjdCBJdGVtSGFuZGxlIHsKKyAg
ICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworCisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBj
b25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIWRhdGE7IH0KKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRhOyB9CisKKyAgICBJdGVtVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KGRhdGFbMF0pOyB9
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplb2YoSXRlbVR5cGUpICsgc2l6
ZU9mSXRlbUluQnl0ZXModHlwZSgpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
aXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVDo6aXRlbVR5cGU7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUJiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzPFQ+
KCkpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZkYXRhW3NpemVvZihJ
dGVtVHlwZSldKTsKKyAgICB9Cit9OworCitjbGFzcyBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNFbmNvZGluZyhJdGVtVHlwZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShJdGVtSGFuZGxl
KSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQoKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNEZWNvZGluZyhJdGVtVHlwZSkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0o
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90
KiBoYW5kbGVMb2NhdGlvbikgPSAwOworfTsKKworSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQ6On5J
dGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpIHsgfQorSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQ6On5J
dGVtQnVmZmVyUmVhZGluZ0NsaWVudCgpIHsgfQorCisvLyBBbiBJdGVtQnVmZmVyIGNvbnRhaW5z
IGRpc3BsYXkgbGlzdCBpdGVtIGRhdGEsIGFuZCBjb25zaXN0cyBvZiBhIHJlYWR3cml0ZSBJdGVt
QnVmZmVySGFuZGxlICh0byB3aGljaCBkaXNwbGF5CisvLyBsaXN0IGl0ZW1zIGFyZSBhcHBlbmRl
ZCkgYXMgd2VsbCBhcyBhIG51bWJlciBvZiByZWFkb25seSBJdGVtQnVmZmVySGFuZGxlcy4gSXRl
bXMgYXJlIGFwcGVuZGVkIHRvIHRoZSByZWFkd3JpdGUKKy8vIGJ1ZmZlciB1bnRpbCBhbGwgYXZh
aWxhYmxlIGNhcGFjaXR5IGlzIGV4aGF1c3RlZCwgYXQgd2hpY2ggcG9pbnQgd2Ugd2lsbCBtb3Zl
IHRoaXMgd3JpdGFibGUgaGFuZGxlIHRvIHRoZSBsaXN0CisvLyBvZiByZWFkb25seSBoYW5kbGVz
LgorY2xhc3MgSXRlbUJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSXRlbUJ1ZmZl
cik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBE
aXNwbGF5TGlzdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB+SXRlbUJ1ZmZlcigpOworICAgIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRs
ZXMmJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlciYgb3BlcmF0b3I9KEl0ZW1CdWZmZXImJik7CisK
KyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJl
c3VsdCA9IDA7CisgICAgICAgIGZvciAoYXV0byBidWZmZXIgOiBtX3JlYWRPbmx5QnVmZmVycykK
KyAgICAgICAgICAgIHJlc3VsdCArPSBidWZmZXIuY2FwYWNpdHk7CisgICAgICAgIHJlc3VsdCAr
PSBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fd3JpdHRlbk51bWJlck9mQnl0ZXMgJiYgbV9yZWFkT25seUJ1ZmZl
cnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXJIYW5k
bGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOworCisgICAgLy8gSXRlbUJ1ZmZlcjo6YXBwZW5k
PFQ+KC4uLikgYXBwZW5kcyBhIGRpc3BsYXkgbGlzdCBpdGVtIG9mIHR5cGUgVCB0byB0aGUgZW5k
IG9mIHRoZSBjdXJyZW50CisgICAgLy8gd3JpdGFibGUgYnVmZmVyIGhhbmRsZTsgaWYgcmVtYWlu
aW5nIGJ1ZmZlciBjYXBhY2l0eSBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUgdGhlIGl0ZW0sIGEK
KyAgICAvLyBuZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIChlaXRoZXIgYnkgdGhlIEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50LCBpZiBzZXQsIG9yIGJ5IHRoZSBpdGVtCisgICAgLy8gYnVmZmVy
IGl0c2VsZiBpZiB0aGVyZSBpcyBubyBjbGllbnQpLiBJdGVtcyBhcmUgcGxhY2VkIGJhY2stdG8t
YmFjayBpbiB0aGVzZSBpdGVtIGJ1ZmZlcnMsCisgICAgLy8gd2l0aCBhbiBJdGVtVHlwZSBzZXBh
cmF0aW5nIGVhY2ggaXRlbS4KKyAgICAvLworICAgIC8vIElmIGEgd3JpdGluZyBjbGllbnQgaXMg
cHJlc2VudCBhbmQgcmVxdWlyZXMgY3VzdG9tIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0
eXBlIFQgKGkuZS4KKyAgICAvLyBieSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHJlcXVpcmVzRW5jb2Rp
bmcpLCB0aGUgaXRlbSBidWZmZXIgd2lsbCBhc2sgdGhlIGNsaWVudCBmb3IgYW4gb3BhcXVlCisg
ICAgLy8gU2hhcmVkQnVmZmVyIGNvbnRhaW5pbmcgZW5jb2RlZCBkYXRhIGZvciB0aGUgaXRlbS4g
VGhpcyBlbmNvZGVkIGRhdGEgaXMgdGhlbiBhcHBlbmRlZCB0byB0aGUKKyAgICAvLyBpdGVtIGJ1
ZmZlciwgd2l0aCBwYWRkaW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFydCBvZiB0aGlzIGRhdGEg
aXMgYWxpZ25lZCB0byA4IGJ5dGVzLCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1p
bmcgZW5jb2RlZCBpdGVtIGRhdGEsIGEgY29ycmVzcG9uZGluZyBJdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCB3aWxsIGJlCisgICAgLy8gcmVxdWlyZWQgdG8gY29udmVydCB0aGlzIGVuY29kZWQgZGF0
YSBiYWNrIGludG8gYW4gaXRlbSBvZiB0eXBlIFQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
Y2xhc3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUg
fHwgIVQ6OmlzSW5saW5lSXRlbSk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNpemVPZlR5cGVB
bmRJdGVtID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihUKTsKKworICAgICAgICBpZiAobV93
cml0aW5nQ2xpZW50ICYmIG1fd3JpdGluZ0NsaWVudC0+cmVxdWlyZXNFbmNvZGluZyhUOjppdGVt
VHlwZSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlw
ZUFuZEl0ZW1dOworICAgICAgICAgICAgaXRlbUJ1ZmZlclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgIG5ldyAoaXRlbUJ1ZmZlciArIHNpemVvZihJ
dGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgICAgIGlm
IChhdXRvIHNoYXJlZEJ1ZmZlciA9IG1fd3JpdGluZ0NsaWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1C
dWZmZXIgfSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1heEFkZGl0aW9uYWxDYXBhY2l0eUZv
ckl0ZW0gPSBzaGFyZWRCdWZmZXItPnNpemUoKSArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yo
c2l6ZV90KSArIGFsaWdub2YodWludDY0X3QpOworICAgICAgICAgICAgICAgIGlmIChtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzICsgbWF4QWRkaXRpb25hbENhcGFjaXR5Rm9ySXRlbSA+IG1fd3JpdGFi
bGVCdWZmZXIuY2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsYXN0V3JpdGFi
bGVCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2Uo
bV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0
V3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRP
bmx5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShsYXN0V3JpdGFibGVCdWZmZXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIobWF4QWRkaXRp
b25hbENhcGFjaXR5Rm9ySXRlbSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0
T2ZEYXRhTGVuZ3RoID0gbV93cml0YWJsZUJ1ZmZlci5kYXRhICsgbV93cml0dGVuTnVtYmVyT2ZC
eXRlcyArIHNpemVvZihJdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxzaXplX3QqPihzdGFydE9mRGF0YUxlbmd0aClbMF0gPSBzaGFyZWRCdWZmZXItPnNpemUoKTsK
KworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gc3RhcnRPZkRhdGFMZW5n
dGggKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgICAgICAgICBzaXplX3QgcGFkZGluZyA9IChh
bGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydE9mUGFk
ZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90KTsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBzdGFydE9mRGF0YSA9IHN0YXJ0T2ZEYXRhTGVuZ3RoICsgc2l6ZW9mKHNp
emVfdCkgKyBwYWRkaW5nOworICAgICAgICAgICAgICAgIG1lbWNweShzdGFydE9mRGF0YSwgc2hh
cmVkQnVmZmVyLT5kYXRhQXNVSW50OFB0cigpLCBzaGFyZWRCdWZmZXItPnNpemUoKSk7CisKKyAg
ICAgICAgICAgICAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkg
KyBzaXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICsgc2l6ZU9mVHlwZUFuZEl0ZW0gPiBtX3dyaXRhYmxlQnVm
ZmVyLmNhcGFjaXR5KSB7CisgICAgICAgICAgICBhdXRvIGxhc3RXcml0YWJsZUJ1ZmZlciA9IHN0
ZDo6ZXhjaGFuZ2UobV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICAgICAgICAgIGxhc3RXcml0
YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0dGVuTnVtYmVyT2ZCeXRl
cywgMCk7CisgICAgICAgICAgICBpZiAobGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQorICAg
ICAgICAgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGxhc3RXcml0YWJs
ZUJ1ZmZlcikpOworICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZm
ZXIoc2l6ZU9mVHlwZUFuZEl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgYXV0byogc3RhcnRP
Zkl0ZW0gPSAmbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdOwor
ICAgICAgICBzdGFydE9mSXRlbVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBl
KTsKKyAgICAgICAgbmV3IChzdGFydE9mSXRlbSArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyAr
PSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpOworCisg
ICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVtKQorICAgICAgICAgICAgbV9ub25JbmxpbmVJdGVt
c0luQWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoeyBzdGFydE9mSXRlbSB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1fd3Jp
dGluZ0NsaWVudCA9IGNsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJSZWFk
aW5nQ2xpZW50KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZE9ubHlCdWZmZXJzOyB9CisgICAgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZl
cihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAg
ICBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0ciB9Owor
ICAgIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPEl0ZW1IYW5kbGU+IG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZl
cnM7CisgICAgVmVjdG9yPHVpbnQ4X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAgSXRlbUJ1
ZmZlckhhbmRsZXMgbV9yZWFkT25seUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZSBtX3dy
aXRhYmxlQnVmZmVyOworICAgIHNpemVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsgMCB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTA2
NDI5OWQ4ZTVkYzYzODc0MGU3NTIxNTE3YmIwZjI5YmU1NzIwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKworI2luY2x1ZGUgIkRp
c3BsYXlMaXN0SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKKworc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0
dXJuIHNpemVvZihTYXZlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKKyAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldElubGluZUZpbGxHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xv
cik7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIHJl
dHVybiBzaXplb2YoU2V0SW5saW5lU3Ryb2tlQ29sb3IpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25l
c3MpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldFN0YXRlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldExpbmVDYXApOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRl
ckxpbWl0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihDbGVhclNoYWRvdyk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihDbGlwKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKENsaXBPdXQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcE91dFRvUGF0aCk7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcFBhdGgpOworICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihDbGlwVG9EcmF3aW5nQ29tbWFuZHMpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0dseXBocyk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdJbWFnZSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1RpbGVk
SW1hZ2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKERyYXdUaWxlZFNjYWxlZEltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ltYWdlQnVmZmVy
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVybiBz
aXplb2YoRHJhd05hdGl2ZUltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UGF0dGVybik7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1JlY3QpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdMaW5lKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdMaW5lc0ZvclRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2Yo
RHJhd0VsbGlwc2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKERyYXdQYXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3Rm9jdXNSaW5nUGF0aCk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdG
b2N1c1JpbmdSZWN0cyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJl
dHVybiBzaXplb2YoRmlsbFJlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsUmVjdFdpdGhHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxS
b3VuZGVkUmVjdCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
CisgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOworI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRo
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxJbmxpbmVQYXRoKTsKKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxQYXRoKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsRWxsaXBzZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFB1dEltYWdlRGF0YSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFt
ZUZvck1lZGlhOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFBhaW50RnJhbWVGb3JNZWRpYSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJv
a2VSZWN0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFN0cm9rZUlubGluZVBhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tlUGF0aCk7CisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJva2VFbGxpcHNl
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2Yo
Q2xlYXJSZWN0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEVu
ZFRyYW5zcGFyZW5jeUxheWVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRl
cm46CisgICAgICAgIHJldHVybiBzaXplb2YoQXBwbHlTdHJva2VQYXR0ZXJuKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFwcGx5
RmlsbFBhdHRlcm4pOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
CisgICAgICAgIHJldHVybiBzaXplb2YoQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgfQor
fQorCitib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVT
RShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5k
czoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTYXZlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNl
dENUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBJ
dGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRo
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlSW5saW5lUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworYm9vbCBpc0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoK
KyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93
OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdS
ZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAg
IGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0Q1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUNhcDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRNaXRlckxpbWl0OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUlubGluZVBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlNGY4NTc5YWM4Nzdi
Yjg4M2I0OTYzMzMyN2ZhNzhjMjMxNzFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5o
CkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gY2xhc3MgSXRlbVR5
cGUgOiB1aW50OF90IHsKKyAgICBTYXZlLAorICAgIFJlc3RvcmUsCisgICAgVHJhbnNsYXRlLAor
ICAgIFJvdGF0ZSwKKyAgICBTY2FsZSwKKyAgICBDb25jYXRlbmF0ZUNUTSwKKyAgICBTZXRDVE0s
CisgICAgU2V0SW5saW5lRmlsbEdyYWRpZW50LAorICAgIFNldElubGluZUZpbGxDb2xvciwKKyAg
ICBTZXRJbmxpbmVTdHJva2VDb2xvciwKKyAgICBTZXRTdHJva2VUaGlja25lc3MsCisgICAgU2V0
U3RhdGUsCisgICAgU2V0TGluZUNhcCwKKyAgICBTZXRMaW5lRGFzaCwKKyAgICBTZXRMaW5lSm9p
biwKKyAgICBTZXRNaXRlckxpbWl0LAorICAgIENsZWFyU2hhZG93LAorICAgIENsaXAsCisgICAg
Q2xpcE91dCwKKyAgICBDbGlwT3V0VG9QYXRoLAorICAgIENsaXBQYXRoLAorICAgIENsaXBUb0Ry
YXdpbmdDb21tYW5kcywKKyAgICBEcmF3R2x5cGhzLAorICAgIERyYXdJbWFnZSwKKyAgICBEcmF3
VGlsZWRJbWFnZSwKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKKyAgICBEcmF3SW1hZ2VCdWZm
ZXIsCisgICAgRHJhd05hdGl2ZUltYWdlLAorICAgIERyYXdQYXR0ZXJuLAorICAgIERyYXdSZWN0
LAorICAgIERyYXdMaW5lLAorICAgIERyYXdMaW5lc0ZvclRleHQsCisgICAgRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlciwKKyAgICBEcmF3RWxsaXBzZSwKKyAgICBEcmF3UGF0aCwKKyAgICBEcmF3
Rm9jdXNSaW5nUGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCisgICAgRmlsbFJlY3QsCisg
ICAgRmlsbFJlY3RXaXRoQ29sb3IsCisgICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCisgICAgRmls
bENvbXBvc2l0ZWRSZWN0LAorICAgIEZpbGxSb3VuZGVkUmVjdCwKKyAgICBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBGaWxsSW5saW5l
UGF0aCwKKyNlbmRpZgorICAgIEZpbGxQYXRoLAorICAgIEZpbGxFbGxpcHNlLAorICAgIFB1dElt
YWdlRGF0YSwKKyAgICBQYWludEZyYW1lRm9yTWVkaWEsCisgICAgU3Ryb2tlUmVjdCwKKyNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBTdHJva2VJbmxpbmVQYXRoLAorI2VuZGlmCisg
ICAgU3Ryb2tlUGF0aCwKKyAgICBTdHJva2VFbGxpcHNlLAorICAgIENsZWFyUmVjdCwKKyAgICBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyLAorICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAorI2lmIFVT
RShDRykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEg
cmVjb3JkZWQgaXRlbS4KKyAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5v
dCBiZSBhIHJlY29yZGVkIGl0ZW0uCisjZW5kaWYKKyAgICBBcHBseURldmljZVNjYWxlRmFjdG9y
LAorfTsKKworV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBl
KTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbmxpbmVJdGVtKEl0ZW1UeXBlKTsKK1dFQkNPUkVf
RVhQT1JUIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKaW5kZXggNDdjNzYyZTFhNjE5N2Q2YzhiOGM0NWZhOWNmZGMwNWEwM2RlZTUx
Yi4uNjBhZTYyNjgxMzNmMzdlZWVlZGNiMWI1NGY1MTM0NmM1MzRhMzkxYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTIsMTk1ICs1MiwxNiBAQCBXVEY6OkNTdHJp
bmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAogfQogI2VuZGlmCiAKLUl0ZW06Okl0ZW0oSXRl
bVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1JdGVtOjp+SXRlbSgpID0g
ZGVmYXVsdDsKLQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCi17
Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2Nh
bGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8U2V0Q1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0cm9r
ZVRoaWNrbmVzcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5l
Q2FwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5l
Sm9pbj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENs
ZWFyU2hhZG93PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cE91dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
R2x5cGhzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdU
aWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd1JlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVkUmVj
dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihp
dGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbElubGlu
ZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Rmls
bEVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRl
bSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlSW5s
aW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5Rmls
bFBhdHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBp
dGVtKQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAg
aWYgKGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKLSAgICAKLSAgICB0cy5lbmRHcm91cCgp
OwotICAgIHJldHVybiB0czsKLX0KLQotRHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCi0gICAgOiBJdGVtKHR5cGUpCi17Ci19Ci0KLURyYXdpbmdJdGVtOjp+RHJhd2luZ0l0
ZW0oKSA9IGRlZmF1bHQ7Ci0KLVNhdmU6OlNhdmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2F2
ZSkKLXsKLX0KLQotU2F2ZTo6flNhdmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2F2ZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2F2ZSgpOwog
fQogCi1SZXN0b3JlOjpSZXN0b3JlKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCi17
Ci19Ci0KLVJlc3RvcmU6On5SZXN0b3JlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJlc3RvcmU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKIH0KIAotVHJhbnNsYXRlOjpUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAsIG1feCh4KQotICAgICwgbV95KHkpCi17
Ci19Ci0KLVRyYW5zbGF0ZTo6flRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBUcmFuc2xh
dGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LnRyYW5zbGF0ZShtX3gsIG1feSk7CkBAIC0yNTQsMTQgKzc1LDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVJvdGF0ZTo6Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgIDogSXRl
bShJdGVtVHlwZTo6Um90YXRlKQotICAgICwgbV9hbmdsZShhbmdsZSkKLXsKLX0KLQotUm90YXRl
Ojp+Um90YXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUpOwpAQCAt
Mjc0LDE0ICs4Nyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TY2FsZTo6U2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUpCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotU2NhbGU6On5TY2FsZSgpID0gZGVmYXVsdDsKLQog
dm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuc2NhbGUobV9zaXplKTsKQEAgLTI5NCwxNCArOTksNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCiAgICAg
cmV0dXJuIHRzOwogfQogCi1TZXRDVE06OlNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldENUTSkKLSAgICAsIG1fdHJhbnNmb3Jt
KHRyYW5zZm9ybSkKLXsKLX0KLQotU2V0Q1RNOjp+U2V0Q1RNKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMxNCwxNCArMTExLDYgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1Db25jYXRl
bmF0ZUNUTTo6fkNvbmNhdGVuYXRlQ1RNKCkgPSBkZWZhdWx0OwotCiB2b2lkIENvbmNhdGVuYXRl
Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzM1LDggKzEyNCw3IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKIH0KIAogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQo
Y29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50KQotICAgICwgbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKKyAgICA6IG1fZGF0
YShncmFkaWVudC5kYXRhKCkpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihn
cmFkaWVudC5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCiAgICAgLCBtX3NwcmVhZE1ldGhvZChn
cmFkaWVudC5zcHJlYWRNZXRob2QoKSkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGljX2Nh
c3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQpAQCAtMzU4LDE0ICsxNDYsOCBA
QCBSZWY8R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAog
ICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gU2V0
SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChncmFkaWVudCkp
OwotfQotCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9h
dCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENv
bG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZGF0YSkKKyAgICA6IG1f
ZGF0YShkYXRhKQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uKQogICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKQog
ICAgICwgbV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKQEAgLTM3Nyw4ICsxNTksNiBA
QCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZz
ZXRzW21heENvbG9yU3RvcENvdW50XSwgUwogICAgIH0KIH0KIAotU2V0SW5saW5lRmlsbEdyYWRp
ZW50Ojp+U2V0SW5saW5lRmlsbEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGlu
ZUZpbGxHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGlmIChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KQpAQCAtNDA0LDEz
ICsxODQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50JikKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxT
ZXRJbmxpbmVGaWxsQ29sb3I+IFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxs
Q29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZUZpbGxDb2xvcjo6flNldElubGluZUZp
bGxDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihjb2xvcigpKTsKQEAgLTQyMiwxMyArMTk1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxDb2xvciYgc3RhdGUpCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+IFNldElubGluZVN0
cm9rZUNvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldElubGluZVN0cm9rZUNvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1T
ZXRJbmxpbmVTdHJva2VDb2xvcjo6flNldElubGluZVN0cm9rZUNvbG9yKCkgPSBkZWZhdWx0Owot
CiB2b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvcigpKTsKQEAgLTQ0
MCwxMyArMjA2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9
CiAKLVJlZjxTZXRTdHJva2VUaGlja25lc3M+IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGZs
b2F0IHRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdHJva2VUaGlj
a25lc3ModGhpY2tuZXNzKSk7Ci19Ci0KLVNldFN0cm9rZVRoaWNrbmVzczo6flNldFN0cm9rZVRo
aWNrbmVzcygpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhtX3RoaWNrbmVzcyk7CkBAIC00NTksMTkgKzIxOCwxNSBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNz
JiBzdGF0ZSkKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUsIGZs
YWdzKQorICAgIDogbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCiB7CiB9CiAKIFNldFN0YXRlOjpTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAg
OiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGVDaGFuZ2UpCisg
ICAgOiBtX3N0YXRlKHN0YXRlQ2hhbmdlKQogewogfQogCi1TZXRTdGF0ZTo6flNldFN0YXRlKCkg
PSBkZWZhdWx0OwotCiB2b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKQEAgLTQ4MywxNCArMjM4
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVDYXA6OlNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkK
LSAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQotewotfQotCi1TZXRMaW5lQ2FwOjp+U2V0TGluZUNh
cCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7CkBA
IC01MDIsMTUgKzI0OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQogICAgIHJldHVybiB0czsKIH0KIAot
U2V0TGluZURhc2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCi0gICAgLCBt
X2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLXsK
LX0KLQotU2V0TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRM
aW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7CkBAIC01MjMsMTQg
KzI2MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRMaW5l
Sm9pbjo6U2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbikKLSAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCi17Ci19Ci0KLVNldExp
bmVKb2luOjp+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUpvaW46OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExp
bmVKb2luKG1fbGluZUpvaW4pOwpAQCAtNTQyLDE0ICsyNzIsNiBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2lu
KQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKLSAgICAs
IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotewotfQotCi1TZXRNaXRlckxpbWl0Ojp+U2V0TWl0
ZXJMaW1pdCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1f
bWl0ZXJMaW1pdCk7CkBAIC01NjEsMjYgKzI4MywxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUNsZWFyU2hhZG93OjpDbGVhclNoYWRvdygpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKLXsKLX0KLQotQ2xlYXJTaGFkb3c6On5DbGVhclNo
YWRvdygpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKIH0KIAot
Q2xpcDo6Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpD
bGlwKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXA6On5DbGlwKCkgPSBkZWZhdWx0
OwotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTU5MiwxNCArMjk5LDYgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0OjpDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsK
LX0KLQotQ2xpcE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91
dChtX3JlY3QpOwpAQCAtNjExLDE0ICszMTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLUNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsK
LX0KLQotQ2xpcE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
Q2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNjMwLDE1ICszMjEsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0
aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBQYXRoOjpDbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQ
YXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotewot
fQotCi1DbGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlw
UGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAtNjUxLDE2ICszMzMsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFBhdGgmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotICAgICwgbV9kcmF3aW5nQ29tbWFu
ZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQotewotfQotCi1DbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6On5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobV9kZXN0aW5hdGlvbiwgbV9jb2xvclNw
YWNlLCBbJl0gKEdyYXBoaWNzQ29udGV4dCYgY2xpcHBpbmdDb250ZXh0KSB7CkBAIC02NzMsMTMg
KzM0NSwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBpdGVtKQogewogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiY29sb3Itc3BhY2UiLCBpdGVtLmNvbG9yU3BhY2UoKSk7Ci0gICAgdHMuZHVtcFByb3BlcnR5
KCJkcmF3aW5nLWNvbW1hbmRzLWNvdW50IiwgaXRlbS5kcmF3aW5nQ29tbWFuZHMoKS5pdGVtQ291
bnQoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0
b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQm
IGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxG
b250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihm
b250KSkpCiAgICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBocykpCiAgICAgLCBtX2FkdmFuY2Vz
KFdURk1vdmUoYWR2YW5jZXMpKQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKQEAg
LTY4OSw4ICszNTksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLAogfQogCiBEcmF3R2x5cGhz
OjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBt
X2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihj
b25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9y
KQogICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUpCiB7CkBAIC03MDMsMTkgKzM3
MiwxNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgRwogICAgIGNvbXB1dGVCb3VuZHMoKTsKIH0K
IAotRHJhd0dseXBoczo6fkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7Ci0KIGlubGluZSBHbHlwaEJ1
ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3QKIHsKICAgICBHbHlw
aEJ1ZmZlciByZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgbV9mb250LmdldCgpLCBt
X2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOworICAgICAgICByZXN1bHQuYWRk
KG1fZ2x5cGhzW2ldLCAqbV9mb250LCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZz
ZXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZHJhd0dseXBocyht
X2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQ
b2ludCgpLCBtX3Ntb290aGluZ01vZGUpOworICAgIGNvbnRleHQuZHJhd0dseXBocygqbV9mb250
LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQo
KSwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRz
KCkKQEAgLTczNSwxNCArNDAyLDggQEAgdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkK
ICAgICB9CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBoczo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ib3VuZHM7Ci19
Ci0KIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3R2x5cGhzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1w
UHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwpAQCAtNzUxLDE3
ICs0MTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0dseXBocyYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZTo6
RHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2UpCi0g
ICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAg
ICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZTo6fkRyYXdJbWFnZSgpID0gZGVmYXVs
dDsKLQogdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9u
LCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjksMjYgKzQxOSwxMiBA
QCB2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0ltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLURyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQot
ICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkK
LSAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBtX3NwYWNpbmcoc3BhY2luZykKLSAg
ICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0K
LURyYXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJh
d1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1f
c291cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpA
QCAtNzk2LDcgKzQzMiw2IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9p
bnQiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdGluYXRpb24oKSk7CkBAIC04MDUsMjAgKzQ0MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAg
LCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAg
ICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVs
ZSkKLSAgICAsIG1fdlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6fkRyYXdU
aWxlZFNjYWxlZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5k
cmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90
aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMp
OwpAQCAtODI2LDI0ICs0NDcsMTIgQEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAot
RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCi0g
ICAgLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKLSAgICAsIG1fc3JjUmVj
dChzcmNSZWN0KQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZUJ1
ZmZlcjo6fkRyYXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3SW1hZ2VCdWZm
ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhh
bmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtODUyLDcgKzQ2MSw2IEBAIHZvaWQgRHJhd0ltYWdl
QnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRlbnRpZmllciIsIGl0ZW0ucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODYwLDggKzQ2OCw3IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2VCdWZmZXIm
IGl0ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAg
ICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0
UmVjdCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY5LDggKzQ3Niw2IEBAIERyYXdO
YXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJbWFnZTo6fkRyYXdOYXRpdmVJ
bWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSht
X2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3QsIG1fc3JjUmVjdCwgbV9vcHRp
b25zKTsKQEAgLTg3OCw3ICs0ODMsNiBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklY
TUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0Iiwg
aXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRl
c3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg4Niw4ICs0OTAsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQog
fQogCiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShp
bWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0
dGVyblRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCiAgICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RSZWN0KQpAQCAtODk3LDggKzUwMCw2IEBAIERyYXdQYXR0ZXJuOjpEcmF3UGF0
dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjCiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1f
dGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29wdGlv
bnMpOwpAQCAtOTA2LDcgKzUwNyw2IEBAIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRy
YW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTYsMTUgKzUxNiw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVy
biYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0OjpEcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9ib3JkZXJU
aGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3UmVjdDo6fkRyYXdSZWN0KCkg
PSBkZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tu
ZXNzKTsKQEAgLTkzMiwyMSArNTIzLDExIEBAIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVz
cyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0xp
bmU6OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICwgbV9w
b2ludDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQotewotfQotCi1EcmF3TGluZTo6
fkRyYXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0UmVj
dCBib3VuZHM7CkBAIC05NjEsMTUgKzU0MiwxMyBAQCB2b2lkIERyYXdMaW5lOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQt
MiIsIGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRHJhd0xpbmVzRm9yVGV4
dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24o
YmxvY2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQogICAg
ICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fd2lkdGhzKHdpZHRocykKICAg
ICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3OCw4ICs1NTcsNiBAQCBEcmF3TGluZXNG
b3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24s
IGNvbnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9yVGV4
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBv
aW50KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7
CkBAIC05OTksNyArNTc2LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0
Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4
dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9j
YXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2Fs
QW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwpA
QCAtMTAxMSwxNSArNTg3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLSAg
ICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkKLXsKLX0KLQotRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihtX3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMiwxOSArNTk5LDEwIEBAIE9wdGlvbmFsPEZsb2F0
UmVjdD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0VsbGlwc2U6
OkRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1EcmF3RWxs
aXBzZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdFbGxpcHNlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3RWxs
aXBzZShtX3JlY3QpOwpAQCAtMTA1NiwxNCArNjE0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsK
LX0KLQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0aDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogI2lmIFVTRShDRykKQEAg
LTEwNzMsMjQgKzYyMywxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVtKQorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVt
cFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9y
IHBhdGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgcmV0dXJu
IHRzOwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQotICAgICwgbV9w
YXRoKHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwgbV9vZmZzZXQob2Zmc2V0KQot
ICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3VzUmluZ1BhdGg6On5EcmF3Rm9j
dXNSaW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3Vz
UmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExMDUsNyArNjQz
LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAvLyAgICB0
cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2lu
ZyBmb3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExMTQs
MTYgKzY1MSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAKIERyYXdGb2N1c1JpbmdSZWN0
czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAsIG1fcmVjdHMocmVjdHMp
CisgICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLURyYXdGb2N1c1JpbmdS
ZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNS
aW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3Ip
OwpAQCAtMTE0MCw3ICs2NzQsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdS
ZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29ucwogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmlu
Z1JlY3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExNDgsMTQgKzY4MSw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9j
dXNSaW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdDo6RmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxSZWN0Ojp+RmlsbFJlY3Qo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7CkBAIC0xMTYzLDIw
ICs2ODgsMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3Qo
KSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRo
Q29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCi0gICAgLCBtX3JlY3QocmVj
dCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aENvbG9yOjp+Rmls
bFJlY3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxS
ZWN0KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTg0LDIxICs2OTksMTcgQEAgdm9pZCBGaWxsUmVj
dFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RX
aXRoQ29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgcmV0dXJuIHRz
OwogfQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBtX3JlY3QocmVjdCkKKyAgICA6
IG1fcmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAotRmlsbFJl
Y3RXaXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgpID0gZGVmYXVsdDsKLQogdm9p
ZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsK
QEAgLTEyMDYsMjMgKzcxNywxMSBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQot
ICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShi
bGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6fkZpbGxDb21wb3NpdGVkUmVj
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIzMCw3ICs3MjksNiBAQCB2b2lkIEZp
bGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0
b3IoKSk7CkBAIC0xMjM4LDE2ICs3MzYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAgICAs
IG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fYmxlbmRNb2RlKGJs
ZW5kTW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+RmlsbFJvdW5kZWRSZWN0KCkgPSBk
ZWZhdWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NSwyMyArNzQzLDEyIEBAIHZvaWQgRmlsbFJvdW5k
ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJl
Y3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0czsK
IH0KIAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fcm91bmRl
ZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0K
LUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtMTI3OSw3ICs3NTYs
NiBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQt
aG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg4LDE0ICs3NjQsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxJbmxp
bmVQYXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCi0gICAgLCBtX3BhdGhE
YXRhKHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkg
PSBkZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOwpAQCAtMTMw
MywyMSArNzcxLDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJw
YXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAsIG1fcGF0aChw
YXRoKQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZp
bGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNSwxOSArNzg0LDEwIEBAIHZvaWQgRmlsbFBh
dGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAotRmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQot
ewotfQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZp
bGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NSwxNCArNzk1LDEyIEBAIHZvaWQg
RmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxp
cHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJl
dHVybiB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0
KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoaW1hZ2VE
YXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJl
c2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KICAgICAsIG1faW5wdXRGb3Jt
YXQoaW5wdXRGb3JtYXQpCkBAIC0xMzYxLDggKzgwOSw3IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEp
Ci0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAg
ICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFn
ZURhdGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNzAsOCArODE3
LDYgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1QdXRJbWFnZURhdGE6On5QdXRJ
bWFnZURhdGEoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxl
Z2F0ZS4KQEAgLTEzODAsNyArODI1LDYgQEAgdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlu
cHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlt
YWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwpAQCAtMTM4OSwzMiArODMzLDEyIEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFn
ZURhdGEmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlh
PiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50
RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KLVJlZjxQYWludEZyYW1l
Rm9yTWVkaWE+IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKE1lZGlhUGxheWVySWRlbnRpZmll
ciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShpZGVudGlmaWVyLCBkZXN0aW5hdGlv
bikpOwotfQotCiBQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihw
bGF5ZXIuaWRlbnRpZmllcigpKQorICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVy
KCkpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQogCi1QYWludEZyYW1l
Rm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLVBhaW50RnJhbWVG
b3JNZWRpYTo6flBhaW50RnJhbWVGb3JNZWRpYSgpID0gZGVmYXVsdDsKLQogdm9pZCBQYWludEZy
YW1lRm9yTWVkaWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hv
dWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMTQyMywyMCArODQ3LDEwIEBAIHZv
aWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGFpbnRG
cmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0aW5hdGlvbiIsIGl0ZW0u
ZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJva2VSZWN0OjpTdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1f
bGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVjdDo6flN0cm9rZVJlY3QoKSA9
IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUmVjdDo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzID0g
bV9yZWN0OwpAQCAtMTQ1MSw3ICs4NjUsNiBAQCB2b2lkIFN0cm9rZVJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsaW5lLXdpZHRo
IiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpAQCAtMTQ3NCwxOSArODg3LDEw
IEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUVsbGlw
c2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tlRWxsaXBzZTo6flN0cm9rZUVs
bGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlRWxsaXBzZTo6
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0x
NTAzLDcgKzkwNyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBAIC0xNTI3LDM3ICs5MzAsMTIg
QEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRl
bS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tl
SW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0aERhdGEocGF0aERh
dGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJbmxpbmVQYXRoKCkgPSBkZWZh
dWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLVN0cm9rZVBhdGg6
OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLVN0cm9rZVBhdGg6On5T
dHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xlYXJSZWN0KQotICAg
ICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNsZWFyUmVjdCgpID0gZGVmYXVs
dDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpAQCAtMTU2NSwxOSArOTQzLDEw
IEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
bGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAg
ICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShvcGFjaXR5KQotewotfQotCi1C
ZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVs
dDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG1f
b3BhY2l0eSk7CkBAIC0xNTg1LDU3ICs5NTQsMjggQEAgdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdpblRyYW5zcGFyZW5j
eUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRlbS5vcGFjaXR5KCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lM
YXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5FbmRUcmFuc3BhcmVuY3lMYXll
cigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tlUGF0dGVybjo6QXBwbHlTdHJv
a2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybikKLXsK
LX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQYXR0ZXJuKCkgPSBkZWZhdWx0
OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQYXR0ZXJuKCk7CiB9CiAKLUFw
cGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAgIDogSXRlbShJdGVtVHlwZTo6
QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0dGVybjo6fkFwcGx5RmlsbFBh
dHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0dGVybjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlGaWxsUGF0dGVy
bigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseURl
dmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKLXsKLX0K
LQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NDcsNyArOTg3LDcgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Im
IGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQogewogICAgIHN3aXRj
aCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJzYXZlIjsgYnJlYWs7
CkBAIC0xNzE4LDE3MiArMTA1OCwxNzAgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQogICAgIHJldHVybiB0czsKIH0K
IAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRl
bSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0ZW1IYW5kbGUgaXRl
bSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKICAgICB0cyA8PCBp
dGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8gd2hpY2ggdGFrZXMgYSBt
YWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCiAgICAgc3dpdGNoIChpdGVt
LnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8VHJhbnNs
YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0
SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ry
b2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVTdHJva2VD
b2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldFN0YXRlPigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRM
aW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVKb2luPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwT3V0VG9Q
YXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFBh
dGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdD
b21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0lt
YWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3VGlsZWRJ
bWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdUaWxlZEltYWdlPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxE
cmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3
UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0xpbmVzRm9y
VGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxp
cHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmlu
Z1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1JlY3Rz
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpOwogICAg
ICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbElubGluZVBh
dGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsSW5saW5lUGF0aD4oKTsKICAg
ICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8UHV0SW1h
Z2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ry
b2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9rZVJlY3Q+KCk7CiAg
ICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZUlu
bGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VJbmxpbmVQYXRo
PigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VFbGxp
cHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlRWxsaXBzZT4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGVh
clJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0aW9uYWwgZGF0YS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGYwMTViZTVlODY2MDZlY2MyZjZj
ZTg1N2MxZjcxMTY3Njk0ZmU4ZTMuLjJhNDYyNmU4ZWIzMTUwZDgxODU0Y2ZiMmFlMmFiNjNlMzJj
MGE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtNTEsMzIwICs1MSwx
NjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNhdmUgewog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdpbmdJdGVtKEl0ZW1UeXBl
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNh
dmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IEZsb2F0UmVjdCYg
cikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4dGVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJvb2wgZXh0ZW50S25vd24oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0KLQotICAgIC8vIFJl
dHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2NhbCBjb29yZGluYXRl
cy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zvcm0sIHNoYWRvdyBl
dGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJbWFnZURhdGEpIG9wZXJhdGUg
aW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMsIG92ZXJyaWRlIHRoaXMgbWV0
aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4gdmFsdWUgbmVlZHMgdG8gaW5j
bHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywgZXRjLgotICAgIHZpcnR1YWwg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fZXh0ZW50
OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBhbmQgdHJhbnNmb3JtcyBp
bnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFJlc3RvcmUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNhdmUo
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2F2ZT4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2F2ZSgpOwotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+IFNhdmU6OmRlY29kZShEZWNv
ZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNzIFJlc3RvcmUg
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlc3RvcmUo
KTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFJl
c3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBSZXN0b3JlOjplbmNv
ZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1
cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVibGljIEl0ZW0gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAg
ICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBtX3goeCkKKyAgICAgICAg
LCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRyYW5zbGF0ZSh4
LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+VHJhbnNsYXRlKCk7
Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAgZmxvYXQgeSgpIGNv
bnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94OwotICAgIGZsb2F0IG1feTsKK3By
aXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0IG1feSB7IDAgfTsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0ZTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7Ci0gICAgZW5jb2RlciA8PCBt
X3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8VHJhbnNsYXRl
Pj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxm
bG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4KQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAgZGVjb2RlciA+PiB5
OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVy
biBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFzcyBSb3RhdGUgOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Um90YXRlPiBj
cmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKKyAgICAgICAgOiBtX2Fu
Z2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUm90YXRlKGFu
Z2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Um90
YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5nbGU7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFJvdGF0ZT4+
IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUm90YXRl
KGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBmbG9hdCBt
X2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBmbG9hdCBtX2FuZ2xlIHsgMCB9
OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgUm90
YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
YW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Um90YXRl
Pj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9h
dD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBpZiAoIWFuZ2xlKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJvdGF0ZTo6Y3JlYXRlKCphbmds
ZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworY2xhc3MgU2NhbGUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTY2Fs
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBjb25zdCBGbG9hdFNpemUmIGFt
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9zaXpl
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2NhbGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zaXplOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxlPj4gU2NhbGU6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0U2l6ZT4gc2NhbGU7Ci0gICAg
ZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNjYWxlKTsKLX0KLQotY2xhc3Mg
U2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0Q1RNOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0odHJh
bnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0Q1RNKG1hdHJp
eCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldENUTSgpOwotCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsK
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldENUTTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3RyYW5zZm9ybTsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRDVE0+PiBTZXRDVE06OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4g
dHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3Jt
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldENUTTo6Y3Jl
YXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0ZUNUTSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENvbmNh
dGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDogbV90
cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNhdGVuYXRlQ1RNPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDb25jYXRlbmF0ZUNU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAK
K3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0ZW5hdGVDVE0+PiBDb25jYXRl
bmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8QWZmaW5l
VHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0cmFuc2Zvcm07Ci0gICAgaWYg
KCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
Q29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xhc3MgU2V0SW5saW5l
RmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50
IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBtYXhDb2xvclN0b3BD
b3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRl
KGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGll
bnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVudCgpOwotCi0gICAgUmVm
PEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50Pj4gZGVjb2RlKERl
Y29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVu
dD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90
PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBjb25zdCBHcmFkaWVudDo6RGF0
YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BD
b3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxH
cmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
biwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAgIH0KLQorICAgIFNldElubGlu
ZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNldElu
bGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8
dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEm
LAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpOwogCi0g
ICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50Jik7CisgICAgc3RhdGljIGJv
b2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50
KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisKK3ByaXZhdGU6CiAgICAg
ZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAgICBTUkdCQTx1aW50OF90PiBt
X2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGllbnQ6OkRhdGEgbV9kYXRhOwpA
QCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWludDhfdCBtX2NvbG9yU3RvcENv
dW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0SW5saW5l
RmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbV9j
b2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgbV9vZmZzZXRzW2ldOwot
ICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvcnNbaV0gfS52YWx1
ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAgZW5jb2RlciA8PCBtX2dyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8IG1fc3ByZWFkTWV0aG9kOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxH
cmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291bnQ7Ci0gICAgZGVjb2RlciA+
PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BDb3VudCA+IG1heENvbG9yU3Rv
cENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgZmxvYXQgb2Zmc2V0
c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9y
U3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAqY29sb3JTdG9wQ291bnQ7
ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0OwotICAgICAgICBkZWNvZGVy
ID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBjb2xvcjsKLSAgICAgICAg
ZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikKLSAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0gYXNTUkdCQShQYWNrZWRDb2xv
cjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tpXSA9ICpvZmZzZXQ7Ci0gICAg
fQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7Ci0gICAgZGVjb2RlciA+PiBk
YXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwot
ICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAgIGlmICghZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNwcmVhZE1ldGhvZDsKLSAgICBk
ZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVhZE1ldGhvZCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNldElubGluZUZpbGxHcmFkaWVu
dDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkgfTsKLX0KLQotY2xhc3MgU2V0
SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbENvbG9y
IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZUZpbGxD
b2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0
dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JE
YXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcikKLSAgICAg
ICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JE
YXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9y
RGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToK
ICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRh
IH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0
SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7Ci0gICAgZGVjb2RlciA+PiB2
YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JHQkEoUGFja2VkQ29sb3I6
OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxpbmVTdHJva2VDb2xvciA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9yIHsKIHB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9rZUNvbG9yPiBjcmVhdGUoU1JH
QkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lU3Ry
b2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9y
RGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1wcml2YXRl
OgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAg
ICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcikKLSAgICAgICAgLCBt
X2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7Ci19OworICAgIENvbG9y
IGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9j
b2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZVN0
cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAgICBkZWNvZGVyID4+IHZhbHVl
OwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNl
dElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICp2
YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwor
fTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNrbmVzcyk7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3MoKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgZmxvYXQgdGhp
Y2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0cm9rZVRoaWNrbmVzcz4+IGRl
Y29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0
IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3Mp
Ci0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAgICAgICA6IG1fdGhpY2tuZXNz
KHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhpY2tuZXNzIHsgMCB9OwotfTsK
KyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90aGlja25lc3M7Ci19
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+PiBTZXRTdHJva2VU
aGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0
PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7Ci0gICAgaWYgKCF0aGlja25l
c3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNldFN0cm9rZVRoaWNrbmVz
czo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAgICBmbG9hdCBtX3RoaWNrbmVz
cyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0
U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxTZXRTdGF0ZT4g
Y3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlQ2hhbmdlKSk7
Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAgCiAgICAgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQog
CkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRl
Q2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3Rh
dGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAK
K3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9zdGF0ZTsKIH07CiAK
QEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRT
dGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFNldFN0
YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5nZUZsYWdzOwogICAg
IGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYyMCw1NSBAQCBPcHRpb25hbDxS
ZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSAqc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNldFN0YXRlOjpjcmVhdGUoc3Rh
dGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07CiB9CiAKLWNsYXNzIFNldExp
bmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2FwIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXApCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGluZUNhcCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAoKTsKLSAgICAKICAgICBMaW5l
Q2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBkZWNvZGUo
RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVDYXAoTGlu
ZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIExpbmVD
YXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGlu
ZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0
TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+PiBsaW5lQ2FwOwotICAgIGlm
ICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBT
ZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFzcyBTZXRMaW5lRGFzaCA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRh
c2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBk
YXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJheSkKKyAgICAgICAgLCBt
X2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0KICAgICBjb25zdCBEYXNoQXJy
YXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9CiAgICAgZmxvYXQg
ZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZURhc2g+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFNl
dExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIERhc2hBcnJheSBt
X2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9OwpAQCAtOTcwLDcgKzY4MSw3
IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0
TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U2V0TGluZURhc2g+
IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxE
YXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRhc2hBcnJheTsKQEAgLTk4Miwy
MTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9mZnNldCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5lRGFzaDo6Y3JlYXRlKCpkYXNo
QXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRhc2hBcnJheSwgKmRhc2hPZmZz
ZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUpvaW4+IGNyZWF0ZShM
aW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKKyAgICAgICAg
OiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVKb2luIGxpbmVKb2luKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2luKExpbmVKb2luKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGluZUpvaW4gbV9saW5lSm9p
bjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVKb2luOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fbGluZUpvaW47
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+
PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGluZUpvaW47Ci0gICAgaWYgKCFs
aW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRM
aW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNzIFNldE1pdGVyTGltaXQgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQobGltaXQpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRNaXRlckxpbWl0KCk7Ci0KICAg
ICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxpbWl0OyB9CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRNaXRlckxp
bWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
ZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZh
dGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1pdGVyTGltaXQ6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBtaXRlckxpbWl0OwotICAg
IGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVyTGltaXQpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKCpt
aXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBwdWJsaWMgSXRlbSB7CitjbGFz
cyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhclNoYWRvdz4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyU2hhZG93KTsK
LSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclNoYWRvdygpOwotCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJTaGFk
b3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGVhclNoYWRv
dygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBDbGVh
clNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBDbGVhclNoYWRvdzo6Y3Jl
YXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5nSXRlbT8KLWNsYXNzIENsaXAg
OiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBpdGVtPworY2xhc3Mg
Q2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisg
ICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJlY3QpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7CisgICAgY29uc3QgRmxvYXRSZWN0
JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xp
cChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAg
aWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENs
aXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQgOiBwdWJsaWMgSXRlbSB7Citj
bGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBPdXQ+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAg
OiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBP
dXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXQo
KTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAogcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQogICAgIEZsb2F0
UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGlwT3V0
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVj
dDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0Pj4g
Q2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcE91dDo6Y3JlYXRlKCpyZWN0
KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBP
dXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91dFRvUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAg
OiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBh
dGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDbGlw
T3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsK
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAwLDM3ICs4MzQsNDcgQEAgdm9p
ZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0VG9QYXRoPj4gQ2xpcE91
dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxDbGlwT3V0VG9QYXRo
PiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xpcE91dFRvUGF0aDo6Y3Jl
YXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNz
IENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBhdGggewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3
aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwor
CisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgICAgICA6
IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChwYXRoLCB3aW5kUnVs
ZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwUGF0aCgpOworICAgIENsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgICAgICA6IG1fcGF0
aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisgICAgeworICAgIH0KIAog
ICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBXaW5k
UnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gZGVjb2Rl
KERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBQYXRoPiBkZWNvZGUoRGVj
b2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9w
YXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBAIC0xMjQyLDcgKzg4Niw3IEBA
IHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBhdGg+IENsaXBQYXRoOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRl
Y29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCwzNSBAQCBPcHRpb25hbDxSZWY8Q2xpcFBh
dGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCF3aW5kUnVs
ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBDbGlwUGF0aDo6
Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSwg
KndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21t
YW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0Nv
bW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwg
bV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9kcmF3aW5nQ29tbWFuZHMoV1RG
TW92ZShkcmF3aW5nQ29tbWFuZHMpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KGRyYXdpbmdDb21tYW5kcykpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzKCk7Ci0KICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0
JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdDb21tYW5kczsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBkZWNvZGUoRGVj
b2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlLCBEaXNwbGF5TGlz
dCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2
YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIENvbG9yU3BhY2UgbV9jb2xv
clNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1hbmRzOwpAQCAtMTI4OCwxMSAr
OTM3LDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGluYXRpb247CiAgICAgZW5jb2Rl
ciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2RyYXdpbmdDb21tYW5kczsKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBpbi1tZW1vcnkgZGlzcGxheSBs
aXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwVG9E
cmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBDbGlwVG9EcmF3aW5nQ29t
bWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5hdGlvbjsKQEAgLTEzMDQsMjcg
Kzk1MywxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIGlmICghY29sb3JTcGFjZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPERpc3BsYXlMaXN0
PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAg
aWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoKmRlc3RpbmF0aW9uLCAqY29s
b3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCisgICAgRGlzcGxh
eUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAqZGVzdGluYXRpb24sICpjb2xv
clNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9CiAKLWNsYXNzIERyYXdHbHlw
aHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0dseXBocyB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNvdW50LCBsb2NhbEFu
Y2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBo
cz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+
JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250
LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBsb2NhbEFuY2hvciwgc21vb3Ro
aW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdHbHlw
aHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAog
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5NzEsMjEgQEAgcHVibGljOgogICAgIGNvbnN0IFZl
Y3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7IHJldHVybiBtX2ds
eXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShEZWNvZGVyJik7CiAKLXBy
aXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9h
dFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+
JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZvaWQgY29tcHV0ZUJvdW5k
cygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAorcHJp
dmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBHbHlwaEJ1ZmZlciBnZW5lcmF0
ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4gbV9mb250OworICAgIFJlZlB0
cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4gbV9nbHlw
aHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiBtX2FkdmFuY2VzOwogICAg
IEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArOTk2LDcgQEAgcHJpdmF0ZToKIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9mb250OworICAgIGVuY29kZXIgPDwgbWFr
ZVJlZigqbV9mb250KTsKICAgICBlbmNvZGVyIDw8IG1fZ2x5cGhzOwogICAgIGVuY29kZXIgPDwg
bV9hZHZhbmNlczsKICAgICBlbmNvZGVyIDw8IG1fbG9jYWxBbmNob3I7CkBAIC0xMzY2LDcgKzEw
MDQsNyBAQCB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBE
cmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdHbHlwaHM+
IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFJl
ZjxGb250Pj4gZm9udDsKICAgICBkZWNvZGVyID4+IGZvbnQ7CkBAIC0xMzk2LDMyICsxMDM0LDM1
IEBAIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdHbHlwaHM6OmNyZWF0ZShmb250LT5nZXQoKSwgV1RG
TW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAqbG9jYWxBbmNob3IsICpzbW9vdGhp
bmdNb2RlKTsKKyAgICByZXR1cm4ge3sgZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdU
Rk1vdmUoKmFkdmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSB9fTsKIH0KLQot
Y2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdJbWFnZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3SW1hZ2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX2ltYWdl
UGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkRyYXdJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVy
biBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdJbWFnZT4gZGVjb2RlKERlY29kZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAg
ICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBj
YW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2
ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0
UmVjdCBtX3NvdXJjZTsKQEAgLTE0NDEsNyArMTA4Miw3IEBAIHZvaWQgRHJhd0ltYWdlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlPiBEcmF3SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNv
ZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTQ2MywxNyArMTEwNCwxNCBAQCBPcHRpb25hbDxSZWY8
RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIERyYXdJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5h
dGlvbiwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmlt
YWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1hZ2VQYWludGluZ09w
dGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIERyYXdUaWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdU
aWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFj
aW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdUaWxlZEltYWdlKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UG9pbnQgc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTE0ODIsMTYgKzExMjAsMjUgQEAgcHVibGljOgogICAg
IEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNpemU7IH0KICAgICBG
bG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1hZ2U+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIERyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2lt
YWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCisgICAg
ICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9u
cyhpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgfQogCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
aXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6
CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdl
cyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3Qg
aGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZs
b2F0UG9pbnQgbV9zb3VyY2U7CkBAIC0xNTE0LDcgKzExNjEsNyBAQCB2b2lkIERyYXdUaWxlZElt
YWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IERyYXdUaWxlZEltYWdlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBEcmF3VGls
ZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VI
YW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xNTQ2
LDMyICsxMTkzLDM5IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IERyYXdUaWxlZElt
YWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWltYWdlUGFpbnRpbmdPcHRp
b25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdUaWxl
ZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNl
LCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVy
biB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6
ZSwgKnNwYWNpbmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd1Rp
bGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1RpbGVkU2Nh
bGVkSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3VGlsZWRTY2Fs
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2ltYWdlKGlt
YWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwgbV9z
b3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3Rv
cikKKyAgICAgICAgLCBtX2hSdWxlKGhSdWxlKQorICAgICAgICAsIG1fdlJ1bGUodlJ1bGUpCisg
ICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNjYWxlZEltYWdlKGlt
YWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gZGVjb2RlKERl
Y29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRTY2FsZWRJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVS
dWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdU
aWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAor
cHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdp
bmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNo
b3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247
CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAtMTU5Niw3ICsxMjUwLDcgQEAgdm9pZCBEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25h
bDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsK
ICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTYzMSwzMyArMTI4NSwzNyBAQCBPcHRp
b25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1RpbGVkU2NhbGVkSW1h
Z2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKKyAg
ICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAq
dGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsK
IH0KIAotY2xhc3MgRHJhd0ltYWdlQnVmZmVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IERyYXdJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdJbWFn
ZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorICAgICAgICA6IG1fcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAg
ICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAgICAgICAgLCBtX3NyY1JlY3Qo
c3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsKLQogICAgIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQogICAgIEZsb2F0UmVjdCBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBGbG9hdFJlY3QgZGVzdGluYXRp
b25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KICAgICBJbWFnZVBh
aW50aW5nT3B0aW9ucyBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VC
dWZmZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ltYWdlQnVmZmVyPiBkZWNvZGUo
RGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBt
X3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlv
blJlY3Q7CiAgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKQEAgLTE2NzQsNyArMTMzMiw3IEBAIHZv
aWQgRHJhd0ltYWdlQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBE
cmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0lt
YWdlQnVmZmVyPiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
OwpAQCAtMTY5NiwzMSArMTM1NCwyOSBAQCBPcHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4g
RHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIW9wdGlv
bnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ltYWdl
QnVmZmVyOjpjcmVhdGUoKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKmRlc3RpbmF0aW9u
LCAqc291cmNlLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICpyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMgfX07CiB9CiAKLWNsYXNz
IERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3TmF0aXZl
SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd05hdGl2ZUltYWdlPiBjcmVhdGUo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJh
d05hdGl2ZUltYWdlKCk7Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zcmNSZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd05hdGl2ZUlt
YWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQor
ICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvblJlY3Q7IH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0
aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0
OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3TmF0aXZlSW1h
Z2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9p
bWFnZTsKICAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGlu
YXRpb25SZWN0OwpAQCAtMTczOSw3ICsxMzk1LDcgQEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IERyYXdOYXRpdmVJ
bWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8TmF0aXZlSW1h
Z2VQdHI+IGltYWdlOwogICAgIGRlY29kZXIgPj4gaW1hZ2U7CkBAIC0xNzY2LDE3ICsxNDIyLDE2
IEBAIE9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSgqaW1hZ2Us
ICppbWFnZVNpemUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyk7CisgICAg
cmV0dXJuIHt7ICppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVjdCwgKnNyY1JlY3Qs
ICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBEcmF3UGF0dGVybiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0
dGVybj4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7Ci0gICAgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdHRl
cm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJh
d1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlLmdldCgpOyB9CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9CkBAIC0xNzg1LDE2ICsxNDQw
LDE1IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9w
aGFzZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5n
OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3UGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdHRlcm4+IGRlY29kZShEZWNvZGVyJik7
CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBE
cmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhp
cyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3Bh
dHRlcm5UcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CkBAIC0xODE5LDcgKzE0
NzMsNyBAQCB2b2lkIERyYXdQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+
IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXR0
ZXJuPiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7
CkBAIC0xODU2LDE4MiArMTUxMCwxMDAgQEAgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJh
d1BhdHRlcm46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0dGVybjo6Y3Jl
YXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVy
blRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAq
aW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFu
c2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcsICpvcHRpb25zIH19OwogfQogCi0vLyBJcyBEcmF3aW5n
SXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGlj
aXRseSB0aGUgY2xpcCBib3VuZHMuCi1jbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9w
YWNpdHkpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsgLy8gSXMgZHJhd2luZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5z
cGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KKworICAgIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBtX29wYWNpdHkob3Bh
Y2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIob3BhY2l0eSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7
IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgog
ICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9vcGFjaXR5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBCZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4g
b3BhY2l0eTsKLSAgICBkZWNvZGVyID4+IG9wYWNpdHk7Ci0gICAgaWYgKCFvcGFjaXR5KQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0eSk7Ci19Ci0KLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVy
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOwot
ICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxh
eWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBF
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBFbmRUcmFuc3Bh
cmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gRW5kVHJhbnNw
YXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gRW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3UmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1Jl
Y3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1Jl
Y3QoRmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBtX3Jl
Y3QocmVjdCkKKyAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UmVj
dCgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAg
ICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVz
czsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RHJhd1JlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBmbG9hdCBtX2JvcmRlclRo
aWNrbmVzczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdSZWN0Ojpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsK
LSAgICBlbmNvZGVyIDw8IG1fYm9yZGVyVGhpY2tuZXNzOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gRHJhd1JlY3Q6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVy
ID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGJvcmRlclRoaWNrbmVzczsKLSAgICBkZWNvZGVyID4+IGJv
cmRlclRoaWNrbmVzczsKLSAgICBpZiAoIWJvcmRlclRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3UmVjdDo6Y3JlYXRlKCpyZWN0LCAqYm9y
ZGVyVGhpY2tuZXNzKTsKLX0KLQotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRHJhd0xpbmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNy
ZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdM
aW5lOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdM
aW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikKKyAgICAgICAgOiBtX3Bv
aW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZSgpOwotCiAgICAgRmxvYXRQb2lu
dCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQogICAgIEZsb2F0UG9pbnQgcG9p
bnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRl
OgogICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7CiAgICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdMaW5lOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQxOwotICAgIGVuY29k
ZXIgPDwgbV9wb2ludDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd0xpbmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQxOwotICAgIGRlY29kZXIgPj4gcG9pbnQxOwotICAg
IGlmICghcG9pbnQxKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9u
YWw8RmxvYXRQb2ludD4gcG9pbnQyOwotICAgIGRlY29kZXIgPj4gcG9pbnQyOwotICAgIGlmICgh
cG9pbnQyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIERyYXdM
aW5lOjpjcmVhdGUoKnBvaW50MSwgKnBvaW50Mik7Ci19Ci0KLWNsYXNzIERyYXdMaW5lc0ZvclRl
eHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQ
b2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5l
c0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5EcmF3TGluZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2Fs
QW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2Nr
TG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQyLDE2ICsxNjE0LDE1IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAg
ICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5l
c0ZvclRleHQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPERyYXdMaW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7
CiAgICAgRGFzaEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3Miw3ICsxNjQzLDcgQEAgdm9pZCBEcmF3
TGluZXNGb3JUZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xp
bmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TGluZXNG
b3JUZXh0PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwogICAgIGRlY29kZXIgPj4gYmxv
Y2tMb2NhdGlvbjsKQEAgLTIxMDQsMTE5ICsxNjc1LDgzIEBAIE9wdGlvbmFsPFJlZjxEcmF3TGlu
ZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgaWYgKCFkb3VibGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2NrTG9jYXRpb24sICpsb2NhbEFu
Y2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMpOworICAg
IHJldHVybiB7eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lk
dGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAotY2xhc3MgRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5
bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICBGbG9h
dFJlY3QgbV9yZWN0OworICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7Cit9Owor
CitjbGFzcyBEcmF3RWxsaXBzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0KKworICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0
OwotICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNv
ZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHN0
eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19Ci0KLWNsYXNzIERyYXdFbGxpcHNlIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdGg7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgfkRyYXdFbGxpcHNlKCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVjdDsKLX07Ci0KLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IERyYXdFbGxpcHNlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7
Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKLX0K
LQotY2xhc3MgRHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIERyYXdQYXRo
KFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXRoKCk7Ci0KICAgICBjb25zdCBQYXRoJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3UGF0aD4gZGVjb2Rl
KERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAK
LSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjIyNiwyNCArMTc2MSwzNyBAQCB2b2lkIERy
YXdQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IERyYXdQYXRoOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXRoPiBEcmF3UGF0aDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+
IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIERyYXdQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3Zl
KCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RHJhd0ZvY3VzUmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ZvY3VzUmluZ1Bh
dGgoUGF0aCYmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIENvbG9yIGNvbG9yKQor
ICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lkdGgod2lkdGgp
CisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRo
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAg
ICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBt
X29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQog
CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGZs
b2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMjI1MSwxNiArMTc5OSwx
NSBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERl
Y29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUGF0
aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsK
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2
YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9v
ZmZzZXQ7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTIyNzYsNyArMTgyMyw3IEBAIHZvaWQgRHJh
d0ZvY3VzUmluZ1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJh
d0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0Zv
Y3VzUmluZ1BhdGg+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTIy
OTgsMzMgKzE4NDUsMzEgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0Zv
Y3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ZvY3VzUmluZ1Bh
dGg6OmNyZWF0ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworICAgIHJldHVybiB7
eyBXVEZNb3ZlKCpwYXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNz
IERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3Rm9j
dXNSaW5nUmVjdHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3Rz
PiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUmVj
dHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwog
CiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3RzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAg
ZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xv
ciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGb2N1c1Jp
bmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gZGVj
b2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3Rz
OwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CkBAIC0yMzQxLDcgKzE4
ODYsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0Zv
Y3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxWZWN0b3I8RmxvYXRSZWN0Pj4g
cmVjdHM7CiAgICAgZGVjb2RlciA+PiByZWN0czsKQEAgLTIzNjMsNzEgKzE5MDgsNTUgQEAgT3B0
aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSgqcmVjdHMs
ICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3RzLCAqd2lkdGgs
ICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRmlsbFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsUmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RmlsbFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbV9y
ZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbFJlY3Q6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gRmlsbFJl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0OjpjcmVhdGUoKnJlY3QpOwot
fQotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJvcGVyLgot
Y2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmls
bFJlY3RXaXRoQ29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29s
b3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAg
ICBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVj
dCwgY29sb3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVj
dFdpdGhDb2xvcigpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxs
UmVjdFdpdGhDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVj
dFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxS
ZWN0V2l0aENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CkBAIC0yNDQwLDcgKzE5NjksNyBAQCB2
b2lkIEZpbGxSZWN0V2l0aENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xv
cj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PEZpbGxSZWN0V2l0aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4g
cmVjdDsKQEAgLTI0NTIsMjkgKzE5ODEsMjggQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENv
bG9yPj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmls
bFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJl
Y3QsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVj
dFdpdGhHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVj
dFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxS
ZWN0V2l0aEdyYWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0
UmVjdCBtX3JlY3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJ
WE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3LDcgKzIwMTUsNyBAQCB2b2lk
IEZpbGxSZWN0V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFk
aWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09w
dGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAg
IGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjYsMzcgQEAgT3B0aW9uYWw8UmVmPEZp
bGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGUKICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUoKnJlY3QsIGdyYWRp
ZW50LT5nZXQoKSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9
CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBGaWxsQ29tcG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbENvbXBv
c2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1f
cmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChvcCkK
KyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1v
ZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsQ29tcG9zaXRl
ZFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAg
IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9v
cDsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RmlsbENvbXBvc2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZp
bGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2Rl
KERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9y
IG1fY29sb3I7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKQEAgLTI1NDAsNyArMjA3Myw3
IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsQ29tcG9z
aXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBk
ZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk1LDM1IEBAIE9wdGlvbmFsPFJlZjxGaWxs
Q29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKCpyZWN0LCAqY29sb3IsICpv
cCwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5k
TW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxs
Um91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xv
cikKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgp
OwotCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxl
bmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IGRlY29kZShEZWNv
ZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3QucmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5y
ZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBD
b2xvciBtX2NvbG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKQEAgLTI2MDEsNyArMjEz
OCw3IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUm91bmRl
ZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9u
YWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2Rl
ciA+PiByZWN0OwpAQCAtMjYxOCwzMSArMjE1NSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbFJvdW5k
ZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBp
ZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlKTsKKyAg
ICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmls
bFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAg
ICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhv
bGVSZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CiAgICAgY29uc3Qg
Q29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERlY29kZXImKTsKIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIEZsb2F0Um91bmRlZFJlY3Qg
bV9yb3VuZGVkSG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTI2NTcsNyArMjE5OCw3
IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjY3NCw3NCArMjIx
NSw2MyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29sb3IpOworICAgIHJldHVybiB7
eyAqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19OwogfQogCiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZp
bGxJbmxpbmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbElubGlu
ZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmls
bElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1f
cGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVy
biBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYpOwot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQog
Citwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gRmlsbElubGlu
ZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBh
dGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0
aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRmlsbElu
bGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAjZW5kaWYgLy8gRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRo
PiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBt
X3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5G
aWxsUGF0aCgpOworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9w
YXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+IGRlY29kZShEZWNvZGVyJik7
CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBhdGgoY29uc3QgUGF0aCYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRo
IG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgpAQCAtMjc1MSw5MCArMjI4MSw2NSBAQCB2b2lkIEZpbGxQYXRoOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYg
KCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxQ
YXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0K
IAotY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbEVs
bGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RmlsbEVsbGlwc2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxGaWxsRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToK
ICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBQdXRJbWFnZURhdGEgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRhIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRl
c3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURh
dGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0
KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVhdGUoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92ZShpbWFnZURhdGEpLCBzcmNS
ZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflB1dEltYWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0KLSAgICBJbWFnZURh
dGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9CisgICAgSW1hZ2VE
YXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0KICAgICBJbnRS
ZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBJbnRQb2ludCBk
ZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQogICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdEZvcm1hdDsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UHV0SW1h
Z2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
e3sgbV9kZXN0UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0KIAotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0
KG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwog
Citwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIEludFBvaW50IG1fZGVzdFBv
aW50OwotICAgIFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgIFJlZlB0cjxJbWFnZURh
dGE+IG1faW1hZ2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9pbnB1dEZvcm1h
dDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsKIH07CkBAIC0yODQz
LDE0ICsyMzQ4LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1dEltYWdlRGF0
YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lu
cHV0Rm9ybWF0OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7CisgICAgZW5jb2RlciA8PCBt
YWtlUmVmKCptX2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7CiAgICAgZW5j
b2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZvcm1hdDsKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJ
bWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0SW1hZ2VEYXRh
PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFs
PEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9wdGlvbmFsPFJlZjxJ
bWFnZURhdGE+PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjM4MywxMDkgQEAgT3B0aW9uYWw8
UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1h
Z2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0KTsKKyAgICByZXR1cm4g
e3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVjdCwgKmRlc3RQb2lu
dCwgKmRlc3RGb3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJhbWVGb3JNZWRpYSA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Q
YWludEZyYW1lRm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAgICAgTWVkaWFQ
bGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFBh
aW50RnJhbWVGb3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0ZShNZWRpYVBs
YXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotCi0gICAgUGFp
bnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7Ci0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9
CiAKK3ByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAg
ICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAgZW5jb2RlciA8PCBtX2Rlc3Rp
bmF0aW9uOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFBhaW50
RnJhbWVGb3JNZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBpZGVudGlmaWVyOwot
ICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlkZW50aWZpZXIpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0
aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBQYWludEZyYW1lRm9y
TWVkaWE6OmNyZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9uKTsKLX0KLQotY2xhc3MgU3Ry
b2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VSZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2xpbmVXaWR0
aChsaW5lV2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflN0cm9rZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lk
dGg7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgZmxvYXQg
bV9saW5lV2lkdGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VS
ZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
cmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJva2VSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVj
b2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0gICAgZGVjb2RlciA+PiBsaW5l
V2lkdGg7Ci0gICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGluZVdpZHRoKTsKLX0K
LQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VJbmxpbmVQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlubGluZVBhdGggewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBh
dGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0
YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERhdGEpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQYXRoKCk7Ci0K
ICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJv
a2VJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERhdGEgbV9wYXRoRGF0
YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUlubGluZVBhdGg6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9wYXRo
RGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VJ
bmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAgIGRlY29kZXIgPj4g
cGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERh
dGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBT
dHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZVBhdGggewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJv
a2VQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBT
dHJva2VQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUGF0aCgpOworICAgIFN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICB7
CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ry
b2tlUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0
aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzA1MCw3MjEgKzI0
OTUsMTE1IEBAIHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+
IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U3Ryb2tlUGF0
aD4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8
UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0cm9rZVBhdGg6OmNyZWF0ZSgq
cGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBTdHJv
a2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUVsbGlwc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlN0cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJv
a2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+U3Ryb2tlRWxs
aXBzZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgU3Ryb2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+
IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsZWFy
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVhclJlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIENsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVjdCgpOworICAgIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0
OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBDbGVhclJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNpZiBVU0UoQ0cpCi1jbGFzcyBB
cHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gZGVjb2Rl
KERlY29kZXImKTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBh
dHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBs
eVN0cm9rZVBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+PiBBcHBseVN0
cm9rZVBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlTdHJva2VQ
YXR0ZXJuOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlGaWxsUGF0dGVybj4+IEFwcGx5
RmlsbFBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlGaWxsUGF0
dGVybjo6Y3JlYXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
ciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNj
YWxlRmFjdG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKKyAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3Rv
cikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZUZhY3RvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV9z
Y2FsZUZhY3RvcjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zY2Fs
ZUZhY3RvcjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBs
eURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9yOwotICAgIGRl
Y29kZXIgPj4gc2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURldmljZVNjYWxlRmFjdG9yOjpj
cmVhdGUoKnNjYWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fdHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2F2ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTYXZlPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8VHJhbnNsYXRl
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
U2NhbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RN
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxTZXRTdGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
ZXRNaXRlckxpbWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsZWFyU2hhZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyU2hhZG93Pigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBP
dXQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRv
UGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxEcmF3R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdSZWN0Pigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJh
d1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1Bh
dGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1JlY3RzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0
cz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbElubGluZVBh
dGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUGF0aD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8UHV0SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxQ
YWludEZyYW1lRm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VSZWN0
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUVs
bGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseVN0cm9r
ZVBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseUZpbGxQYXR0
ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBs
eURldmljZVNjYWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRlbVR5cGU+IGl0ZW1UeXBlOwot
ICAgIGRlY29kZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVtVHlwZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1UeXBlKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNhdmU6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3Jl
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2Nh
bGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRDVE06OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENvbmNhdGVuYXRlQ1RNOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVRoaWNr
bmVzczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0U3RhdGU6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZUNhcDo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVEYXNoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURhc2g6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVKb2luOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1pdGVyTGltaXQ6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBDbGlwUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TmF0aXZlSW1hZ2U6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXR0ZXJuOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UmVjdDo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1Bh
dGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdG
b2N1c1JpbmdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJvdW5kZWRS
ZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbElubGluZVBh
dGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBh
dGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxFbGxpcHNl
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUHV0SW1hZ2VEYXRh
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUGFpbnRG
cmFtZUZvck1lZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0
cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQ
YXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVBhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlRWxsaXBzZTo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsZWFyUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyUmVjdDo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBh
dHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlGaWxsUGF0dGVy
bjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQorVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhhbmRsZSk7CiAKIH0gLy8gbmFt
ZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBl
TmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0
LnByZWRpY2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlzRHJh
d2luZ0l0ZW0oKSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVO
YW1lOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldENUTSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNUTSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVGaWxsR3JhZGllbnQp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbENv
bG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZVN0
cm9rZUNvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0
cm9rZVRoaWNrbmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
ZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5l
Q2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNo
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEZpbGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUHV0SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTdHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGluZVBhdGgpCi0jZW5k
aWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5
TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQogbmFtZXNwYWNlIFdURiB7
CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXgg
ZDE0MmMzNzc5Y2I5OTNlNzM3MmJiOGI4ODg3ZmNjNGM3NTJmZTk4OS4uOTBlYmRlNTVmODk3OTZh
ODExODc5ZGIwNzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKIAog
dm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVz
dFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0g
ICAgYXBwZW5kSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7
CisgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5
SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFu
Z2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykK
QEAgLTg3LDMxICs4NywzMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNo
YW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogdm9pZCBSZWNvcmRl
cjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VG
bGFncykKIHsKICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2Vz
LCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldFN0
YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncykpOworICAgICAgICBhcHBl
bmQ8U2V0U3RhdGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5k
SXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VD
b2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4o
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ryb2tlVGhpY2tuZXNz
OjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICBhcHBl
bmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
IAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGlu
ZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSkp
OworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihjaGFuZ2VzLm1fc3RhdGUuZmls
bENvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlM
aXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoKmNoYW5nZXMubV9z
dGF0ZS5maWxsR3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVu
dD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQogCi12b2lkIFJlY29yZGVyOjp3
aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQordm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVu
ZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKIHsKICAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+d2lsbEFwcGVuZEl0ZW0oaXRlbSk7CisgICAgICAgIG1fZGVsZWdhdGUt
PndpbGxBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwogCi0gICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRl
bSgpCisgICAgaWYgKGlzRHJhd2luZ0l0ZW0odHlwZSkKICNpZiBVU0UoQ0cpCi0gICAgICAgIHx8
IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gfHwgaXRlbS50eXBl
KCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgorICAgICAgICB8fCB0eXBlID09IEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gfHwgdHlwZSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJv
a2VQYXR0ZXJuCiAjZW5kaWYKICAgICApIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgpLnN0YXRlQ2hhbmdlOwpAQCAtMTI2
LDEwICsxMjYsMTAgQEAgdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYg
aXRlbSkKICAgICB9CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW0oY29uc3QgSXRl
bSYgaXRlbSkKK3ZvaWQgUmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlw
ZSkKIHsKICAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkQXBwZW5k
SXRlbShpdGVtKTsKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlkQXBwZW5kSXRlbU9mVHlwZSh0eXBl
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFn
cykKQEAgLTEzOSwyNyArMTM5LDI3IEBAIHZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhCiAKIHZvaWQg
UmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBhcHBlbmRJdGVtKENsZWFyU2hhZG93Ojpj
cmVhdGUoKSk7CisgICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVD
YXA6OmNyZWF0ZShsaW5lQ2FwKSk7CisgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwog
fQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJh
eSwgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVh
dGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwZW5kPFNldExpbmVEYXNoPihkYXNo
QXJyYXksIGRhc2hPZmZzZXQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaW5lSm9pbikKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVKb2luOjpjcmVhdGUobGlu
ZUpvaW4pKTsKKyAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGFwcGVuZEl0
ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGltaXQpKTsKKyAgICBhcHBlbmQ8U2V0TWl0
ZXJMaW1pdD4obWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0xNjksMTkgKzE2OSwxOSBAQCB2b2lk
IFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFn
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0
ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAg
ICBhcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0K
IAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMp
KTsKKyAgICBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVy
OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBp
bWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVj
b3JkOwogfQogCkBAIC0xOTAsMjMgKzE5MCwyMyBAQCBib29sIFJlY29yZGVyOjpkcmF3SW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwog
ICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+bG9ja1JlbW90ZUltYWdlQnVmZmVy
KGltYWdlQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAg
ICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdOYXRp
dmVJbWFnZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKSk7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2UsIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVy
bihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdQ
YXR0ZXJuPihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAg
IGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxTYXZlPigpOwogICAgIG1f
c3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7CiB9
CiAKQEAgLTIyMSwyNSArMjIxLDI1IEBAIHZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIC8v
IEhhdmUgdG8gYXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9SZXN0b3JlIHdoZW4gYSBkZXNjZW5k
YW50IHN0YXRlIGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCiAgICAgY3VycmVudFN0YXRlKCkud2Fz
VXNlZEZvckRyYXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2luZzsKIAotICAgIGFwcGVuZEl0ZW0o
UmVzdG9yZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCiB2b2lkIFJl
Y29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBjdXJyZW50U3RhdGUo
KS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5
KSk7CisgICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKIHsKICAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUo
YW5nbGVJblJhZGlhbnMpOwotICAgIGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJh
ZGlhbnMpKTsKKyAgICBhcHBlbmQ8Um90YXRlPihhbmdsZUluUmFkaWFucyk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBjdXJyZW50U3Rh
dGUoKS5zY2FsZShzaXplKTsKLSAgICBhcHBlbmRJdGVtKFNjYWxlOjpjcmVhdGUoc2l6ZSkpOwor
ICAgIGFwcGVuZDxTY2FsZT4oc2l6ZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKQEAgLTI0OCwxMyArMjQ4LDEzIEBAIHZv
aWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOwor
ICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGN1cnJl
bnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oU2V0Q1RNOjpjcmVh
dGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKIH0KIAogQWZm
aW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpCkBAIC0yNjUsMTU4ICsyNjUsMTU4IEBAIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRl
cjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQogCiB2b2lkIFJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3Bh
Y2l0eSkpOworICAgIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZEl0
ZW0oRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8RW5kVHJhbnNw
YXJlbmN5TGF5ZXI+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZEl0ZW1BbmRV
cGRhdGVFeHRlbnQoRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAg
ICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0xpbmU6OmNy
ZWF0ZShwb2ludDEsIHBvaW50MikpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2lu
dDIpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUo
cG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7CisgICAg
YXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQp
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHJlY3QsIHN0eWxlKSk7
CisgICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0VsbGlwc2U6OmNyZWF0ZShyZWN0KSk7
CisgICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KERyYXdQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lk
dGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJh
d0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Cisg
ICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSk7
CisgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNv
bG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihyZWN0LCBjb2xvcik7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRo
R3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpOworICAgIGFwcGVuZDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5k
TW9kZSkpOworICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBvcCwg
YmxlbmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSb3VuZGVkUmVjdDo6
Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRS
ZWN0PihyZWN0LCBjb2xvciwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbElubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEo
KSkpOworICAgICAgICBhcHBlbmQ8RmlsbElubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRo
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbEVsbGlwc2U6OmNyZWF0ZShy
ZWN0KSk7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsK
LSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBs
aW5lV2lkdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewot
ICAgICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUlubGluZVBhdGg6OmNyZWF0
ZShwYXRoLmlubGluZURhdGEoKSkpOworICAgICAgICBhcHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4o
cGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpOworICAg
IGFwcGVuZDxTdHJva2VQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxTdHJva2VFbGxp
cHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KENsZWFyUmVjdDo6Y3Jl
YXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogI2lmIFVTRShD
RykKIHZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kSXRl
bShBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJva2VQ
YXR0ZXJuPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAg
ICBhcHBlbmRJdGVtKEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBw
bHlGaWxsUGF0dGVybj4oKTsKIH0KICNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVy
c2VjdChyZWN0KTsKLSAgICBhcHBlbmRJdGVtKENsaXA6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBw
ZW5kPENsaXA+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXQ6OmNyZWF0ZShyZWN0KSk7Cisg
ICAgYXBwZW5kPENsaXBPdXQ+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUo
cGF0aCkpOworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CiAg
ICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNyZWF0ZShwYXRoLCB3aW5kUnVsZSkp
OworICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCiBJbnRSZWN0IFJl
Y29yZGVyOjpjbGlwQm91bmRzKCkKQEAgLTQ0NCwxOSArNDQ0LDE5IEBAIHZvaWQgUmVjb3JkZXI6
OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xv
clNwYWNlIGNvCiAKICAgICBhdXRvIHJlY29yZGluZ0NvbnRleHQgPSBtYWtlVW5pcXVlPERyYXdp
bmdDb250ZXh0PihkZXN0aW5hdGlvbi5zaXplKCksIGluaXRpYWxDVE0pOwogICAgIGRyYXdpbmdG
dW5jdGlvbihyZWNvcmRpbmdDb250ZXh0LT5jb250ZXh0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29y
ZGluZ0NvbnRleHQtPnRha2VEaXNwbGF5TGlzdCgpKSk7CisgICAgYXBwZW5kPENsaXBUb0RyYXdp
bmdDb21tYW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRh
a2VEaXNwbGF5TGlzdCgpKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0g
ICAgYXBwZW5kSXRlbShQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShwbGF5ZXIsIGRlc3RpbmF0
aW9uKSk7CisgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlv
bik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNU
TSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCiAgICAg
Ly8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICBhcHBlbmRJdGVt
KEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworICAg
IGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAK
IEZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtNDY1LDI5ICs0NjUsNiBA
QCBGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OgogICAgIHJldHVybiByZWN0OwogfQogCi12b2lkIFJl
Y29yZGVyOjphcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJiBpdGVt
KQotewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICBhcHBlbmRJ
dGVtKFdURk1vdmUoaXRlbSkpOwotICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Ci19Ci0K
LXZvaWQgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKLXsKLSAgICBJdGVt
JiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICB3aWxsQXBwZW5kSXRlbShpdGVtLmdldCgpKTsK
LSAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICBkaWRBcHBlbmRJ
dGVtKG5ld0l0ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdp
bmdJdGVtJiBpdGVtKSBjb25zdAotewotICAgIGlmIChPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Qg
PSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKLSAgICAgICAgaXRlbS5zZXRF
eHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKHJlY3QudmFsdWUoKSkpOwotICAgIGVsc2UgaWYg
KE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCi0gICAgICAg
IGl0ZW0uc2V0RXh0ZW50KHJlY3QudmFsdWUoKSk7Ci19Ci0KIC8vIEZJWE1FOiBzaGFyZSB3aXRo
IFNoYWRvd0RhdGEKIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxv
YXQgYmx1clJhZGl1cykKIHsKQEAgLTUwNyw3ICs0ODQsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAg
ZmxvYXQgc2hhZG93UmFkaXVzOwogICAgIENvbG9yIHNoYWRvd0NvbG9yOwogICAgIGlmIChncmFw
aGljc0NvbnRleHQoKS5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKSkgewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAg
ICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVu
dC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRv
d1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hh
ZG93RXh0ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDMx
YzhjODk2Mzc4YzBjYWZiYjIxMTI4OTU5N2NlZTI4YjRmYTc1ZDIuLmZmZTE1OTFiYWZkNDlkYjMz
ZTk0M2U5OWMxYmExNGNkYmM0YzYwMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKICNp
bmNsdWRlICJEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5jbHVk
ZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJUZXh0RmxhZ3Mu
aCIKQEAgLTQ4LDggKzQ5LDYgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1l
c3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbTsKLQogY2xhc3MgUmVjb3Jk
ZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwpAQCAtNjAsMTQgKzU5
LDE0IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CiAKLSAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpOyB9CiAKICAgICBjbGFzcyBE
ZWxlZ2F0ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5EZWxlZ2F0ZSgpIHsgfQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgbG9ja1JlbW90ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdl
QnVmZmVyJikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxBcHBl
bmRJdGVtKGNvbnN0IEl0ZW0mKSB7IH07Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBlbmRJ
dGVtKGNvbnN0IEl0ZW0mKSB7IH07CisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQXBwZW5kSXRl
bU9mVHlwZShJdGVtVHlwZSkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRBcHBlbmRJdGVt
T2ZUeXBlKEl0ZW1UeXBlKSB7IH0KICAgICB9OwogCiBwcml2YXRlOgpAQCAtMTQ4LDE1ICsxNDcs
MzQgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKIAot
ICAgIHZvaWQgYXBwZW5kSXRlbShSZWY8SXRlbT4mJik7Ci0gICAgdm9pZCB3aWxsQXBwZW5kSXRl
bShjb25zdCBJdGVtJik7Ci0gICAgdm9pZCBkaWRBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKLSAg
ICB2b2lkIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgYXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoVDo6aXRl
bVR5cGUpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pOworICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1UeXBlKTsK
KworICAgICAgICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRlbUV4dGVu
dHMoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVtID0gVChzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5s
b2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0
LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOworICAg
ICAgICBlbHNlIGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQorICAgICAgICAg
ICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGOjpu
dWxsb3B0KTsKKyAgICB9CisKKyAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBl
KTsKKyAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwogCiAgICAgdm9pZCBh
cHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICBGbG9hdFJlY3Qg
ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIHZvaWQg
dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91
bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5k
ZXggY2Y0ZTc0NmU4MmRmZDRiNzMzYzNiYmY3ZTgyNDVlNWFmOTczNTQwZi4uZmViYmI5MmNmNTZl
NjA2Y2RjOTMyNTFmNGNiZDA3YzMxOTU4MTBhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcApAQCAtNTIsMTMgKzUyLDkgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3Bs
YXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJv
b2wKICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKICAgICAgICAgcmVwbGF5TGlz
dCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBt
X2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
SXRlbXM7ICsraSkgewotICAgICAgICBhdXRvJiBpdGVtID0gbV9kaXNwbGF5TGlzdC5saXN0KClb
aV0uZ2V0KCk7Ci0KLSAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxEcmF3
aW5nSXRlbT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGNvbnN0IERyYXdpbmdJdGVtJiBkcmF3aW5n
SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihpdGVtKTsKLSAgICAgICAgICAgIGlmIChkcmF3
aW5nSXRlbS5leHRlbnRLbm93bigpICYmICFkcmF3aW5nSXRlbS5leHRlbnQoKS5pbnRlcnNlY3Rz
KGluaXRpYWxDbGlwKSkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6IG1fZGlzcGxh
eUxpc3QpIHsKKyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpdGVtLmlzRHJh
d2luZ0l0ZW0oKSkgeworICAgICAgICAgICAgaWYgKGV4dGVudCAmJiAhZXh0ZW50LT5pbnRlcnNl
Y3RzKGluaXRpYWxDbGlwKSkgewogICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNw
bGF5TGlzdHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY4LDEwICs2NCwxMyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1f
ZGVsZWdhdGUtPmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAgICAgICAgICAgICBpdGVtLmFwcGx5
KG1fY29udGV4dCk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCi0g
ICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmRJdGVtKGNvbnN0X2Nhc3Q8SXRlbSY+KGl0ZW0p
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpIHsKKyAgICAgICAgICAg
IHJlcGxheUxpc3QtPmFwcGVuZChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmlzRHJhd2lu
Z0l0ZW0oKSkKKyAgICAgICAgICAgICAgICByZXBsYXlMaXN0LT5hZGREcmF3aW5nSXRlbUV4dGVu
dChXVEZNb3ZlKGV4dGVudCkpOworICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJu
IHJlcGxheUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmlu
ZGV4IDQwY2QwZmYwZDQxNjgwY2ZjNzNlNTA0ZGVjZmMzZGVmODc3NTMyMzMuLjA0NWNhY2NlOGEw
MWM4ZDVkY2I2NThjNDBkNjNlOWEzNTg5YjViNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZWdh
dGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+RGVsZWdhdGUoKSB7IH0KLSAgICAg
ICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW0mLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBm
YWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbUhhbmRsZSwgR3JhcGhpY3ND
b250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB9OwogICAgIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
LmgKaW5kZXggY2VkMWNhOTBmY2I4ZTJhODdmZTQzNGJiYjk3N2FlYTUwNmU5YzY1Yi4uOTU3YTBk
OWI3NDVmZDBiN2JjMTYyMjczN2NlYzg4ODhkNmFhNjlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTI3LDE0
ICsyNywxNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDog
cHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUsIHB1
YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgewogICAg
IHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNv
bnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKQEAg
LTY0LDE2ICs2NywxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZmx1c2hEaXNwbGF5
TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKSB7
CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QsIHRoaXMpOwogICAgICAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IG92ZXJyaWRlCisgICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRs
ZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpQdXRJbWFnZURhdGEpIHsKLSAgICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0g
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7
CisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+
KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICAgICAgcHV0SW1hZ2VE
YXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRGb3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFn
ZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVz
dFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC04NCw2ICs4NywxMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5hcHBseU1lZGlhSXRlbShpdGVtLCBj
b250ZXh0KTsKICAgICB9CiAKKyAgICBib29sIHJlcXVpcmVzRGVjb2RpbmcoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gIVdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGluZUl0ZW0odHlwZSk7CisgICAgfQor
CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5V
U0VEX1JFVFVSTiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgs
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlLCB1aW50OF90KiBoYW5kbGVMb2Nh
dGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAg
ICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXRUb1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUmVjdHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAg
ICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXR0ZXJuPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
SW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGls
ZWRTY2FsZWRJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsQ29tcG9zaXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0
aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENv
bG9yPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0SW1hZ2VEYXRhPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpB
cHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5k
aWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGVhclJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsaXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGlwT3V0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJv
a2VUaGlja25lc3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNl
bmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tl
UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5z
bGF0ZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE9wdGlvbmFsPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5k
Q3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRs
ZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6
ZGVjb2RlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxl
TG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZN
b3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZDViYjBmMmQwM2U2ZjM1YTk4ZTQxOWM0MTVkMDU2YjI5
NGJlNTdiYS4uNDY1YjZmNTkwMzg5YzBmMDI4MWU0NWFkNDY0MTYyZWNhMDA1ZjNmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEwIEBAIHVpbnQ2NF90IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29s
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IERpc3BsYXlM
aXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxl
IGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkg
PT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgYXV0
byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVm
ZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZl
cj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpE
cmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJl
c291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIEdyCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZy
YW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1lZGlh
SXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEm
PihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQ
YWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTQwLDE5ICsxMzksNDkgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERp
c3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QoY29u
c3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0IGZs
dXNoQ29udGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3Vy
Y2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQot
ICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CisgICAg
VmVjdG9yPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcj4gYnVmZmVy
SWRlbnRpZmllcnM7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5
TGlzdChbJl0gKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVu
dGlmaWVyKSAtPiB1aW50OF90KiB7CisgICAgICAgIGJ1ZmZlcklkZW50aWZpZXJzLmFwcGVuZChp
ZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gc2hhcmVkSXRlbUJ1
ZmZlcihpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0pOworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAgICAvLyBGSVhNRTogQWRk
IGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VD
YWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAg
IGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hl
Y2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBkaXNwbGF5
TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChkb3duY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdl
QnVmZmVyPihpbWFnZUJ1ZmZlcikpOworICAgIGVsc2UKKyAgICAgICAgZGlzcGxheUxpc3QtPnNl
dEl0ZW1CdWZmZXJDbGllbnQoZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVy
PihpbWFnZUJ1ZmZlcikpOworCisgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoKmRp
c3BsYXlMaXN0KTsKKworICAgIGlmIChmbHVzaENvbnRleHQgPT0gU2hvdWxkRmx1c2hDb250ZXh0
OjpZZXMpCisgICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKKworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZVNoYXJlZEl0ZW1C
dWZmZXJzKFdURk1vdmUoYnVmZmVySWRlbnRpZmllcnMpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIERpc3BsYXlMaXN0Rmx1c2hJ
ZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQog
ewotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hl
ZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpIHsKLSAgICAgICAgaW1h
Z2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOwotICAgICAgICBpbWFnZUJ1
ZmZlci0+Zmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0
ZWQoZmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIH0K
KyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBTaG91bGRGbHVzaENvbnRleHQ6Ok5vKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlJiBoYW5kbGUsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
K3sKKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Olllcyk7CisgICAgZmx1c2hEaXNwbGF5TGlzdFdhc0Nv
bW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9
CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1Jl
Y3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjgsNiArMTk3LDE3IEBAIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxl
KQoreworICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRs
ZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICBt
X3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkp
OworfQorCitSZWZQdHI8U2hhcmVkTWVtb3J5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFy
ZWRJdGVtQnVmZmVyKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVy
KSBjb25zdAoreworICAgIHJldHVybiBtX3NoYXJlZEl0ZW1CdWZmZXJzLmdldChpZGVudGlmaWVy
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAyODVlMmY3NGI0ZDRmZDZlNmE4YzVlOTEw
MjVhMWM5MjZmNWZmYjE1Li5mZGFhNjg2MzVhMjE3YTRmMmUzMjk0ZTAxYWEzZGZiNGYxNWI3NGIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlICJNZXNz
YWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZS5oIgogI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1z
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjMsOCArNjUsOCBAQCBwdWJsaWM6
CiAgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpIGNvbnN0OwogCiAgICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBs
eVJlc291cmNlSXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgYXBwbHlNZWRpYUl0ZW0oY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBi
b29sIGFwcGx5UmVzb3VyY2VJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5TWVkaWFJdGVtKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsK
IAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJhY2tl
bmRXYXNDcmVhdGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKQEAgLTczLDYgKzc1LDEwIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91
bGRGbHVzaENvbnRleHQgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5
TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0KTsKKyAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRJdGVtQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllcikgY29uc3Q7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBD
OjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7
CkBAIC04MywxNCArODksMTYgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJl
Y2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxh
eUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChj
b25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1h
Z2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJD
b3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7
CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUmKTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNh
Y2hlOwogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1C
dWZmZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGE4OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQy
ODYyMmNhZDMuLmJiOTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlz
cGxheUxpc3RBbmRDb21taXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3Bs
YXlMaXN0LCBXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9n
aWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisg
ICAgRmx1c2hEaXNwbGF5TGlzdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3Bs
YXlMaXN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZs
dXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRh
KGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFS
ZWZlcmVuY2UgaW1hZ2VEYXRhKSBTeW5jaHJvbm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJl
c291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9EZWNvZGVyLmNwcAppbmRleCA1Y2EyMTI3YTM0NmNkMmE0NjljYTI5N2Y0YWIxMzkw
MmY2YTA2ZjhhLi41MWI5ZmZkOTMwMzQwYmRmZjJmYjcxZDBlNDZjYWNmNDA5MzQ2NTMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApAQCAtNzQsNiArNzQsMTYgQEAgRGVj
b2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCB2
b2lkICgqYnVmZmVyRGVhbGxvY2EKICAgICAgICAgcmV0dXJuOwogfQogCitEZWNvZGVyOjpEZWNv
ZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnN0cnVjdFdp
dGhvdXRIZWFkZXJUYWcpCisgICAgOiBtX2J1ZmZlciB7IGJ1ZmZlciB9CisgICAgLCBtX2J1ZmZl
clBvcyB7IG1fYnVmZmVyIH0KKyAgICAsIG1fYnVmZmVyRW5kIHsgbV9idWZmZXIgKyBidWZmZXJT
aXplIH0KKyAgICAsIG1fYnVmZmVyRGVhbGxvY2F0b3IoW10gKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpIHsgfSkKK3sKKyAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fYnVmZmVy
KSAlIGFsaWdub2YodWludDY0X3QpKQorICAgICAgICBtYXJrSW52YWxpZCgpOworfQorCiBEZWNv
ZGVyOjp+RGVjb2RlcigpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuaAppbmRleCAzZGQyNDY5NmVmNmNhN2RjOTdkMDEzYTBmZTg3NWQ3YmQ0
N2RlMzBhLi5hMDNlYmIxYjI4MzdlZjZhMzg3M2ExMTVjNGRiZTBmYzU4Y2Q5OTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
TWVzc2FnZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZl
ci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKQEAgLTE3Myw3ICsxNzQsMjIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNJUENEZWNvZGVyID0gdHJ1ZTsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0
YXRpYyBPcHRpb25hbDxUPiBkZWNvZGVPYmplY3QoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXpl
X3QgYnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPFQ+IHJlc3VsdDsKKyAgICAg
ICAgRGVjb2RlciBkZWNvZGVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSwgQ29uc3RydWN0V2l0aG91dEhl
YWRlcik7CisgICAgICAgIGlmICghZGVjb2Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGRlY29kZXIgPj4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKKyAgICBlbnVtIENvbnN0cnVjdFdpdGhv
dXRIZWFkZXJUYWcgeyBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyIH07CisgICAgRGVjb2Rlcihjb25z
dCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb25zdHJ1Y3RXaXRob3V0SGVh
ZGVyVGFnKTsKKwogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplX3QgYWxpZ25tZW50
LCBzaXplX3QpOwogICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3QpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwCmluZGV4IDg3ZmU5NTU1MmFjNjA1MmRiY2Q3NmU0OTBkNGFiNmE2NjJlYzhhZDQuLmIw
NTU2NjU3Y2IwNmYyNGE0Mzc5YmIzM2Q1ZDdmOTdlMTIwY2Q5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0VuY29kZXIuY3BwCkBAIC03Miw2ICs3MiwxNiBAQCBFbmNvZGVyOjpFbmNvZGVy
KE1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogICAgIGVu
Y29kZUhlYWRlcigpOwogfQogCitFbmNvZGVyOjpFbmNvZGVyKENvbnN0cnVjdFdpdGhvdXRIZWFk
ZXJUYWcpCisgICAgOiBtX21lc3NhZ2VOYW1lKHN0YXRpY19jYXN0PE1lc3NhZ2VOYW1lPigwKSkK
KyAgICAsIG1fZGVzdGluYXRpb25JRCgwKQorICAgICwgbV9idWZmZXIobV9pbmxpbmVCdWZmZXIp
CisgICAgLCBtX2J1ZmZlclBvaW50ZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBtX2J1ZmZlclNp
emUoMCkKKyAgICAsIG1fYnVmZmVyQ2FwYWNpdHkoc2l6ZW9mKG1faW5saW5lQnVmZmVyKSkKK3sK
K30KKwogRW5jb2Rlcjo6fkVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlciAhPSBtX2lubGlu
ZUJ1ZmZlcikKQEAgLTIxOSw3ICsyMjksMTIgQEAgdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50
KEF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQogCiBWZWN0b3I8QXR0YWNobWVudD4gRW5jb2Rlcjo6
cmVsZWFzZUF0dGFjaG1lbnRzKCkKIHsKLSAgICByZXR1cm4gV1RGTW92ZShtX2F0dGFjaG1lbnRz
KTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2F0dGFjaG1lbnRzLCB7IH0pOworfQorCiti
b29sIEVuY29kZXI6Omhhc0F0dGFjaG1lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fYXR0
YWNobWVudHMuaXNFbXB0eSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0VuY29kZXIuaAppbmRleCAzNjc4ZDRmYWUyOTE1MmQ5OTBmNGQzYTRmMGI3ZTBh
ZjZjZjc0NzJiLi5lZmM5NmQ3NDgyMjM5NTI5NWNiNTk5ZDZhZDZhOTU5NDEwOWZhYTk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiTWVzc2FnZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKQEAgLTk5LDcgKzEwMCwyNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc0lQQ0VuY29kZXIgPSB0cnVlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlT2JqZWN0KGNvbnN0IFQm
IG9iamVjdCkKKyAgICB7CisgICAgICAgIEVuY29kZXIgZW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0
SGVhZGVyKTsKKyAgICAgICAgZW5jb2RlciA8PCBvYmplY3Q7CisKKyAgICAgICAgaWYgKGVuY29k
ZXIuaGFzQXR0YWNobWVudHMoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7CisgICAgfQorCiBwcml2YXRlOgorICAgIGVudW0gQ29uc3RydWN0V2l0
aG91dEhlYWRlclRhZyB7IENvbnN0cnVjdFdpdGhvdXRIZWFkZXIgfTsKKyAgICBFbmNvZGVyKENv
bnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpOworCiAgICAgdWludDhfdCogZ3JvdyhzaXplX3QgYWxp
Z25tZW50LCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVf
aWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgpAQCAtMTA5LDYgKzEyNyw4
IEBAIHByaXZhdGU6CiAgICAgICAgIGVuY29kZShXVEY6OmVudW1Ub1VuZGVybHlpbmdUeXBlPEU+
KGVudW1WYWx1ZSkpOwogICAgIH0KIAorICAgIGJvb2wgaGFzQXR0YWNobWVudHMoKSBjb25zdDsK
KwogICAgIHZvaWQgZW5jb2RlSGVhZGVyKCk7CiAgICAgY29uc3QgT3B0aW9uU2V0PE1lc3NhZ2VG
bGFncz4mIG1lc3NhZ2VGbGFncygpIGNvbnN0OwogICAgIE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+
JiBtZXNzYWdlRmxhZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJr
aXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CmluZGV4IDk5MTExYTc4OTBiNTc4NWY0ZTEwNjJkNjg4MjA2NTQ3ZDUyNTAzYmQuLjlmZjk0OGU4
YmUxYWFlZGQwOTNiNGJlMjk5MzQ2MGUyY2Q5OWIyNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjA4LDYgKzIwOCw3IEBAIGRlZiB0eXBlc190aGF0X2Nh
bm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdTdHJpbmcnLAogICAgICAgICAn
V2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEaWN0YXRpb25Db250ZXh0
JywKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncycsCiAgICAgICAgICdXZWJD
b3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRPcldv
cmtlcklkZW50aWZpZXInLApAQCAtNTg1LDYgKzU4Niw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgogICAgICAgICAnSlNDOjpNZXNzYWdlU291cmNlJzogWyc8SmF2YVNjcmlwdENvcmUv
Q29uc29sZVR5cGVzLmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5
cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4nXSwKICAgICAgICAgJ0lu
c3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSc6IFsnPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPiddLAorICAgICAgICAnV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyJzogWyc8V2ViQ29yZS9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuaD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4n
XSwKICAgICAgICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAog
ICAgICAgICAnU2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhNzRk
NjE1YWJkM2Y0YTMxODYyNTJmZjBmZGNiODcxZTcwZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZShjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQorewor
ICAgIGRpc3BsYXlMaXN0LmZvckVhY2hJdGVtQnVmZmVyKFsmXSAoYXV0byYgaGFuZGxlKSB7Cisg
ICAgICAgIG1fYnVmZmVycy5hcHBlbmQoeyBoYW5kbGUuaWRlbnRpZmllciwgaGFuZGxlLmNhcGFj
aXR5IH0pOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0PiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1
ZmZlclByb3ZpZGVyJiYgYnVmZmVyUHJvdmlkZXIpIGNvbnN0Cit7CisgICAgRGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJIYW5kbGVzIGhhbmRsZXM7CisgICAgaGFuZGxlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG1fYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgW2lkZW50aWZpZXIsIGNh
cGFjaXR5XSA6IG1fYnVmZmVycykgeworICAgICAgICBhdXRvKiBkYXRhID0gYnVmZmVyUHJvdmlk
ZXIoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGhhbmRsZXMudW5jaGVja2VkQXBwZW5kKHsgaWRlbnRpZmllciwg
ZGF0YSwgY2FwYWNpdHkgfSk7CisgICAgfQorICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdD4oV1RGTW92ZShoYW5kbGVzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDE3NWUxMTRmMjNiYzhmYjhlNTdjZDkwZjY0YTMzYmUyNjJlMWYzMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgeworcHVibGljOgorICAgIHVzaW5nIEl0ZW1C
dWZmZXJQcm92aWRlciA9IEZ1bmN0aW9uPHVpbnQ4X3QqKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllcik+OworCisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gY3JlYXRlRGlzcGxheUxpc3Qo
SXRlbUJ1ZmZlclByb3ZpZGVyJiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gZGVjb2RlKERlY29k
ZXImKTsKKworcHJpdmF0ZToKKyAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShWZWN0b3I8c3Rk
OjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90
Pj4mJiBidWZmZXJzKQorICAgICAgICA6IG1fYnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAg
IHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4gbV9idWZmZXJzOworfTsKKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2J1ZmZlcnM7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
T3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXIsIHNpemVfdD4+PiBidWZmZXJzOworICAgIGRlY29kZXIgPj4gYnVmZmVyczsK
KyAgICBpZiAoIWJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4ge3sgV1RGTW92ZSgqYnVmZmVycykgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKaW5kZXggZTBhYjc0MzZiYWRjMzQ2Mzc0OTQ2NjMzNDcxOWI0NWVkZmQyYjMw
Ni4uNTBlMTAyNGNhZTBkYzA0MGNhYzMyM2NiY2Q3ZWM1ZTE0NzQ0OTRiZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0xNzMsNiArMTczLDcgQEAgU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRh
dGEuY3BwCiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5j
cHAgQG5vLXVuaWZ5CiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCitTaGFyZWQvU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuY3BwCiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcAog
U2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRPbmx5LmNwcAogU2hhcmVkL1NoYXJlZFN0
cmluZ0hhc2hUYWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDQ2NjVjY2I3YmM2YWY3YTdhMDg5MTVmZGU0NjcyNmQ5NjdmNWZj
YjQuLmM4MWU0OGFiMTg3NTg0N2MwZjU2ODA5YTU4MjcwZmFiNzE1MTk4NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg3Myw2ICsx
ODczLDcgQEAKIAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIw
MUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07CiAJCUY0OEQyQTg1
MjE1ODNBN0UwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRT
UEkuaCAqLzsgfTsKIAkJRjQ5NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5o
ICovOyB9OworCQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9
OwogCQlGNENCMDlFNTIyNUQ1QTA5MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlF
NDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJ
CUY0RDVGNTFEMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1
MTkyMDYwODdBMDAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggKi87
IH07CiAJCUY0RDVGNTFGMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0Nv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0RDVGNTFCMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xs
ZXIuaCAqLzsgfTsKQEAgLTU0NTksNiArNTQ2MCw4IEBACiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2
NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJv
cEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcElu
dGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkQyNTRDQTUyMjAw
QjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjRBQzY1NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVl
c0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZl
cmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1
bHRWYWx1ZXNJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFE
REJCQUIwMDk1QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9T
dGVwSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDQjA5RTQyMjVENUEwMzAw
ODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJz
aXRlTWVkaWFTb3VyY2VQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYx
NjYsNiArNjE2OSw4IEBACiAJCQkJMUE2NDIwRTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJs
ZUJpdG1hcC5oICovLAogCQkJCTUxMjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVS
ZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJs
ZVJlc291cmNlLmggKi8sCisJCQkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcCAqLywKKwkJCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyog
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLywKIAkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0
RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKIAkJCQk4MzEzRjdFOTFGN0RBRTAz
MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCiAJCQkJODMxM0Y3RTgxRjdE
QUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMTMxNSw2
ICsxMTMyMCw3IEBACiAJCQkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJl
c291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyog
U2hhcmVkQnVmZmVyQ29weS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMx
MzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9y
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJl
ZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4
MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjI2NGViY2I2NjY0ZDcxZmZmMGE0MDA0MmZiMjU0
MmNhODA2NmViNC4uYzJkZmQyNzc3ODEzN2QzODMxOTk5YmNiNmM3ODJlZWZjZGU1NTMyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZWNvcmRlci5oPgpAQCAtMzYsNyArNDAsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+
LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSB7CitjbGFz
cyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJX
cml0aW5nQ2xpZW50IHsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcg
QmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKICAgICB1c2luZyBCYXNlRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsKQEAgLTc3LDYgKzgxLDggQEAg
cHJvdGVjdGVkOgogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VX
ZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgICAgICBtX2RyYXdpbmdDb250
ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZlckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9k
cmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhm
YWxzZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CkBA
IC0xMDQsMTAgKzExMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICghbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAg
ICBhdXRvJiBkaXNwbGF5TGlzdCA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+
KHRoaXMpLT5tX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNw
bGF5TGlzdC5pdGVtQ291bnQoKSkgewotICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Jj4oKnRoaXMpLmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOworICAg
ICAgICBhdXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eSY+KCp0aGlzKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtdXRhYmxlVGhpcy5tX2Ry
YXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERpc3BsYXlMaXN0KGRpc3Bs
YXlMaXN0KTsKICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICBt
dXRhYmxlVGhpcy5tX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0ID0gMDsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIGdldEltYWdlRGF0YSBpcyBzeW5jaHJvbm91cywgd2hpY2ggbWVhbnMg
d2UndmUgYWxyZWFkeSByZWNlaXZlZCB0aGUgQ29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQg
bWVzc2FnZS4KQEAgLTE0MSwxOCArMTQ5LDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IG1fZHJhd2luZ0NvbnRleHQuZGlz
cGxheUxpc3QoKTsKLSAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAg
ICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShGbHVzaFJlbW90ZUltYWdlQnVmZmVyU3RhcnQs
IEZsdXNoUmVtb3RlSW1hZ2VCdWZmZXJFbmQsIDEpOwogICAgICAgICBtX3NlbnRGbHVzaElkZW50
aWZpZXIgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Zmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdChkaXNwbGF5TGlzdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5KCkudW5sb2NrUmVtb3RlUmVzb3VyY2VzRm9yUmVtb3RlQ2xpZW50KG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICAgICAg
bV9pdGVtQ291bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBm
bHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5IHx8ICFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYg
KCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCBkaXNwbGF5TGlzdC5pc0VtcHR5KCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUo
Rmx1c2hSZW1vdGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJlbW90ZUltYWdlQnVmZmVyRW5kKTsK
QEAgLTE3MCwyMCArMTc5LDEzMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW0mKSBvdmVycmlkZQorICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgY29uc3Rl
eHByIHNpemVfdCBEaXNwbGF5TGlzdEJhdGNoU2l6ZSA9IDUxMjsKICAgICAgICAgYXV0byYgZGlz
cGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChk
aXNwbGF5TGlzdC5pdGVtQ291bnQoKSA8IERpc3BsYXlMaXN0QmF0Y2hTaXplKQorICAgICAgICBp
ZiAoKyttX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0IDwgRGlzcGxheUxpc3RCYXRjaFNp
emUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZmx1c2hEaXNwbGF5TGlzdChkaXNw
bGF5TGlzdCk7CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNv
dW50SW5DdXJyZW50RGlzcGxheUxpc3QgPSAwOwogICAgIH0KIAotICAgIHZvaWQgZGlkQXBwZW5k
SXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSkgb3ZlcnJpZGUKKyAg
ICBib29sIHJlcXVpcmVzRW5jb2RpbmcoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5
cGUpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCisgICAgICAgIHJl
dHVybiAhV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5lSXRlbSh0eXBlKTsKKyAgICB9CisK
KyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVm
ZmVyKHNpemVfdCBjYXBhY2l0eSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZlcihjYXBhY2l0eSk7CisKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZSBpdGVtKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChpdGVtLnR5cGUoKSkgeworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6
OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6
RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UmVjdHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+
KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ds
eXBoczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2VCdWZmZXI+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+
KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZl
SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1h
Z2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNv
ZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
LmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoQ29sb3I+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0
aEdyYWRpZW50PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICAgICAgcmV0
dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJ
bWFnZURhdGE+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURh
c2g6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZURhc2g+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNv
ZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPihpdGVtLmdldDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVu
Y29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoK
KyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoK
KyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxl
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBk
aWRBcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CiAgICAgfQogCkBAIC0xOTEsNiArMzEwLDcgQEAgcHJvdGVjdGVkOgogICAgIERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CiAgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHsgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
IH07CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OworICAgIHNpemVfdCBtX2l0ZW1Db3VudEluQ3VycmVudERpc3Bs
YXlMaXN0IHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggN2EwMTkzMGFiNjZjNDQ3MzA1MTA5MzAz
NGQ0ZjM2ZDJjMGU2NDhhMi4uOWRmMTIxNDhiMGE0NWM5YTlhZjQ5ZDExZmM5YTMwYTE5ZWUxNmU1
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMzQsNiAr
MzQsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDEzICsxMTgsMTMgQEAgUmVm
UHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGkKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmZsdXNoRGlzcGxheUxpc3QoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVz
aERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KHsgZGlzcGxheUxpc3QgfSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9
CiAKIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQogewogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIHNlbnRG
bHVzaElkZW50aWZpZXIgPSBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlM
aXN0QW5kQ29tbWl0KGRpc3BsYXlMaXN0LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5k
Q29tbWl0KHsgZGlzcGxheUxpc3QgfSwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAgICAgcmV0
dXJuIHNlbnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NSw2ICsxNTcsMzEgQEAgdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQo
RGlzcGxheUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hEaXNwbGF5TGlzdChmbHVz
aElkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVs
ZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFZlY3RvcjxEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXI+JiYgaWRlbnRpZmllcnMsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIgOiBpZGVu
dGlmaWVycykgeworICAgICAgICBpZiAoIW1fc2hhcmVkSXRlbUJ1ZmZlcnMucmVtb3ZlKGlkZW50
aWZpZXIpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK0Rpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8PCAxNjsK
KworICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6Om1h
eChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5KSk7CisgICAgaWYgKCFzaGFy
ZWRNZW1vcnkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgU2hhcmVk
TWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOworICAgIHNoYXJlZE1lbW9yeS0+Y3Jl
YXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpS
ZWFkT25seSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlk
Q3JlYXRlU2hhcmVkSXRlbURhdGEoaWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJlZE1lbW9yeUhh
bmRsZSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH0pLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBzaGFyZWRNZW1v
cnkuY29weVJlZigpKTsKKworICAgIHJldHVybiB7IGlkZW50aWZpZXIsIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkg
fTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA5OTU2NWI2
ZjE2NmJiMmQ4MDYxNDE4NDk3MmUzNDM3MDZjZTdmZWM5Li4xMzFlNDkxOTZkZDk1YTI3NWI4MTUx
Yjg1NmViYTUzYzY5N2Y0NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVk
ZSAiUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgogCkBAIC02MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KCk7CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkmIHJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
OyB9CisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRl
bUJ1ZmZlcihzaXplX3QpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKQEAg
LTcyLDYgKzc0LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAg
dm9pZCBkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik7CiAgICAgRGlz
cGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKQEAgLTg0LDcgKzg3LDkgQEAgcHJpdmF0
ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGltYWdlQnVmZmVy
QmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlz
dFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VTaGFyZWRJdGVtQnVmZmVy
cyhWZWN0b3I8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyPiYmLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCisgICAgSGFzaE1hcDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1v
cnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBt
X3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB7ICp0aGlzIH07CiAgICAgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4ZjI0NTg1NjM1ZjQ3MDgzZDFk
YjI3YTViMzk2NjY1ZjMxNWViY2IwLi43OWE5ODY2NTA2ZDFjMjVhMDk2YmE1MTQ2OTZiZDljOGJh
OTIzMTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjMsOCArMjMsOSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAog
bWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgewot
ICAgIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlM
aXN0V2FzQ29tbWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoV2Vi
Q29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwg
V2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZs
dXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVNoYXJlZEl0ZW1CdWZm
ZXJzKFZlY3RvcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+IGlk
ZW50aWZpZXJzLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmluZGV4IDNmNWE3M2JlYzNiZjI4NmU1
Mjk4MWRlNDhiOTBjMzFkMDE5ZDhjM2QuLjBmOWE2ZThmMTllMWQ5ODU2OWZlZDFiYmM0MWQwNzY4
M2VhY2YxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODFm
ZDhlNjQ0NDU2MzYzYTIwN2RiN2EwMmFhNWU3ODIzMGY3MWNiMC4uMmJiMTEyMGZmMjRkYTk4M2Nl
ODkzY2E3NGZlODAwYmY0MjRhMDllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTMw
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25j
dXJyZW50IGRpc3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkg
aW50byBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWJhc2VsaW5lIHNldmVyYWwgZXhpc3RpbmcgKG5vbi1HUFUtcHJvY2Vzcykg
ZGlzcGxheSBsaXN0IHRlc3RzIHRvIGFjY291bnQgZm9yIGEgc2xpZ2h0IHR3ZWFrIGluIHRoZSBm
b3JtYXQgaW4KKyAgICAgICAgd2hpY2ggZGlzcGxheSBsaXN0cyBhcmUgZHVtcGVkIGFzIHRleHQu
IE1vcmUgc3BlY2lmaWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgbm93IGR1bXBlZCBh
ZnRlciBlYWNoCisgICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0aGVyIHRoYW4gYmVmb3JlLgorCisg
ICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVj
dC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMTAtMzAgIEthcmwgUmFja2xlciAgPHJhY2tsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjkwNzApOiBbIEJpZyBTdXIgXSBlZGl0
aW5nL2lucHV0L3JldmVhbC1jYXJldC1vZi1tdWx0aWxpbmUtaW5wdXQuaHRtbCBpcyBhIGNvbnN0
YW50IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52
YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAzMjg4NDgwNjI3MDE5ZDU0MDJkOTQy
NWZjNGExMzEzNzcwZWNiMzFhLi4xNDUxYjE5MjUzYzMyMzg5MjhiYmQ5ZjVlNWRlYmI5Mjc0YzUw
ZDU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1k
aXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC02LDEwICs2LDggQEAKICAgKGZpbGwtY29sb3Ig
I0M4MDAwMCkKICAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0Ci0g
IChleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDEwLDEwKSBzaXpl
IDU1eDUwKSkKKyAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSBleHRlbnQgYXQgKDEwLDE0
MCkgc2l6ZSA1NXg1MCkKIChzZXQtaW5saW5lLWZpbGwtY29sb3IKICAgKGNvbG9yICMwMDAwQzg4
MCkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKLSAgKHJl
Y3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUw
KSBleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApp
bmRleCBlOWY1NDA0MTdiZDZlNWRjNzc4NjE1ZTVmMzc5NDk3NmU0MTk1ZjhkLi41OTBiOTNmNWM4
OTJjYWUzN2Y0MjQ2MDlhOGZlNDgwMzNlNjY4MzY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0
CkBAIC05LDkgKzksOCBAQAogICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAg
IChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0g
IChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6
ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291
cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkg
ZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAppbmRleCBlMDQ1MmExNzNhMWFmZTIzN2Y3MjhkMzBiYzI3ZWM2MGVl
Yzk2MjNkLi4yOGNjZjRjMDE4NTlkZTE5MGIwYTlhMjdmYTJmZWMwMDYzZWQ4ZTFjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTExLDExICsxMSwxMCBAQAogICAoc2hhZG93
LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVz
IDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6
ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwMHgxMDApCiAgIChjb2xv
ciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5k
LW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcuMTQsMC4y
MCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCiAoc2V0LWN0bQogICAoc2V0LWN0bSB7
bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0
CmluZGV4IGJkODc2ZGY0MDNhNGFkZDBiYzM5MWY3YzYyYWMyYjRjM2JjZjdkYTAuLmJjMTdiNTEx
NDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMywy
OSArMywyNCBAQAogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVj
dAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6
ZSAxMDR4MTA0KQogICAoY29sb3IgIzAwODAwMCkKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291
cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkg
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKICAgKGNoYW5nZS1mbGFn
cyAzMjk2MCkKICAgKGZpbGwtY29sb3IgIzAwMDBGRikKICAgKHN0cm9rZS1zdHlsZSAwKQogICAo
c2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXpl
IDEwNHgyKQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQotICAoYm9yZGVyLXRoaWNrbmVz
cyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDApIHNpemUg
MTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQogICAo
cmVjdCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQor
ICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQog
KGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgw
LDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRo
aWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKIChkcmF3LXJlY3QKLSAg
KGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgxMDIsMCkgc2l6ZSAy
eDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEu
MDApIGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQu
dHh0CmluZGV4IGFkZGQyY2E0MjUwYzI0YTBjOWVlMjI1NWQ0Mjc1YTc2ZjYwNDNlZWQuLmJiNTkz
ZDIwZjZkYTY0ODYyOTJkMzZjMDIyMGUyYTlkODcyZjgyYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhw
ZWN0ZWQudHh0CkBAIC0zLDExICszLDEwIEBAIHJlY29yZGVkOgogICAoeCAwLjAwKQogICAoeSAw
LjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAx
MDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAw
RkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBu
b3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAw
eDEwMCkKIAogcmVwbGF5ZWQ6CiAoCg==
</data>
<flag name="commit-queue"
          id="429522"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412987</attachid>
            <date>2020-11-02 16:35:13 -0800</date>
            <delta_ts>2020-11-02 17:12:47 -0800</delta_ts>
            <desc>More WIP (more build fixes)</desc>
            <filename>bug-218406-20201102163512.patch</filename>
            <type>text/plain</type>
            <size>395566</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI3NWNmNjJmYzhiYmE5
NzMxMDQxZDU3ZTcwOTU0MTVhYWZiY2YwMy4uZDRjYzMzMDYwOGVjMGE1OGI3MTRlYzc2ZTNiN2Fm
ODY5N2U0NmJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxOCBAQAorMjAyMC0xMS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpkdW1wRHJhd2luZ0l0
ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojph
c1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6c2l6ZUluQnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJ
dGVtRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjphdEVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjp1cGRhdGVDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjphZHZhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVu
dEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6bW92ZVRvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDo6aXRlcmF0b3I6Om1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6dHJhY2tzRHJhd2luZ0l0ZW1F
eHRlbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6aXRlcmF0b3I6On5pdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXJJZkV4aXN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFkZERyYXdpbmdJdGVtRXh0ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjppc0RyYXdpbmdJdGVtIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6bGlz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6Oml0ZW1BdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZW1Db3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6dGFrZURpc3BsYXlM
aXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Om1fYWxsb2NhdGVkQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6bV9yZWFkT25seUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Om1fd3JpdGFibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1f
d3JpdHRlbk51bWJlck9mQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6Zm9yRWFjaEl0ZW1CdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGU6Om9wZXJhdG9yIGJv
b2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5k
bGU6Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjp0eXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjppcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUhhbmRsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVu
dDo6fkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVyOjpzaXplSW5CeXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnJlYWRPbmx5QnVmZmVycyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpzaXplT2ZJdGVtSW5CeXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNJbmxpbmVJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJh
d0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2Vu
ZXJhdGVHbHlwaEJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0dseXBoczo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUluQnl0ZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpEcmF3aW5nSXRlbSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6U2F2ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6UmVzdG9yZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNU
TTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tl
VGhpY2tuZXNzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRl
ckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNo
YWRvdzo6Q2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXA6OkNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXQ6OkNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpDbGlwUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpE
cmF3Rm9jdXNSaW5nUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OkZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENv
bXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
SW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ry
b2tlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
RWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpDbGVhclJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlT
dHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25j
YXRlbmF0ZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
b25jYXRlbmF0ZUNUTTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
RmlsbENvbG9yOjpTZXRJbmxpbmVGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVT
dHJva2VDb2xvcjo6U2V0SW5saW5lU3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpjb2xvciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xv
cjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRTdHJva2VUaGlja25lc3M6OlNldFN0cm9rZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjp0aGlja25lc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzczo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVDYXA6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5lRGFzaCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGlu
ZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpv
aW46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpyZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0
aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBQYXRoOjpDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBh
dGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpE
cmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
SW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1RpbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2VCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d05hdGl2ZUltYWdlOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRpb25SZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
OjpEcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UGF0dGVybjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpE
cmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZTo6RHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5l
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdMaW5lc0ZvclRleHQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9j
dXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVj
dFdpdGhDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Q29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6cmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVs
bGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxp
cHNlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhOjppbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JN
ZWRpYTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0
cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlw
c2U6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVs
bGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xlYXJSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0
ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlGaWxsUGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFj
dG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6c2V0RXh0ZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0ZW50IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0
ZW50S25vd24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdJdGVtOjpsb2NhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06Omdsb2JhbEJvdW5kcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjplbmNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNs
YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRy
YW5zbGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Um90YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVD
VE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE06OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VD
b2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVDYXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0TGluZUNhcDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVy
TGltaXQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TWl0ZXJMaW1pdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91
dDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwT3V0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmVu
Y29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0xpbmU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNS
aW5nUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5s
aW5lUGF0aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRG
cmFtZUZvck1lZGlhOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUlubGluZVBhdGg6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6
ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGVhclJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJu
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9y
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkQXBwZW5kSXRlbU9mVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6d2lsbEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpkaWRBcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZEl0ZW0p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRh
dGVJdGVtRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OmRpZEFw
cGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjppdGVt
Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpEZWxlZ2F0ZTo6d2lsbEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZTo6ZGlkQXBwZW5kSXRlbSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVy
OjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5
ZXI6OkRlbGVnYXRlOjphcHBseSk6CisKIDIwMjAtMTAtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFtHUFUgUHJvY2Vzc10gUGVy
Zm9ybSBpbWFnZSBkZWNvZGluZyBvZiBjb2xvciBmb250cyBpbiB0aGUgV2ViIFByb2Nlc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKaW5kZXggOTE1N2I3MDg1ZTQyYThjOTQ3ZDVhNWU2YTk5Y2FkMjZmMzMwOTNhOS4uZGZkZjQz
Nzk0MTJlMDkwYjQ1Y2E5MTk0MGQ0OTMyZjQ2YmZjYmZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1
NiBAQAorMjAyMC0xMS0wMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
KworICAgICAgICBbQ29uY3VycmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0
IGl0ZW1zIGRpcmVjdGx5IGludG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKC4uLnRoaXMgQ2hhbmdlTG9nIGlzIGdvaW5nIHRv
IG5lZWQgd29yZHMpCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpkZWNvZGVBbmRD
cmVhdGUpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
UmVzb3VyY2VJdGVtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
YXBwbHlNZWRpYUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjphcHBseURpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZEl0ZW1CdWZmZXIgY29uc3Qp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHA6CisgICAgICAg
IChJUEM6OkRlY29kZXI6OkRlY29kZXIpOgorICAgICAgICAoSVBDOjptX2J1ZmZlckRlYWxsb2Nh
dG9yKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAoSVBDOjpE
ZWNvZGVyOjpkZWNvZGVPYmplY3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNw
cDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChJUEM6OkVuY29k
ZXI6OnJlbGVhc2VBdHRhY2htZW50cyk6CisgICAgICAgIChJUEM6OkVuY29kZXI6Omhhc0F0dGFj
aG1lbnRzIGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9TaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QgY29uc3QpOgorICAg
ICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpkZWNvZGUpOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OmZsdXNoRHJhd2luZ0NvbnRleHRBbmRDb21taXQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlz
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcDoKKwogMjAyMC0xMC0zMCAgQnJpYW4gQnVyZyAgPGJi
dXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIEluc3BlY3RvckZy
b250ZW5kQVBJRGlzcGF0Y2hlciB0byBXZWJDb3JlLCBjbGVhbiB1cCB1c2VzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CmluZGV4IDYzNzcxYjA0MDU4N2E5NDg1ZjQ0NjA4ZjhjMTI4M2VmNzZjNjE1ZjkuLjQ5MTUwZDY3
NTU0OTkxMjk4MzFkYTRlOTNjYzY3NmY2OGMzOTc0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYx
LDYgKzE5NjEsOCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGlu
Z05FT04uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY2
YWY1MGQyMWVjMjc3NjQ2ZGMxNDdlNDg2ODY1MmJhYzI1MDY3MmUuLjJiMDZhMzQ0OGQ5ZTkyNTAw
ZTZjYjcyNGNhNGIyOTFhYmE3ZGEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUxNjAsNiArNTE2MCw3IEBACiAJCUYzQUJG
RTBDMTMwRTlEQTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3
RDEgLyogSW5zdHJ1bWVudGluZ0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBD
QTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxl
ci5oICovOyB9OwogCQlGNDAzRTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIz
NjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0MjkyNjE4MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRE
NDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQg
LyogU3RhdGljUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDQw
RTc3QTIzM0Q5NEQ3MDA2M0Y5QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDQwRTc2RjIzM0Q5NEQzMDA2M0Y5
QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggKi87IH07CkBAIC01MTg0LDYgKzUxODUsNyBAQAog
CQlGNDhEMkE3RTIxNTcxODI2MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2
NzUyQiAvKiBGb250QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29h
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFB
MzIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5oICovOyB9OwogCQlGNDk3ODY4ODFGRjQ1
RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFz
dGVib2FyZEl0ZW1JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRjRBNkQ2QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZE
NkEzMjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAw
OUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nl
c3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
NEJGQjk4NTFFMURERjlCMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkg
U2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURE
RjJCMDA3NkI3RUEgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwogCQlGNEJGQjk4NjFF
MURERjlCMDA4NjJDMjQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgU2NyaXB0cyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4NDFFMURERjJCMDA3NkI3
RUEgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzICovOyB9OwpAQCAtMTYzMTEsNiArMTYzMTMsOCBA
QAogCQlGM0Q0NjE0NzExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGlu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRjQwM0U3ODYyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFbnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQwMDAwNzg5
OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0MjE0MDMx
RUUwMDJEQ0E3MiAvKiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2FyZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYzNjQsNiArMTYzNjgsOCBAQAogCQlGNDhE
MkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IENvbG9yQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3
MUZGNDVGQTUwMEUwNjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFzdGVib2FyZEl0ZW1JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5
OEU0MjFERUU2QzEwMDlBRTU1RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEVkaXRBY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBMzI1
NEM1MTJDMDBCNjVGQUEgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXNwbGF5TGlzdEl0ZW1UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZE
NkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NUGFzdGVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjRDNUYyMDUyNDc5RTdFRTAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENsaXBib2FyZEltYWdlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0QzVGMjA4MjQ3OUU5QzgwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzYxOCw4ICsxNzYyNCwxMiBAQAogCQkJCTU1QzBB
Mjk1MjNGRTJDRTAwMEYyQ0I5MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywK
IAkJCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oICovLAogCQkJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmggKi8sCisJCQkJRjQyMkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0
SXRlbUJ1ZmZlci5jcHAgKi8sCisJCQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3Bs
YXlMaXN0SXRlbUJ1ZmZlci5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RJdGVtcy5oICovLAorCQkJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBE
aXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLywKKwkJCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEg
LyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKIAkJCQkwRkU1RkJDRjFDM0RENTFFMDAw
N0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oICovLAogCQkJCTBGRTVGQkQwMUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmNwcCAqLywKQEAgLTMxNDQyLDcgKzMxNDUy
LDkgQEAKIAkJCQkxQ0FGNTZEQjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQy
RiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NUFE
MDkzRTI0MDg5NjM1MDBERTREMkYgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkE0MjU0QzUxMkMwMEI2
NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJE
NzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2
YTgwYjg0NjAwZTBhMmJiMDU1NTIzOTU1ZmU5Y2M2MGE5YWVjM2NiLi5mNDdkYmQyZDlmOGJlMmU4
NTU1YWI2ZDk2NzhhOTVlNjY1ZGEyODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjAy
MSw3ICsyMDIxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCiAgICAgQVNTRVJUKG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyk7CiAKICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlz
cGxheUxpc3QoKTsKLSAgICBpZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICBpZiAo
IWRpc3BsYXlMaXN0LmlzRW1wdHkoKSkgewogICAgICAgICBEaXNwbGF5TGlzdDo6UmVwbGF5ZXIg
cmVwbGF5ZXIoKmNhbnZhc0Jhc2UoKS5kcmF3aW5nQ29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CiAg
ICAgICAgIHJlcGxheWVyLnJlcGxheSh7IEZsb2F0UG9pbnQ6Onplcm8oKSwgY2FudmFzQmFzZSgp
LnNpemUoKSB9KTsKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMGQxY2E5
MmQ2MDQ1ZWIzN2E3OGQzZTE4OTdjMjZmNDJiOWM3NmYzYS4uNTlkMzIzMGUwZThmNDM2MGQ3M2Vi
MzM2ODI1MzRhM2U0OTBhNjgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4
dFN0YXRlKCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVy
YXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAg
IGVudW0gQ2hhbmdlIDogdWludDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRl
eCBmZmQ5ZDZkZGZiNjBhYzFhMDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi41MjVmMjg2MWUxYjY3
YTllMGJhMmRjZTdiYmU5ODZhNGEzMWZlOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAK
QEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUxpc3QuaCIKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5
TGlzdDo6ZHVtcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
KERpc3BsYXlMaXN0JiYgb3RoZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9pdGVtcywgbnVsbHB0cikpCisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVt
cyhtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlM
aXN0KCkgPSBkZWZhdWx0OworCitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShE
aXNwbGF5TGlzdCYmIG90aGVyKQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1faXRlbXMsIG51bGxwdHIpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX2RyYXdpbmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKIHZvaWQgRGlzcGxheUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsK
KyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdp
bmdJdGVtRXh0ZW50cy5jbGVhcigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUg
aXRlbSkKIHsKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6CiAgICAgICAgIGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0
Zm9ybU9wZXJhdGlvbnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBk
b3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0
ZW0gPSBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93
LCBvbmx5IGRyb3AgdGhlIGl0ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBw
bGF0Zm9ybS1zcGVjaWZpYy4KICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2No
YW5nZUZsYWdzID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHNDaGFuZ2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODAsMTMgKzEw
NSwyNiBAQCBib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3Mg
ZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2
b2lkIGR1bXBEcmF3aW5nSXRlbUV4dGVudChUZXh0U3RyZWFtJiBzdHJlYW0sIE9wdGlvbmFsPEZs
b2F0UmVjdD4mJiBleHRlbnQpCit7CisgICAgc3RyZWFtIDw8ICIgZXh0ZW50ICI7CisgICAgaWYg
KGV4dGVudCkKKyAgICAgICAgc3RyZWFtIDw8ICpleHRlbnQ7CisgICAgZWxzZQorICAgICAgICBz
dHJlYW0gPDwgInVua25vd24iOworfQorCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1Rl
eHRGbGFncyBmbGFncykgY29uc3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFt
OjpMaW5lTW9kZTo6TXVsdGlwbGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHls
ZVJlY3QpOwotICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBb
aXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdz
KGZsYWdzLCBpdGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJl
YW06Okdyb3VwU2NvcGUgZ3JvdXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07Cisg
ICAgICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIGR1bXBEcmF3aW5n
SXRlbUV4dGVudChzdHJlYW0sIFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogICAgIHJldHVybiBz
dHJlYW0ucmVsZWFzZSgpOwogfQpAQCAtOTYsMTAgKzEzNCwxMSBAQCB2b2lkIERpc3BsYXlMaXN0
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUg
Z3JvdXAodHMpOwogICAgIHRzIDw8ICJkaXNwbGF5IGxpc3QiOwogCi0gICAgc2l6ZV90IG51bUl0
ZW1zID0gbV9saXN0LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1z
OyArK2kpIHsKLSAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7Ci0gICAg
ICAgIHRzIDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0
ZW0sIGV4dGVudF0gOiAqdGhpcykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdy
b3VwKHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5n
SXRlbSgpKQorICAgICAgICAgICAgZHVtcERyYXdpbmdJdGVtRXh0ZW50KHRzLCBXVEZNb3ZlKGV4
dGVudCkpOwogICAgIH0KICAgICB0cy5zdGFydEdyb3VwKCk7CiAgICAgdHMgPDwgInNpemUgaW4g
Ynl0ZXM6ICIgPDwgc2l6ZUluQnl0ZXMoKTsKQEAgLTEwOCwxMyArMTQ3LDI3NiBAQCB2b2lkIERp
c3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogCiBzaXplX3QgRGlzcGxheUxp
c3Q6OnNpemVJbkJ5dGVzKCkgY29uc3QKIHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBm
b3IgKGF1dG8mIHJlZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5
dGVzKHJlZik7CisgICAgcmV0dXJuIG1faXRlbXMgPyBtX2l0ZW1zLT5zaXplSW5CeXRlcygpIDog
MDsKK30KKworYm9vbCBEaXNwbGF5TGlzdDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX2l0ZW1zIHx8IG1faXRlbXMtPmlzRW1wdHkoKTsKK30KKworSXRlbUJ1ZmZlciYgRGlzcGxh
eUxpc3Q6Oml0ZW1CdWZmZXIoKQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgbV9pdGVt
cyA9IG1ha2VVbmlxdWU8SXRlbUJ1ZmZlcj4oKTsKKyAgICByZXR1cm4gKm1faXRlbXM7Cit9CisK
K3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9
CisKK3ZvaWQgRGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQqIGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7
Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGlm
IChtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3ZlKG1h
cEZ1bmN0aW9uKSk7Cit9CiAKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBEaXNwbGF5TGlzdDo6
c2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlQoIW1faXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpKTsKKyAgICBtX3RyYWNrc0RyYXdp
bmdJdGVtRXh0ZW50cyA9IHZhbHVlOwogfQogCit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRl
bUhhbmRsZSBpdGVtKQoreworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTYXZlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
UmVzdG9yZT4oaXRlbS5nZXQ8UmVzdG9yZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNs
YXRlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRl
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Um90YXRlPihpdGVtLmdldDxSb3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0
ZW5hdGVDVE0+KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGluZUZp
bGxHcmFkaWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5s
aW5lRmlsbENvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbS5nZXQ8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0u
Z2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNl
dExpbmVDYXA+KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVEYXNoOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxT
ZXRMaW5lRGFzaD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNl
dE1pdGVyTGltaXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyU2hhZG93OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVt
LmdldDxDbGVhclNoYWRvdz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXBPdXQ+KGl0ZW0uZ2V0PENsaXBP
dXQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcFBhdGg+
KGl0ZW0uZ2V0PENsaXBQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6CisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGFiaWxpdHkg
dG8gY2xvbmUgZGlzcGxheSBsaXN0cyAodGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBk
aXNwbGF5IGxpc3QgdHJhY2tpbmcpLgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0dseXBocz4oaXRlbS5nZXQ8RHJhd0dseXBocz4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdJbWFnZT4oaXRlbS5nZXQ8RHJhd0ltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaXRlbS5n
ZXQ8RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVt
LmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0lt
YWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaXRlbS5n
ZXQ8RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpdGVtLmdldDxEcmF3
TmF0aXZlSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdQYXR0ZXJuPihpdGVtLmdldDxEcmF3UGF0dGVybj4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1Jl
Y3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGluZT4oaXRlbS5nZXQ8RHJhd0xpbmU+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtLmdldDxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxEcmF3RWxsaXBzZT4oaXRlbS5nZXQ8RHJhd0VsbGlwc2U+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQ
YXRoPihpdGVtLmdldDxEcmF3UGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0u
Z2V0PERyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVt
LmdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0PihpdGVtLmdldDxGaWxsUmVjdD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVk
UmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KCkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxJ
bmxpbmVQYXRoPihpdGVtLmdldDxGaWxsSW5saW5lUGF0aD4oKSk7CisjZW5kaWYKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUGF0aD4oaXRl
bS5nZXQ8RmlsbFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEZpbGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5k
PFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFt
ZUZvck1lZGlhPihpdGVtLmdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUmVjdD4oaXRl
bS5nZXQ8U3Ryb2tlUmVjdD4oKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxT
dHJva2VJbmxpbmVQYXRoPihpdGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ry
b2tlUGF0aD4oaXRlbS5nZXQ8U3Ryb2tlUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VFbGxpcHNlPihpdGVtLmdl
dDxTdHJva2VFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJSZWN0PihpdGVtLmdldDxDbGVhclJlY3Q+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEVuZFRyYW5z
cGFyZW5jeUxheWVyPigpKTsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4o
aXRlbS5nZXQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KGl0
ZW0uZ2V0PEFwcGx5RmlsbFBhdHRlcm4+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseURldmlj
ZVNjYWxlRmFjdG9yPihpdGVtLmdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpKTsKKyAgICB9
Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBhdXRvIGVuZEN1cnNv
ciA9IGl0ZW1zLm1fd3JpdGFibGVCdWZmZXIuZGF0YSArIGl0ZW1zLm1fd3JpdHRlbk51bWJlck9m
Qnl0ZXM7CisgICAgcmV0dXJuIG1fY3Vyc29yID09IGVuZEN1cnNvcjsKK30KKwordm9pZCBEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVtKCkKK3sKKyAgICBjbGVhckN1cnJl
bnRJdGVtKCk7CisKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gaXRlbVR5cGUgPSBz
dGF0aWNfY2FzdDxJdGVtVHlwZT4obV9jdXJzb3JbMF0pOworICAgIGlmIChpc0RyYXdpbmdJdGVt
KGl0ZW1UeXBlKSAmJiAhbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJ
dGVtRXh0ZW50c1ttX2RyYXdpbmdJdGVtSW5kZXhdOworICAgICAgICBtX2RyYXdpbmdJdGVtSW5k
ZXgrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gV1RGOjpudWxsb3B0
OworCisgICAgYXV0byogY2xpZW50ID0gaXRlbXMubV9yZWFkaW5nQ2xpZW50OworICAgIGlmIChj
bGllbnQgJiYgY2xpZW50LT5yZXF1aXJlc0RlY29kaW5nKGl0ZW1UeXBlKSkgeworICAgICAgICBh
dXRvIHNpemVPZlR5cGVBbmRJdGVtID0gc2l6ZU9mSXRlbUluQnl0ZXMoaXRlbVR5cGUpICsgc2l6
ZW9mKEl0ZW1UeXBlKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBz
aXplT2ZUeXBlQW5kSXRlbSA8PSBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA/IG1f
Zml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgOiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihm
YXN0TWFsbG9jKHNpemVPZlR5cGVBbmRJdGVtKSk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlckZv
ckRlY29kZWRJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXRlbVR5cGUpOworCisgICAg
ICAgIGF1dG8gc2l6ZU9mRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4obV9jdXJzb3Ig
KyBzaXplb2YoSXRlbVR5cGUpKVswXTsKKyAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBt
X2N1cnNvciArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgc2l6
ZV90IHBhZGRpbmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oc3RhcnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50
NjRfdCk7CisgICAgICAgIGF1dG8gZGVjb2RlZEl0ZW1IYW5kbGUgPSBjbGllbnQtPmRlY29kZUl0
ZW0oc3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nLCBzaXplT2ZEYXRhLCBpdGVtVHlwZSwgbV9jdXJy
ZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBpZiAoIWRlY29kZWRJdGVtSGFuZGxl
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBjcmFzaGluZywgdGhpcyBuZWVk
cyB0byBmYWlsIGdyYWNlZnVsbHkgYW5kIGluZm9ybSB0aGUgY2FsbGVyLgorICAgICAgICAgICAg
Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGFzc2VydGlvbiBtYWtlcyBidWdzIGluIGl0ZW0g
YnVmZmVyIGVuY29kaW5nIGxvZ2ljIGVhc2llcgorICAgICAgICAgICAgLy8gdG8gY2F0Y2ggYnkg
YXZvaWRpbmcgbXlzdGVyaW91cyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3RseSBh
bGlnbmVkIGl0ZW1zCisgICAgICAgICAgICAvLyBkb3duIHRoZSBsaW5lLgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2N1cnJl
bnRJdGVtID0gKmRlY29kZWRJdGVtSGFuZGxlOworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUlu
QnVmZmVyID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIHNp
emVPZkRhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IEl0ZW1IYW5k
bGUgeyBtX2N1cnNvciB9OworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gbV9j
dXJyZW50SXRlbS5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRv
cjo6YWR2YW5jZSgpCit7CisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY3Vyc29yICs9IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXI7CisKKyAgICBpZiAobV9jdXJz
b3IgPT0gbV9jdXJyZW50RW5kT2ZCdWZmZXIgJiYgbV9yZWFkT25seUJ1ZmZlckluZGV4IDwgbV9k
aXNwbGF5TGlzdC5tX2l0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCkpIHsKKyAgICAgICAg
bV9yZWFkT25seUJ1ZmZlckluZGV4Kys7CisgICAgICAgIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJy
ZW50QnVmZmVyKCk7CisgICAgfQorCisgICAgdXBkYXRlQ3VycmVudEl0ZW0oKTsKK30KKwordm9p
ZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVudEl0ZW0oKQoreworICAgIG1fY3Vy
cmVudEl0ZW1TaXplSW5CdWZmZXIgPSAwOworCisgICAgaWYgKGF1dG8gaXRlbSA9IHN0ZDo6ZXhj
aGFuZ2UobV9jdXJyZW50SXRlbSwgeyB9KSkKKyAgICAgICAgaXRlbS5kZXN0cm95KCk7CisKKyAg
ICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gIT0gbV9maXhlZEJ1
ZmZlckZvckRlY29kZWRJdGVtcykpIHsKKyAgICAgICAgZmFzdEZyZWUobV9jdXJyZW50QnVmZmVy
Rm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSA9
IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZVRv
RW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXMpIHsK
KyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRlbXMt
Pm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0g
bV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9IGl0ZW1zLT5tX3JlYWRP
bmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRv
cjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKQoreworICAgIGF1dG8mIGl0ZW1z
ID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICghaXRlbXMpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMgPSBpdGVtcy0+bV9yZWFkT25s
eUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXggPCBudW1iZXJP
ZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBuZXh0QnVmZmVySGFuZGxlID0gaXRl
bXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZmZXJJbmRleF07CisgICAgICAgIG1f
Y3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAgICAgICBtX2N1cnJlbnRFbmRPZkJ1
ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5jYXBhY2l0eTsKKyAgICB9IGVsc2Ug
aWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykgewor
ICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRhdGE7CisgICAgICAg
IG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBpdGVtcy0+bV93cml0dGVuTnVtYmVy
T2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKIAogVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggZDZiZTI3
NGM2OGRlZWZiNGMwZDUzNjFiZTY0ODE1MjQwMzJjOWY0MS4uODgxOGQ1YjVkMmZiMjZhZGE3NzVl
OTkwZDA0ZDk5MWY3YTFlZWE0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTI1LDEwICsy
NSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYg
ewpAQCAtMzksMTAxICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIAotZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewotICAgIFNhdmUs
Ci0gICAgUmVzdG9yZSwKLSAgICBUcmFuc2xhdGUsCi0gICAgUm90YXRlLAotICAgIFNjYWxlLAot
ICAgIENvbmNhdGVuYXRlQ1RNLAotICAgIFNldENUTSwKLSAgICBTZXRJbmxpbmVGaWxsR3JhZGll
bnQsCi0gICAgU2V0SW5saW5lRmlsbENvbG9yLAotICAgIFNldElubGluZVN0cm9rZUNvbG9yLAot
ICAgIFNldFN0cm9rZVRoaWNrbmVzcywKLSAgICBTZXRTdGF0ZSwKLSAgICBTZXRMaW5lQ2FwLAot
ICAgIFNldExpbmVEYXNoLAotICAgIFNldExpbmVKb2luLAotICAgIFNldE1pdGVyTGltaXQsCi0g
ICAgQ2xlYXJTaGFkb3csCi0gICAgQ2xpcCwKLSAgICBDbGlwT3V0LAotICAgIENsaXBPdXRUb1Bh
dGgsCi0gICAgQ2xpcFBhdGgsCi0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzLAotICAgIERyYXdH
bHlwaHMsCi0gICAgRHJhd0ltYWdlLAotICAgIERyYXdUaWxlZEltYWdlLAotICAgIERyYXdUaWxl
ZFNjYWxlZEltYWdlLAotICAgIERyYXdJbWFnZUJ1ZmZlciwKLSAgICBEcmF3TmF0aXZlSW1hZ2Us
Ci0gICAgRHJhd1BhdHRlcm4sCi0gICAgRHJhd1JlY3QsCi0gICAgRHJhd0xpbmUsCi0gICAgRHJh
d0xpbmVzRm9yVGV4dCwKLSAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyLAotICAgIERyYXdF
bGxpcHNlLAotICAgIERyYXdQYXRoLAotICAgIERyYXdGb2N1c1JpbmdQYXRoLAotICAgIERyYXdG
b2N1c1JpbmdSZWN0cywKLSAgICBGaWxsUmVjdCwKLSAgICBGaWxsUmVjdFdpdGhDb2xvciwKLSAg
ICBGaWxsUmVjdFdpdGhHcmFkaWVudCwKLSAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCi0gICAgRmls
bFJvdW5kZWRSZWN0LAotICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAotI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQotICAgIEZpbGxJbmxpbmVQYXRoLAotI2VuZGlmCi0gICAgRmlsbFBh
dGgsCi0gICAgRmlsbEVsbGlwc2UsCi0gICAgUHV0SW1hZ2VEYXRhLAotICAgIFBhaW50RnJhbWVG
b3JNZWRpYSwKLSAgICBTdHJva2VSZWN0LAotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIFN0cm9rZUlubGluZVBhdGgsCi0jZW5kaWYKLSAgICBTdHJva2VQYXRoLAotICAgIFN0cm9r
ZUVsbGlwc2UsCi0gICAgQ2xlYXJSZWN0LAotICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCi0g
ICAgRW5kVHJhbnNwYXJlbmN5TGF5ZXIsCi0jaWYgVVNFKENHKQotICAgIEFwcGx5U3Ryb2tlUGF0
dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgotICAgIEFwcGx5
RmlsbFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KLSNl
bmRpZgotICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCi19OwotCi1jbGFzcyBJdGVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgotICAgIEl0ZW0oKSA9IGRlbGV0ZTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzRHJhd2luZ0l0ZW0o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9H
X0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYK
LSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mKTsKLQotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEl0ZW0+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBlIG1fdHlwZTsKLX07Ci0KIGVudW0gQXNU
ZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCiAgICAg
SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKQEAgLTE0Niw4NiArNTQs
MTA5IEBAIGNsYXNzIERpc3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlcGxheWVyOwogcHVibGljOgotICAgIERpc3BsYXlMaXN0KCkgPSBk
ZWZhdWx0OwotICAgIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBX
RUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlM
aXN0KERpc3BsYXlMaXN0JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KEl0ZW1C
dWZmZXJIYW5kbGVzJiYpOwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3BsYXlMaXN0KCk7CiAKLSAg
ICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
RGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9Ci0gICAgSXRlbSYg
aXRlbUF0KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fbGlz
dC5zaXplKCkpOwotICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKLSAgICB9Cisg
ICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCi0gICAg
c2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLSAgICAKICAgICBTdHJpbmcgYXNUZXh0KEFzVGV4
dEZsYWdzKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXRlbUJ1ZmZlckNs
aWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCopOworCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECiAgICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5k
aWYKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RGlzcGxh
eUxpc3Q+IGRlY29kZShEZWNvZGVyJik7Ci0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZvckVh
Y2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmKSBj
b25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgYXBw
ZW5kKEFyZ3MmJi4uLiBhcmdzKTsKKyAgICB2b2lkIGFwcGVuZChJdGVtSGFuZGxlKTsKKworICAg
IGJvb2wgdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NE
cmF3aW5nSXRlbUV4dGVudHM7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRyYWNrc0Ry
YXdpbmdJdGVtRXh0ZW50cyhib29sKTsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGVudW0gY2xhc3MgSW1tZWRpYXRlbHlNb3ZlVG9FbmQgeyBObywgWWVzIH07
CisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1tZWRp
YXRlbHlNb3ZlVG9FbmQgaW1tZWRpYXRlbHlNb3ZlVG9FbmQgPSBJbW1lZGlhdGVseU1vdmVUb0Vu
ZDo6Tm8pCisgICAgICAgICAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseU1vdmVUb0VuZCA9PSBJbW1lZGlhdGVseU1v
dmVUb0VuZDo6WWVzKQorICAgICAgICAgICAgICAgIG1vdmVUb0VuZCgpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIo
KTsKKyAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgfml0ZXJhdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gJm1fZGlzcGxheUxpc3QgPT0gJm90aGVy
Lm1fZGlzcGxheUxpc3QgJiYgbV9jdXJzb3IgPT0gb3RoZXIubV9jdXJzb3I7IH0KKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBhZHZhbmNlKCk7IH0KKyAg
ICAgICAgc3RkOjpwYWlyPEl0ZW1IYW5kbGUsIE9wdGlvbmFsPEZsb2F0UmVjdD4+IG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jdXJyZW50SXRlbSwgbV9jdXJyZW50RXh0ZW50IH07IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkZp
eGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zID0gMjU2OworCisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKTsKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtb3ZlVG9FbmQoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhckN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlQ3Vy
cmVudEl0ZW0oKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKCk7CisgICAg
ICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKKworICAgICAgICBjb25zdCBEaXNwbGF5TGlzdCYgbV9k
aXNwbGF5TGlzdDsKKyAgICAgICAgdWludDhfdCogbV9jdXJzb3IgeyBudWxscHRyIH07CisgICAg
ICAgIHNpemVfdCBtX3JlYWRPbmx5QnVmZmVySW5kZXggeyAwIH07CisgICAgICAgIHNpemVfdCBt
X2RyYXdpbmdJdGVtSW5kZXggeyAwIH07CisgICAgICAgIHVpbnQ4X3QqIG1fY3VycmVudEVuZE9m
QnVmZmVyIHsgbnVsbHB0ciB9OworCisgICAgICAgIHVpbnQ4X3QgbV9maXhlZEJ1ZmZlckZvckRl
Y29kZWRJdGVtc1tzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtc10geyAwIH07CisgICAg
ICAgIHVpbnQ4X3QqIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtIHsgbnVsbHB0ciB9Owor
ICAgICAgICBJdGVtSGFuZGxlIG1fY3VycmVudEl0ZW07CisgICAgICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbV9jdXJyZW50RXh0ZW50OworICAgICAgICBzaXplX3QgbV9jdXJyZW50SXRlbVNpemVJ
bkJ1ZmZlciB7IDAgfTsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiB7ICp0aGlzIH07IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7ICp0
aGlzLCBpdGVyYXRvcjo6SW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcyB9OyB9CiAKIHByaXZhdGU6
Ci0gICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCi0gICAgewotICAgICAgICBtX2xp
c3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5n
ZXQoKTsKLSAgICB9CisgICAgSXRlbUJ1ZmZlciogaXRlbUJ1ZmZlcklmRXhpc3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtcy5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIm
IGl0ZW1CdWZmZXIoKTsKIAotICAgIC8vIExlc3MgZWZmaWNpZW50IGFwcGVuZCwgb25seSB1c2Vk
IGZvciB0cmFja2luZyByZXBsYXkuCi0gICAgdm9pZCBhcHBlbmRJdGVtKEl0ZW0mIGl0ZW0pCisg
ICAgdm9pZCBhZGREcmF3aW5nSXRlbUV4dGVudChPcHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50
KQogICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgQVNTRVJUKG1f
dHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKTsKKyAgICAgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMu
YXBwZW5kKFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxk
RHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzLCBjb25zdCBJdGVtJik7Ci0KLSAgICBWZWN0b3I8UmVm
PEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIHN0YXRpYyBib29sIHNob3Vs
ZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7CiAKLSAgICBWZWN0b3I8UmVm
PEl0ZW0+PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW1CdWZmZXI+IG1faXRlbXM7
CisgICAgVmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVjdD4+IG1fZHJhd2luZ0l0ZW1FeHRlbnRzOwor
ICAgIGJvb2wgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgeyB0cnVlIH07CiB9OwogCi0KLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERpc3BsYXlMaXN0OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+Cit2b2lk
IERpc3BsYXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGl0ZW1Db3Vu
dDsKLSAgICBkZWNvZGVyID4+IGl0ZW1Db3VudDsKLSAgICBpZiAoIWl0ZW1Db3VudCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0Owot
Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICppdGVtQ291bnQ7IGkrKykgewotICAgICAg
ICBhdXRvIGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBP
bmNlIHdlIGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBmYWlsaW5nIHRvIGRlY29kZSBhbiBpdGVtIHNo
b3VsZCB0dXJuIGludG8gYSBkZWNvZGUgZmFpbHVyZS4KLSAgICAgICAgLy8gRm9yIG5vdywgd2Ug
anVzdCBoYXZlIHRvIGlnbm9yZSBpdC4KLSAgICAgICAgaWYgKCFpdGVtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIGl0ZW1CdWZmZXIoKS5hcHBlbmQ8
VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogfSAvLyBEaXNwbGF5TGlzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGY3Y2E2YmJmZmQ5OGZhMGRmNjhhODEzNDhjYWVkNTg2
M2FhN2Q1MDMuLjA4MWNlYzc5ZTNjOWFlMmEyODA0YzAxNTFlZWFmM2M1YjI5Yjk2NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdAogICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KSk7CiAgICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKLSAgICBt
X293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0dseXBoczo6Y3JlYXRlKCptX29y
aWdpbmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9u
cywgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCBjdXJyZW50VGV4dE1h
dHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpKTsKKyAgICBtX293
bmVyLmFwcGVuZDxEcmF3R2x5cGhzPigqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFk
dmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKTsKIAogICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1
cCk7CiB9CkBAIC0zNTIsNyArMzUyLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBt
X293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCiAgICAgYXV0byBpbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCByZWN0LCB7eyB9LCBpbWFnZS0+c2l6ZSgp
fSwgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pKTsKKyAgICBtX293bmVyLmFw
cGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBp
bWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Ub3BMZWZ0IH0pOwogCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3Rv
cmUgdGhlIGNvbnRleHQuCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcAppbmRleCAyM2FjMzI0YjdiMDBhOWUxNmE1NmFkNjcwY2UwNGNmYTc3
ZmM5ZmE4Li4xNGMwZWM3MmM0MGUwZTg4YjE2M2JiY2E5YTg1ODRlYWFlZjZhNjBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVySGFyZkJ1enouY3BwCkBAIC00Myw3ICs0Myw3IEBAIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lcikKIAogdm9pZCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAg
bV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0ZShmb250
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpKTsKKyAgICBtX293bmVyLmFwcGVu
ZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IGQ0NjE3ZDM1MTZmNGYzZTUxZDc1ZDY0
NDM0YTZhMzk0NTdhMDAwMWYuLmY5YjMyM2M3NDI2NmVkMWY2MWQ0NGIwNDcyZWY1NTE4NTNlOGM3
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5j
cHAKQEAgLTU1LDcgKzU1LDcgQEAgUmVjb3JkZXImIERyYXdpbmdDb250ZXh0OjpyZWNvcmRlcigp
CiAKIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQpCiB7Ci0gICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQor
ICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggMjJlZDI1NmU4MGFk
MjkzYTA1MjA2OWI3NDMwODhhMTM1MWY0N2NjMC4uOTZlNGIxZWZmOTgxZTQyMjc5ZDc0NmRjNmJi
MzljOGFhNTI4ZTE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigq
dGhpcykubV9jb250ZXh0OyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVy
KCk7Ci0gICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gV1RGTW92ZSht
X2Rpc3BsYXlMaXN0KTsgfQorICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAg
ICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheWVkRGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxheWVkRGlzcGxheUxpc3QuZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oCmluZGV4IDMyNTk5ZTA2MmQ3Y2Y1OWQxZGMyZWFkMDFlNzYwZDY2
ZTNmN2VjM2MuLmZmZDk0YjUyOWMwNmE3ZTJjZGUwMGVjOTRiMzU1Yzg1ZGRhZmI0YzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5pdGVtQ291bnQo
KSkKKyAgICAgICAgaWYgKCFtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5yZXBsYXlEaXNwbGF5TGlzdChCYXNlQ29u
Y3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmNjZGM5YzRkY2E5NTNhNWFh
NWE3NWY0ZTQyZmExOTYxY2VlOGU4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3Bw
CkBAIC0wLDAgKzEsNjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJ
dGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK3ZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZTogeworICAgICAgICBnZXQ8U2F2ZT4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7Cisg
ICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBnZXQ8VHJhbnNs
YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB7Cisg
ICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBnZXQ8Q29u
Y2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29s
b3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgZ2V0PFNldElubGluZVN0
cm9rZUNvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBnZXQ8U2V0U3Ry
b2tlVGhpY2tuZXNzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogeworICAgICAg
ICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogeworICAgICAgICBnZXQ8U2V0
TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDogeworICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB7CisgICAgICAg
IGdldDxDbGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBPdXRU
b1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
OiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAg
ICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAg
ICAgICAgZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8
RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAgICAgZ2V0PERyYXdSZWN0PigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOiB7CisgICAgICAgIGdldDxEcmF3TGluZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OiB7CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6IHsKKyAgICAgICAgZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgZ2V0PERyYXdFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7
CisgICAgICAgIGdldDxEcmF3UGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAg
ICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAg
ICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAgZ2V0
PEZpbGxSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVj
dFdpdGhDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBnZXQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdl
dDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgIGdl
dDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAgICAg
ICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxGaWxsSW5saW5lUGF0aD4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0aD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZTogeworICAgICAgICBnZXQ8RmlsbEVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7
CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7Cisg
ICAgICAgIGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAgICAg
ICBnZXQ8U3Ryb2tlUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VJbmxpbmVQYXRoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOiB7CisgICAgICAgIGdldDxTdHJva2VFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAg
ICAgICBnZXQ8Q2xlYXJSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAg
ICAgZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
IHsKKyAgICAgICAgZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseUZpbGxQYXR0ZXJuPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBnZXQ8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCit7CisgICAgc3dpdGNoICh0
eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgIGdl
dDxDbGlwT3V0VG9QYXRoPigpLn5DbGlwT3V0VG9QYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRo
PigpLn5DbGlwUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPigpLn5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBnZXQ8
RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAg
ICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkufkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAg
ICAgICAgZ2V0PERyYXdHbHlwaHM+KCkufkRyYXdHbHlwaHMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdJ
bWFnZT4oKS5+RHJhd0ltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+
KCkufkRyYXdJbWFnZUJ1ZmZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRl
eHQ+KCkufkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJ
bWFnZT4oKS5+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3
UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5+RHJhd1BhdHRlcm4oKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTog
eworICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkufkRyYXdUaWxlZEltYWdlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRTY2Fs
ZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5G
aWxsQ29tcG9zaXRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Q29sb3I6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdpdGhD
b2xvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5+
RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAgICBnZXQ8RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU+KCkufkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7Cisg
ICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8
U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5T
ZXRTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuflN0cm9rZVBhdGgoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
QXBwbHlGaWxsUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQYXR0ZXJuPjo6dmFs
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxCZWdpblRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVh
clJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcE91dD46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8RHJhd0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0xpbmU+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd1Jl
Y3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbEVs
bGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbElubGlu
ZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxGaWxsUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UGFpbnRGcmFtZUZv
ck1lZGlhPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RN
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNl
dElubGluZUZpbGxHcmFkaWVudD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xv
cj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRN
aXRlckxpbWl0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
dHJva2VFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
U3Ryb2tlSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlUmVjdD46OnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VHJhbnNs
YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworYm9vbCBJ
dGVtSGFuZGxlOjppc0RyYXdpbmdJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0odHlwZSgpKTsKK30KKworSXRlbUJ1ZmZlcjo6SXRl
bUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhhbmRsZXMpCisgICAgOiBtX3JlYWRPbmx5QnVm
ZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQorCitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKCkg
PSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZlcigpCit7CisgICAgY2xlYXIoKTsK
K30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYgb3RoZXIpCisgICAgOiBt
X3JlYWRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRpbmdDbGllbnQsIG51bGxw
dHIpKQorICAgICwgbV93cml0aW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0aW5n
Q2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZl
cnMoc3RkOjpleGNoYW5nZShvdGhlci5tX25vbklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJz
LCB7IH0pKQorICAgICwgbV9hbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9h
bGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9yZWFkT25seUJ1ZmZlcnMoc3RkOjpleGNo
YW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9KSkKKyAgICAsIG1fd3JpdGFibGVCdWZm
ZXIoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlQnVmZmVyLCB7IH0pKQorICAgICwgbV93
cml0dGVuTnVtYmVyT2ZCeXRlcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdHRlbk51bWJlck9m
Qnl0ZXMsIDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVtQnVmZmVyOjpvcGVyYXRvcj0oSXRl
bUJ1ZmZlciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0NsaWVudCA9IHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX3dyaXRpbmdDbGllbnQgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cik7CisgICAgbV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX2FsbG9jYXRlZEJ1ZmZl
cnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBt
X3JlYWRPbmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMs
IHsgfSk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK0l0ZW1CdWZmZXJIYW5kbGUgSXRlbUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXpl
X3QgY2FwYWNpdHkpCit7CisgICAgaWYgKG1fd3JpdGluZ0NsaWVudCkgeworICAgICAgICBpZiAo
YXV0byBoYW5kbGUgPSBtX3dyaXRpbmdDbGllbnQtPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHkp
KQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6
ZV90IGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkgPSAxIDw8IDEwOworCisgICAgYXV0byBuZXdC
dWZmZXJDYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFj
aXR5KTsKKyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihmYXN0
TWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzLmFwcGVu
ZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
LCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Zm9y
RWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYg
bWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX3JlYWRPbmx5
QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxlKTsKKworICAgIGlmIChtX3dyaXRh
YmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMpCisgICAgICAgIG1hcEZ1bmN0aW9u
KHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEsIG1f
d3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Y2xlYXIoKQor
eworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5nZShtX25vbklubGluZUl0ZW1zSW5B
bGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBpdGVtLmRlc3Ryb3koKTsKKworICAgIGZv
ciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZShtX2FsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkp
CisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisKKyAgICBtX3JlYWRPbmx5QnVmZmVycy5jbGVh
cigpOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSB7IH07CisgICAgbV93cml0dGVuTnVtYmVyT2ZC
eXRlcyA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmIwYWZlNTVjY2UyZjdlYTE0ZjI3M2QzOTg0MjgzMWQyNzY4MTkwYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdEl0ZW1UeXBlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKKworZW51bSBJdGVtQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcg
SXRlbUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEl0ZW1CdWZmZXJJZGVudGlm
aWVyVHlwZT47CisKKy8vIEFuIEl0ZW1CdWZmZXJIYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGEg
ZGF0YSBidWZmZXIgdGhhdCBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLgorc3RydWN0
IEl0ZW1CdWZmZXJIYW5kbGUgeworICAgIEl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXI7
CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgY2FwYWNpdHkgeyAw
IH07CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISEoKnRoaXMpOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhZGF0YTsgfQorfTsKKwordXNpbmcg
SXRlbUJ1ZmZlckhhbmRsZXMgPSBWZWN0b3I8SXRlbUJ1ZmZlckhhbmRsZSwgMj47CisKKy8vIEFu
IEl0ZW1IYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGFuIEl0ZW1UeXBlLCBmb2xsb3dlZCBpbW1l
ZGlhdGVseSBieSBhbiBpdGVtIG9mIHRoYXQgdHlwZS4KK3N0cnVjdCBJdGVtSGFuZGxlIHsKKyAg
ICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworCisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzRHJhd2luZ0l0ZW0oKSBj
b25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIWRhdGE7IH0KKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRhOyB9CisKKyAgICBJdGVtVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KGRhdGFbMF0pOyB9
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplb2YoSXRlbVR5cGUpICsgc2l6
ZU9mSXRlbUluQnl0ZXModHlwZSgpKTsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wg
aXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVDo6aXRlbVR5cGU7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUJiBnZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzPFQ+
KCkpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZkYXRhW3NpemVvZihJ
dGVtVHlwZSldKTsKKyAgICB9Cit9OworCitjbGFzcyBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoKSA9IDA7CisK
KyAgICB2aXJ0dWFsIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNFbmNvZGluZyhJdGVtVHlwZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShJdGVtSGFuZGxl
KSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQoKSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNEZWNvZGluZyhJdGVtVHlwZSkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0o
Y29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90
KiBoYW5kbGVMb2NhdGlvbikgPSAwOworfTsKKworSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQ6On5J
dGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpIHsgfQorSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQ6On5J
dGVtQnVmZmVyUmVhZGluZ0NsaWVudCgpIHsgfQorCisvLyBBbiBJdGVtQnVmZmVyIGNvbnRhaW5z
IGRpc3BsYXkgbGlzdCBpdGVtIGRhdGEsIGFuZCBjb25zaXN0cyBvZiBhIHJlYWR3cml0ZSBJdGVt
QnVmZmVySGFuZGxlICh0byB3aGljaCBkaXNwbGF5CisvLyBsaXN0IGl0ZW1zIGFyZSBhcHBlbmRl
ZCkgYXMgd2VsbCBhcyBhIG51bWJlciBvZiByZWFkb25seSBJdGVtQnVmZmVySGFuZGxlcy4gSXRl
bXMgYXJlIGFwcGVuZGVkIHRvIHRoZSByZWFkd3JpdGUKKy8vIGJ1ZmZlciB1bnRpbCBhbGwgYXZh
aWxhYmxlIGNhcGFjaXR5IGlzIGV4aGF1c3RlZCwgYXQgd2hpY2ggcG9pbnQgd2Ugd2lsbCBtb3Zl
IHRoaXMgd3JpdGFibGUgaGFuZGxlIHRvIHRoZSBsaXN0CisvLyBvZiByZWFkb25seSBoYW5kbGVz
LgorY2xhc3MgSXRlbUJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSXRlbUJ1ZmZl
cik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBE
aXNwbGF5TGlzdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB+SXRlbUJ1ZmZlcigpOworICAgIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRs
ZXMmJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlciYgb3BlcmF0b3I9KEl0ZW1CdWZmZXImJik7CisK
KyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJl
c3VsdCA9IDA7CisgICAgICAgIGZvciAoYXV0byBidWZmZXIgOiBtX3JlYWRPbmx5QnVmZmVycykK
KyAgICAgICAgICAgIHJlc3VsdCArPSBidWZmZXIuY2FwYWNpdHk7CisgICAgICAgIHJlc3VsdCAr
PSBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fd3JpdHRlbk51bWJlck9mQnl0ZXMgJiYgbV9yZWFkT25seUJ1ZmZl
cnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXJIYW5k
bGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOworCisgICAgLy8gSXRlbUJ1ZmZlcjo6YXBwZW5k
PFQ+KC4uLikgYXBwZW5kcyBhIGRpc3BsYXkgbGlzdCBpdGVtIG9mIHR5cGUgVCB0byB0aGUgZW5k
IG9mIHRoZSBjdXJyZW50CisgICAgLy8gd3JpdGFibGUgYnVmZmVyIGhhbmRsZTsgaWYgcmVtYWlu
aW5nIGJ1ZmZlciBjYXBhY2l0eSBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUgdGhlIGl0ZW0sIGEK
KyAgICAvLyBuZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIChlaXRoZXIgYnkgdGhlIEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50LCBpZiBzZXQsIG9yIGJ5IHRoZSBpdGVtCisgICAgLy8gYnVmZmVy
IGl0c2VsZiBpZiB0aGVyZSBpcyBubyBjbGllbnQpLiBJdGVtcyBhcmUgcGxhY2VkIGJhY2stdG8t
YmFjayBpbiB0aGVzZSBpdGVtIGJ1ZmZlcnMsCisgICAgLy8gd2l0aCBhbiBJdGVtVHlwZSBzZXBh
cmF0aW5nIGVhY2ggaXRlbS4KKyAgICAvLworICAgIC8vIElmIGEgd3JpdGluZyBjbGllbnQgaXMg
cHJlc2VudCBhbmQgcmVxdWlyZXMgY3VzdG9tIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0
eXBlIFQgKGkuZS4KKyAgICAvLyBieSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHJlcXVpcmVzRW5jb2Rp
bmcpLCB0aGUgaXRlbSBidWZmZXIgd2lsbCBhc2sgdGhlIGNsaWVudCBmb3IgYW4gb3BhcXVlCisg
ICAgLy8gU2hhcmVkQnVmZmVyIGNvbnRhaW5pbmcgZW5jb2RlZCBkYXRhIGZvciB0aGUgaXRlbS4g
VGhpcyBlbmNvZGVkIGRhdGEgaXMgdGhlbiBhcHBlbmRlZCB0byB0aGUKKyAgICAvLyBpdGVtIGJ1
ZmZlciwgd2l0aCBwYWRkaW5nIHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFydCBvZiB0aGlzIGRhdGEg
aXMgYWxpZ25lZCB0byA4IGJ5dGVzLCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1p
bmcgZW5jb2RlZCBpdGVtIGRhdGEsIGEgY29ycmVzcG9uZGluZyBJdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCB3aWxsIGJlCisgICAgLy8gcmVxdWlyZWQgdG8gY29udmVydCB0aGlzIGVuY29kZWQgZGF0
YSBiYWNrIGludG8gYW4gaXRlbSBvZiB0eXBlIFQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
Y2xhc3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUg
fHwgIVQ6OmlzSW5saW5lSXRlbSk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNpemVPZlR5cGVB
bmRJdGVtID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihUKTsKKworICAgICAgICBpZiAobV93
cml0aW5nQ2xpZW50ICYmIG1fd3JpdGluZ0NsaWVudC0+cmVxdWlyZXNFbmNvZGluZyhUOjppdGVt
VHlwZSkpIHsKKyAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlw
ZUFuZEl0ZW1dOworICAgICAgICAgICAgaXRlbUJ1ZmZlclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgIG5ldyAoaXRlbUJ1ZmZlciArIHNpemVvZihJ
dGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgICAgIGlm
IChhdXRvIHNoYXJlZEJ1ZmZlciA9IG1fd3JpdGluZ0NsaWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1C
dWZmZXIgfSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG1heEFkZGl0aW9uYWxDYXBhY2l0eUZv
ckl0ZW0gPSBzaGFyZWRCdWZmZXItPnNpemUoKSArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yo
c2l6ZV90KSArIGFsaWdub2YodWludDY0X3QpOworICAgICAgICAgICAgICAgIGlmIChtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzICsgbWF4QWRkaXRpb25hbENhcGFjaXR5Rm9ySXRlbSA+IG1fd3JpdGFi
bGVCdWZmZXIuY2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBsYXN0V3JpdGFi
bGVCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2Uo
bV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0
V3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3JlYWRP
bmx5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShsYXN0V3JpdGFibGVCdWZmZXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIobWF4QWRkaXRp
b25hbENhcGFjaXR5Rm9ySXRlbSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0
T2ZEYXRhTGVuZ3RoID0gbV93cml0YWJsZUJ1ZmZlci5kYXRhICsgbV93cml0dGVuTnVtYmVyT2ZC
eXRlcyArIHNpemVvZihJdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxzaXplX3QqPihzdGFydE9mRGF0YUxlbmd0aClbMF0gPSBzaGFyZWRCdWZmZXItPnNpemUoKTsK
KworICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gc3RhcnRPZkRhdGFMZW5n
dGggKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgICAgICAgICBzaXplX3QgcGFkZGluZyA9IChh
bGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydE9mUGFk
ZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90KTsKKyAgICAgICAg
ICAgICAgICBhdXRvKiBzdGFydE9mRGF0YSA9IHN0YXJ0T2ZEYXRhTGVuZ3RoICsgc2l6ZW9mKHNp
emVfdCkgKyBwYWRkaW5nOworICAgICAgICAgICAgICAgIG1lbWNweShzdGFydE9mRGF0YSwgc2hh
cmVkQnVmZmVyLT5kYXRhQXNVSW50OFB0cigpLCBzaGFyZWRCdWZmZXItPnNpemUoKSk7CisKKyAg
ICAgICAgICAgICAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkg
KyBzaXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBzaGFyZWRCdWZmZXItPnNpemUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICsgc2l6ZU9mVHlwZUFuZEl0ZW0gPiBtX3dyaXRhYmxlQnVm
ZmVyLmNhcGFjaXR5KSB7CisgICAgICAgICAgICBhdXRvIGxhc3RXcml0YWJsZUJ1ZmZlciA9IHN0
ZDo6ZXhjaGFuZ2UobV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICAgICAgICAgIGxhc3RXcml0
YWJsZUJ1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0dGVuTnVtYmVyT2ZCeXRl
cywgMCk7CisgICAgICAgICAgICBpZiAobGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQorICAg
ICAgICAgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGxhc3RXcml0YWJs
ZUJ1ZmZlcikpOworICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZm
ZXIoc2l6ZU9mVHlwZUFuZEl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgYXV0byogc3RhcnRP
Zkl0ZW0gPSAmbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdOwor
ICAgICAgICBzdGFydE9mSXRlbVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBl
KTsKKyAgICAgICAgbmV3IChzdGFydE9mSXRlbSArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyAr
PSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpOworCisg
ICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVtKQorICAgICAgICAgICAgbV9ub25JbmxpbmVJdGVt
c0luQWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoeyBzdGFydE9mSXRlbSB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1fd3Jp
dGluZ0NsaWVudCA9IGNsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJSZWFk
aW5nQ2xpZW50KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhZE9ubHlCdWZmZXJzOyB9CisgICAgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZl
cihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAg
ICBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0ciB9Owor
ICAgIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPEl0ZW1IYW5kbGU+IG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZl
cnM7CisgICAgVmVjdG9yPHVpbnQ4X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAgSXRlbUJ1
ZmZlckhhbmRsZXMgbV9yZWFkT25seUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZSBtX3dy
aXRhYmxlQnVmZmVyOworICAgIHNpemVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsgMCB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWU2
MWY3NDNkNjJmMTA4ODM2YzZlZjAwMDQxNzhlNTAxZWE0ODExCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbVR5cGUuY3BwCkBAIC0wLDAgKzEsMzA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKworI2luY2x1ZGUgIkRp
c3BsYXlMaXN0SXRlbXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKKworc2l6ZV90IHNpemVPZkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0
dXJuIHNpemVvZihTYXZlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFJlc3RvcmUpOworICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihUcmFuc2xhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihSb3RhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNjYWxlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKKyAgICAgICAgcmV0dXJuIHNpemVvZihDb25jYXRlbmF0ZUNUTSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldENUTSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldElubGluZUZpbGxHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZUZpbGxDb2xv
cik7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIHJl
dHVybiBzaXplb2YoU2V0SW5saW5lU3Ryb2tlQ29sb3IpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRTdHJva2VUaGlja25l
c3MpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldFN0YXRlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKFNldExpbmVDYXApOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVEYXNoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lSm9pbik7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRNaXRl
ckxpbWl0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihDbGVhclNoYWRvdyk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihDbGlwKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKENsaXBPdXQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcE91dFRvUGF0aCk7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcFBhdGgpOworICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihDbGlwVG9EcmF3aW5nQ29tbWFuZHMpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0dseXBocyk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdJbWFnZSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1RpbGVk
SW1hZ2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKERyYXdUaWxlZFNjYWxlZEltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ltYWdlQnVmZmVy
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVybiBz
aXplb2YoRHJhd05hdGl2ZUltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UGF0dGVybik7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1JlY3QpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdMaW5lKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERy
YXdMaW5lc0ZvclRleHQpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2Yo
RHJhd0VsbGlwc2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKERyYXdQYXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3Rm9jdXNSaW5nUGF0aCk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdG
b2N1c1JpbmdSZWN0cyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIHJl
dHVybiBzaXplb2YoRmlsbFJlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aENvbG9yKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsUmVjdFdpdGhHcmFkaWVudCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxDb21wb3NpdGVkUmVjdCk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxS
b3VuZGVkUmVjdCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
CisgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOworI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRo
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxJbmxpbmVQYXRoKTsKKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxQYXRoKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsRWxsaXBzZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKFB1dEltYWdlRGF0YSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFt
ZUZvck1lZGlhOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFBhaW50RnJhbWVGb3JNZWRpYSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJv
a2VSZWN0KTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFN0cm9rZUlubGluZVBh
dGgpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihTdHJva2VQYXRoKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNl
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKFN0cm9rZUVsbGlwc2UpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGVhclJlY3QpOworICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXpl
b2YoQmVnaW5UcmFuc3BhcmVuY3lMYXllcik7CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBzaXplb2YoRW5kVHJhbnNwYXJlbmN5TGF5ZXIp
OworI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Cisg
ICAgICAgIHJldHVybiBzaXplb2YoQXBwbHlTdHJva2VQYXR0ZXJuKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFwcGx5RmlsbFBh
dHRlcm4pOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihBcHBseURldmljZVNjYWxlRmFjdG9yKTsKKyAgICB9
Cit9CisKK2Jvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisjaWYg
VVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOgorICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0Q1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFn
ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmU6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0Ogor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgIGNhc2UgSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURh
dGE6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VSZWN0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgaXNJbmxpbmVJ
dGVtKEl0ZW1UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJ
bWFnZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0dGVybjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Q29tcG9zaXRlZFJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6
OlB1dEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICBjYXNl
IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxs
aXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNlNGY4NTc5YWM4NzdiYjg4M2I0OTYzMzMyN2ZhNzhjMjMxNzFjYzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7
CisKK2VudW0gY2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKKyAgICBTYXZlLAorICAgIFJlc3Rv
cmUsCisgICAgVHJhbnNsYXRlLAorICAgIFJvdGF0ZSwKKyAgICBTY2FsZSwKKyAgICBDb25jYXRl
bmF0ZUNUTSwKKyAgICBTZXRDVE0sCisgICAgU2V0SW5saW5lRmlsbEdyYWRpZW50LAorICAgIFNl
dElubGluZUZpbGxDb2xvciwKKyAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKKyAgICBTZXRTdHJv
a2VUaGlja25lc3MsCisgICAgU2V0U3RhdGUsCisgICAgU2V0TGluZUNhcCwKKyAgICBTZXRMaW5l
RGFzaCwKKyAgICBTZXRMaW5lSm9pbiwKKyAgICBTZXRNaXRlckxpbWl0LAorICAgIENsZWFyU2hh
ZG93LAorICAgIENsaXAsCisgICAgQ2xpcE91dCwKKyAgICBDbGlwT3V0VG9QYXRoLAorICAgIENs
aXBQYXRoLAorICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcywKKyAgICBEcmF3R2x5cGhzLAorICAg
IERyYXdJbWFnZSwKKyAgICBEcmF3VGlsZWRJbWFnZSwKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFn
ZSwKKyAgICBEcmF3SW1hZ2VCdWZmZXIsCisgICAgRHJhd05hdGl2ZUltYWdlLAorICAgIERyYXdQ
YXR0ZXJuLAorICAgIERyYXdSZWN0LAorICAgIERyYXdMaW5lLAorICAgIERyYXdMaW5lc0ZvclRl
eHQsCisgICAgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciwKKyAgICBEcmF3RWxsaXBzZSwKKyAg
ICBEcmF3UGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aCwKKyAgICBEcmF3Rm9jdXNSaW5nUmVj
dHMsCisgICAgRmlsbFJlY3QsCisgICAgRmlsbFJlY3RXaXRoQ29sb3IsCisgICAgRmlsbFJlY3RX
aXRoR3JhZGllbnQsCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0LAorICAgIEZpbGxSb3VuZGVkUmVj
dCwKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKyAgICBGaWxsSW5saW5lUGF0aCwKKyNlbmRpZgorICAgIEZpbGxQYXRoLAorICAgIEZp
bGxFbGxpcHNlLAorICAgIFB1dEltYWdlRGF0YSwKKyAgICBQYWludEZyYW1lRm9yTWVkaWEsCisg
ICAgU3Ryb2tlUmVjdCwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBTdHJva2VJ
bmxpbmVQYXRoLAorI2VuZGlmCisgICAgU3Ryb2tlUGF0aCwKKyAgICBTdHJva2VFbGxpcHNlLAor
ICAgIENsZWFyUmVjdCwKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAorICAgIEVuZFRyYW5z
cGFyZW5jeUxheWVyLAorI2lmIFVTRShDRykKKyAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJ
WE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyAgICBBcHBseUZpbGxQYXR0ZXJu
LCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCisjZW5kaWYKKyAgICBB
cHBseURldmljZVNjYWxlRmFjdG9yLAorfTsKKworV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVP
Zkl0ZW1JbkJ5dGVzKEl0ZW1UeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNJbmxpbmVJdGVt
KEl0ZW1UeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaXNEcmF3aW5nSXRlbShJdGVtVHlwZSk7
CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggNDdjNzYyZTFhNjE5N2Q2Yzhi
OGM0NWZhOWNmZGMwNWEwM2RlZTUxYi4uNjBhZTYyNjgxMzNmMzdlZWVlZGNiMWI1NGY1MTM0NmM1
MzRhMzkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNTIsMTk1
ICs1MiwxNiBAQCBXVEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAogfQogI2Vu
ZGlmCiAKLUl0ZW06Okl0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewot
fQotCi1JdGVtOjp+SXRlbSgpID0gZGVmYXVsdDsKLQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVz
KGNvbnN0IEl0ZW0mIGl0ZW0pCi17Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNh
c2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8UmVzdG9yZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
Um90YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8U2NhbGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRD
VE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0Q1RNPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5l
RmlsbEdyYWRpZW50PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldFN0YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1p
dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyU2hhZG93PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxDbGlwT3V0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
Q2xpcFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVy
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxE
cmF3Rm9jdXNSaW5nUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVj
dHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxGaWxsUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aENvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0
V2l0aENvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRo
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UHV0SW1hZ2VE
YXRhPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJv
a2VQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENs
ZWFyUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXll
cj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7
Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEFwcGx5RmlsbFBhdHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdpbmdJdGVtJiBpdGVtKQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0
cyA8PCAiZXh0ZW50ICI7Ci0gICAgaWYgKGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMg
PDwgaXRlbS5leHRlbnQoKTsKLSAgICBlbHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKLSAg
ICAKLSAgICB0cy5lbmRHcm91cCgpOwotICAgIHJldHVybiB0czsKLX0KLQotRHJhd2luZ0l0ZW06
OkRyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgOiBJdGVtKHR5cGUpCi17Ci19Ci0KLURy
YXdpbmdJdGVtOjp+RHJhd2luZ0l0ZW0oKSA9IGRlZmF1bHQ7Ci0KLVNhdmU6OlNhdmUoKQotICAg
IDogSXRlbShJdGVtVHlwZTo6U2F2ZSkKLXsKLX0KLQotU2F2ZTo6flNhdmUoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgU2F2ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuc2F2ZSgpOwogfQogCi1SZXN0b3JlOjpSZXN0b3JlKCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlJlc3RvcmUpCi17Ci19Ci0KLVJlc3RvcmU6On5SZXN0b3JlKCkgPSBkZWZhdWx0
OwotCiB2b2lkIFJlc3RvcmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KIAotVHJhbnNsYXRlOjpUcmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAsIG1f
eCh4KQotICAgICwgbV95KHkpCi17Ci19Ci0KLVRyYW5zbGF0ZTo6flRyYW5zbGF0ZSgpID0gZGVm
YXVsdDsKLQogdm9pZCBUcmFuc2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7CkBAIC0yNTQsMTQgKzc1
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFRyYW5zbGF0ZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJvdGF0ZTo6Um90YXRlKGZs
b2F0IGFuZ2xlKQotICAgIDogSXRlbShJdGVtVHlwZTo6Um90YXRlKQotICAgICwgbV9hbmdsZShh
bmdsZSkKLXsKLX0KLQotUm90YXRlOjp+Um90YXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJvdGF0
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
cm90YXRlKG1fYW5nbGUpOwpAQCAtMjc0LDE0ICs4Nyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1TY2FsZTo6U2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgIDogSXRl
bShJdGVtVHlwZTo6U2NhbGUpCi0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotU2NhbGU6On5T
Y2FsZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKQEAgLTI5NCwxNCAr
OTksNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2NhbGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRDVE06OlNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldENU
TSkKLSAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLXsKLX0KLQotU2V0Q1RNOjp+U2V0Q1RN
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMxNCwx
NCArMTExLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNldENUTSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNvbmNhdGVuYXRlQ1RN
OjpDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNm
b3JtKQotewotfQotCi1Db25jYXRlbmF0ZUNUTTo6fkNvbmNhdGVuYXRlQ1RNKCkgPSBkZWZhdWx0
OwotCiB2b2lkIENvbmNhdGVuYXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzM1LDgg
KzEyNCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDb25jYXRlbmF0ZUNUTSYgaXRlbSkKIH0KIAogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpT
ZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIDogSXRl
bShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQotICAgICwgbV9kYXRhKGdyYWRpZW50
LmRhdGEoKSkKKyAgICA6IG1fZGF0YShncmFkaWVudC5kYXRhKCkpCiAgICAgLCBtX2dyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudC5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCiAg
ICAgLCBtX3NwcmVhZE1ldGhvZChncmFkaWVudC5zcHJlYWRNZXRob2QoKSkKICAgICAsIG1fY29s
b3JTdG9wQ291bnQoc3RhdGljX2Nhc3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkp
KQpAQCAtMzU4LDE0ICsxNDYsOCBAQCBSZWY8R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVu
dDo6Z3JhZGllbnQoKSBjb25zdAogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotUmVmPFNldElu
bGluZUZpbGxHcmFkaWVudD4gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoY29uc3QgR3Jh
ZGllbnQmIGdyYWRpZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZp
bGxHcmFkaWVudChncmFkaWVudCkpOwotfQotCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElu
bGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8
dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEm
IGRhdGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
LCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291
bnQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBt
X2RhdGEoZGF0YSkKKyAgICA6IG1fZGF0YShkYXRhKQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24oZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQogICAgICwgbV9zcHJlYWRN
ZXRob2Qoc3ByZWFkTWV0aG9kKQogICAgICwgbV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3Vu
dCkKQEAgLTM3Nyw4ICsxNTksNiBAQCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZp
bGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgUwogICAgIH0KIH0K
IAotU2V0SW5saW5lRmlsbEdyYWRpZW50Ojp+U2V0SW5saW5lRmlsbEdyYWRpZW50KCkgPSBkZWZh
dWx0OwotCiB2b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9y
U3RvcENvdW50KQpAQCAtNDA0LDEzICsxODQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50JikKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IFNldElubGluZUZpbGxDb2xv
cjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRJbmxpbmVGaWxsQ29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZUZp
bGxDb2xvcjo6flNldElubGluZUZpbGxDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxp
bmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsKQEAgLTQyMiwxMyArMTk1LDYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGlu
ZUZpbGxDb2xvciYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lU3Ry
b2tlQ29sb3I+IFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29s
b3JEYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZVN0cm9rZUNvbG9y
KGNvbG9yRGF0YSkpOwotfQotCi1TZXRJbmxpbmVTdHJva2VDb2xvcjo6flNldElubGluZVN0cm9r
ZUNvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihjb2xvcigpKTsKQEAgLTQ0MCwxMyArMjA2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0
ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRTdHJva2VUaGlja25lc3M+IFNldFN0cm9r
ZVRoaWNrbmVzczo6Y3JlYXRlKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKSk7Ci19Ci0KLVNldFN0cm9rZVRo
aWNrbmVzczo6flNldFN0cm9rZVRoaWNrbmVzcygpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdHJv
a2VUaGlja25lc3M6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3RoaWNrbmVzcyk7CkBAIC00NTksMTkgKzIx
OCwxNSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0U3Ryb2tlVGhpY2tuZXNzJiBzdGF0ZSkKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAg
ICAsIG1fc3RhdGUoc3RhdGUsIGZsYWdzKQorICAgIDogbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCiB7
CiB9CiAKIFNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYgc3RhdGVDaGFuZ2UpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1f
c3RhdGUoc3RhdGVDaGFuZ2UpCisgICAgOiBtX3N0YXRlKHN0YXRlQ2hhbmdlKQogewogfQogCi1T
ZXRTdGF0ZTo6flNldFN0YXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldFN0YXRlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgbV9zdGF0ZS5hcHBseShjb250
ZXh0KTsKQEAgLTQ4MywxNCArMjM4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9
CiAKLVNldExpbmVDYXA6OlNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgIDogSXRlbShJ
dGVtVHlwZTo6U2V0TGluZUNhcCkKLSAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQotewotfQotCi1T
ZXRMaW5lQ2FwOjp+U2V0TGluZUNhcCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lQ2FwOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRM
aW5lQ2FwKG1fbGluZUNhcCk7CkBAIC01MDIsMTUgKzI0OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQog
ICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZURhc2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQotICAgIDogSXRlbShJdGVtVHlwZTo6
U2V0TGluZURhc2gpCi0gICAgLCBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgLCBtX2Rhc2hP
ZmZzZXQoZGFzaE9mZnNldCkKLXsKLX0KLQotU2V0TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0g
ZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFz
aE9mZnNldCk7CkBAIC01MjMsMTQgKzI2MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0
dXJuIHRzOwogfQogCi1TZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lSm9pbikKLSAgICAsIG1fbGluZUpvaW4obGlu
ZUpvaW4pCi17Ci19Ci0KLVNldExpbmVKb2luOjp+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgU2V0TGluZUpvaW46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LnNldExpbmVKb2luKG1fbGluZUpvaW4pOwpAQCAtNTQyLDE0ICsyNzIs
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2V0TGluZUpvaW4mIGxpbmVKb2luKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TWl0ZXJMaW1p
dDo6U2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotICAgIDogSXRlbShJdGVtVHlwZTo6
U2V0TWl0ZXJMaW1pdCkKLSAgICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotewotfQotCi1T
ZXRNaXRlckxpbWl0Ojp+U2V0TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRNaXRl
ckxpbWl0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5zZXRNaXRlckxpbWl0KG1fbWl0ZXJMaW1pdCk7CkBAIC01NjEsMjYgKzI4MywxMSBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0
ZXJMaW1pdCYgbWl0ZXJMaW1pdCkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsZWFyU2hhZG93OjpD
bGVhclNoYWRvdygpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKLXsKLX0KLQot
Q2xlYXJTaGFkb3c6On5DbGVhclNoYWRvdygpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclNoYWRv
dzo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
Y2xlYXJTaGFkb3coKTsKIH0KIAotQ2xpcDo6Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNs
aXA6On5DbGlwKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTU5Miwx
NCArMjk5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENsaXAmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0OjpDbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0g
ICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotQ2xpcE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgQ2xpcE91dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuY2xpcE91dChtX3JlY3QpOwpAQCAtNjExLDE0ICszMTAsNiBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYg
aXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0g
ICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotQ2xpcE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNjMw
LDE1ICszMjEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgQ2xpcE91dFRvUGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBQ
YXRoOjpDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNsaXBQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dp
bmRSdWxlKHdpbmRSdWxlKQotewotfQotCi1DbGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0
OwotCiB2b2lkIENsaXBQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5jbGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAtNjUxLDE2
ICszMzMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ2xpcFBhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwVG9EcmF3aW5n
Q29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRz
KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQot
ICAgICwgbV9kcmF3aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQotewotfQot
Ci1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6On5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobV9k
ZXN0aW5hdGlvbiwgbV9jb2xvclNwYWNlLCBbJl0gKEdyYXBoaWNzQ29udGV4dCYgY2xpcHBpbmdD
b250ZXh0KSB7CkBAIC02NzMsMTMgKzM0NSwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBpdGVtKQog
ewogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3Itc3BhY2UiLCBpdGVtLmNvbG9yU3BhY2UoKSk7
Ci0gICAgdHMuZHVtcFByb3BlcnR5KCJkcmF3aW5nLWNvbW1hbmRzLWNvdW50IiwgaXRlbS5kcmF3
aW5nQ29tbWFuZHMoKS5pdGVtQ291bnQoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBEcmF3R2x5
cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBo
LCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5j
ZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAg
LCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0
cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBo
cykpCiAgICAgLCBtX2FkdmFuY2VzKFdURk1vdmUoYWR2YW5jZXMpKQogICAgICwgbV9sb2NhbEFu
Y2hvcihsb2NhbEFuY2hvcikKQEAgLTY4OSw4ICszNTksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5
cGhzLAogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAg
OiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2xv
Y2FsQW5jaG9yKGxvY2FsQW5jaG9yKQogICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01v
ZGUpCiB7CkBAIC03MDMsMTkgKzM3MiwxNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgRwogICAg
IGNvbXB1dGVCb3VuZHMoKTsKIH0KIAotRHJhd0dseXBoczo6fkRyYXdHbHlwaHMoKSA9IGRlZmF1
bHQ7Ci0KIGlubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVy
KCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBo
c1tpXSwgbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQp
OworICAgICAgICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLCAqbV9mb250LCBtX2FkdmFuY2VzW2ld
LCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQg
RHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAg
IGNvbnRleHQuZHJhd0dseXBocyhtX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9n
bHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOworICAgIGNvbnRl
eHQuZHJhd0dseXBocygqbV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhz
LnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3
R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKQEAgLTczNSwxNCArNDAyLDggQEAgdm9pZCBEcmF3R2x5
cGhzOjpjb21wdXRlQm91bmRzKCkKICAgICB9CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0dseXBoczo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9ib3VuZHM7Ci19Ci0KIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9y
ZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxB
bmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hv
clBvaW50KCkpOwpAQCAtNzUxLDE3ICs0MTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKLURyYXdJbWFnZTo6RHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1faW1hZ2VQ
YWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZTo6
fkRyYXdJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdl
LmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7
CkBAIC03NjksMjYgKzQxOSwxMiBAQCB2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFn
ZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0
ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0
aW5hdGlvbigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZEltYWdlOjpEcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UpCi0g
ICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAg
ICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBt
X3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0
KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1h
Z2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzk2LDcgKzQzMiw2IEBAIHZvaWQgRHJhd1RpbGVkSW1h
Z2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CkBAIC04MDUsMjAgKzQ0MCw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3VGlsZWRJbWFnZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZFNjYWxl
ZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUg
dlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAs
IG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwg
bV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9y
KQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1fdlJ1bGUodlJ1bGUpCi0gICAgLCBtX2lt
YWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGls
ZWRTY2FsZWRJbWFnZTo6fkRyYXdUaWxlZFNjYWxlZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lk
IERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3Rp
bmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUsIG1f
aW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtODI2LDI0ICs0NDcsMTIgQEAgdm9pZCBEcmF3VGls
ZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1Rp
bGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFn
ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwog
ICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIoUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXIpCi0gICAgLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0
UmVjdCkKLSAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMp
Ci17Ci19Ci0KLURyYXdJbWFnZUJ1ZmZlcjo6fkRyYXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
LQogdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7
CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtODUyLDcgKzQ2
MSw2IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0ltYWdlQnVmZmVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2Ut
aWRlbnRpZmllciIsIGl0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODYwLDgg
KzQ2OCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3SW1hZ2VCdWZmZXImIGl0ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05h
dGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAg
ICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBt
X2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAt
ODY5LDggKzQ3Niw2IEBAIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5h
dGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRp
dmVJbWFnZTo6fkRyYXdOYXRpdmVJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZl
SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJl
Y3QsIG1fc3JjUmVjdCwgbV9vcHRpb25zKTsKQEAgLTg3OCw3ICs0ODMsNiBAQCB2b2lkIERyYXdO
YXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2
ZUltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg4Niw4ICs0OTAsNyBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d05hdGl2ZUltYWdlJiBpdGVtKQogfQogCiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0
ZXJuKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBt
X3BhdHRlcm5UcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGls
ZVJlY3QpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RSZWN0KQpAQCAtODk3LDggKzUwMCw2IEBA
IERyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjCiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRl
cm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0
KCksIG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFz
ZSwgbV9zcGFjaW5nLCBtX29wdGlvbnMpOwpAQCAtOTA2LDcgKzUwNyw2IEBAIHZvaWQgRHJhd1Bh
dHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJwYXR0ZXJuLXRyYW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05
MTYsMTUgKzUxNiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdS
ZWN0OjpEcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChy
ZWN0KQotICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1E
cmF3UmVjdDo6fkRyYXdSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdCht
X3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKQEAgLTkzMiwyMSArNTIzLDExIEBAIHZvaWQgRHJh
d1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJl
dHVybiB0czsKIH0KIAotRHJhd0xpbmU6OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdMaW5lKQotICAgICwgbV9wb2ludDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQy
KQotewotfQotCi1EcmF3TGluZTo6fkRyYXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxG
bG9hdFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZHM7CkBAIC05NjEsMTUgKzU0MiwxMyBAQCB2b2lk
IERyYXdMaW5lOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsK
IH0KIAogRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZUxpbmVzKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0g
ICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlv
bihibG9ja0xvY2F0aW9uKQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAs
IG1fd2lkdGhzKHdpZHRocykKICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3OCw4
ICs1NTcsNiBAQCBEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JU
ZXh0Ojp+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JU
ZXh0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmlu
dGluZywgbV9kb3VibGVMaW5lcyk7CkBAIC05OTksNyArNTc2LDYgQEAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9j
YXRpb24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2Nh
bC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9p
bnQiLCBpdGVtLnBvaW50KCkpOwpAQCAtMTAxMSwxNSArNTg3LDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0
ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcikKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHls
ZSkKLXsKLX0KLQotRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMiwxOSArNTk5
LDEwIEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0
czsKIH0KIAotRHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChy
ZWN0KQotewotfQotCi1EcmF3RWxsaXBzZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2
b2lkIERyYXdFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5kcmF3RWxsaXBzZShtX3JlY3QpOwpAQCAtMTA1NiwxNCArNjE0LDYgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdF
bGxpcHNlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0g
ICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVs
dDsKLQogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogI2lmIFVTRShDRykKQEAgLTEwNzMsMjQgKzYyMywxMiBAQCB2b2lkIERyYXdQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBp
dGVtKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdQYXRoJikKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBG
SVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBm
b3IgcGF0aHMuCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0Zv
Y3VzUmluZ1BhdGg6On5EcmF3Rm9jdXNSaW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3
Rm9jdXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2Nv
bG9yKTsKQEAgLTExMDUsNyArNjQzLDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNS
aW5nUGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1
c1JpbmdQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3
aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVt
Lm9mZnNldCgpKTsKQEAgLTExMTQsMTYgKzY1MSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9
CiAKIERyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykK
LSAgICAsIG1fcmVjdHMocmVjdHMpCisgICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0
aCh3aWR0aCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7
CiB9CiAKLURyYXdGb2N1c1JpbmdSZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVs
dDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0
aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtMTE0MCw3ICs2NzQsNiBAQCBPcHRpb25hbDxGbG9h
dFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29ucwogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
cyIsIGl0ZW0ucmVjdHMoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lk
dGgoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAg
LTExNDgsMTQgKzY4MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi1GaWxsUmVjdDo6RmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0K
LUZpbGxSZWN0Ojp+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0
KG1fcmVjdCk7CkBAIC0xMTYzLDIwICs2ODgsMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdp
dGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3IpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZp
bGxSZWN0V2l0aENvbG9yOjp+RmlsbFJlY3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTg0LDIxICs2
OTksMTcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29s
b3IoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAg
LCBtX3JlY3QocmVjdCkKKyAgICA6IG1fcmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFk
aWVudCkKIHsKIH0KIAotRmlsbFJlY3RXaXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVu
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0
LCBtX2dyYWRpZW50LmdldCgpKTsKQEAgLTEyMDYsMjMgKzcxNywxMSBAQCB2b2lkIEZpbGxSZWN0
V2l0aEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVj
dFdpdGhHcmFkaWVudCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVt
cFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmls
bENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkK
LSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3Ap
Ci0gICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVj
dDo6fkZpbGxDb21wb3NpdGVkUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRl
ZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIz
MCw3ICs3MjksNiBAQCB2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBp
dGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIs
IGl0ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7CkBAIC0xMjM4LDE2ICs3MzYsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0
ZWRSZWN0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikK
LSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+
RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NSwyMyArNzQz
LDEyIEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJvdW5kZWRSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNv
bG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2Rl
KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3Qo
cmVjdCkKLSAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1f
Y29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29s
b3IpOwpAQCAtMTI3OSw3ICs3NTYsNiBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg4LDE0
ICs3NjQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCiAKLUZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQ
YXRoRGF0YSYgcGF0aERhdGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGlu
ZVBhdGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0
aDo6fkZpbGxJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxs
UGF0aChwYXRoKCkpOwpAQCAtMTMwMywyMSArNzcxLDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6Rmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxs
UGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkg
PSBkZWZhdWx0OwotCiB2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNSwxOSAr
Nzg0LDEwIEBAIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZpbGxQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkK
LSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkg
PSBkZWZhdWx0OwotCiB2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0
NSwxNCArNzk1LDEyIEBAIHZvaWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAg
ICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAg
ICwgbV9pbWFnZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0
dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEo
KS4KICAgICAsIG1faW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCkBAIC0xMzYxLDggKzgwOSw3IEBA
IFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFn
ZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1f
c3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9p
bWFnZURhdGEoV1RGTW92ZShpbWFnZURhdGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZv
cm1hdCkKQEAgLTEzNzAsOCArODE3LDYgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQog
Ci1QdXRJbWFnZURhdGE6On5QdXRJbWFnZURhdGEoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUHV0SW1h
Z2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBi
ZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAgLTEzODAsNyArODI1LDYgQEAgdm9pZCBQdXRJ
bWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwpAQCAt
MTM4OSwzMiArODMzLDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1S
ZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShNZWRpYVBs
YXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7
Ci19Ci0KLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRl
KE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShp
ZGVudGlmaWVyLCBkZXN0aW5hdGlvbikpOwotfQotCiBQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkK
LSAgICAsIG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQorICAgIDogbV9pZGVudGlm
aWVyKHBsYXllci5pZGVudGlmaWVyKCkpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQogewogfQogCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
Ci17Ci19Ci0KLVBhaW50RnJhbWVGb3JNZWRpYTo6flBhaW50RnJhbWVGb3JNZWRpYSgpID0gZGVm
YXVsdDsKLQogdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAt
MTQyMywyMCArODQ3LDEwIEBAIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUGFpbnRGcmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0aW5hdGlvbiIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQog
Ci1TdHJva2VSZWN0OjpTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBt
X3JlY3QocmVjdCkKLSAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tl
UmVjdDo6flN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ry
b2tlUmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAg
ICBGbG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OwpAQCAtMTQ1MSw3ICs4NjUsNiBAQCB2b2lkIFN0
cm9rZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3Qm
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRz
OwpAQCAtMTQ3NCwxOSArODg3LDEwIEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6
OlN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ry
b2tlRWxsaXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0
UmVjdD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ry
b2tlVGhpY2tuZXNzKCk7CkBAIC0xNTAzLDcgKzkwNyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9
CkBAIC0xNTI3LDM3ICs5MzAsMTIgQEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ry
b2tlSW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0
aERhdGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAg
ICAsIG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJv
a2VJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAKLVN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17
Ci19Ci0KLVN0cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6
OkNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6Q2xlYXJSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6
fkNsZWFyUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3Qp
OwpAQCAtMTU2NSwxOSArOTQzLDEwIEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJl
Y3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0
eShvcGFjaXR5KQotewotfQotCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7CkBAIC0xNTg1LDU3ICs5NTQsMjggQEAgdm9p
ZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFj
aXR5IiwgaXRlbS5vcGFjaXR5KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6
On5FbmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVu
Y3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ry
b2tlUGF0dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybikKLXsKLX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSBkZWZhdWx0OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJv
a2VQYXR0ZXJuKCk7CiB9CiAKLUFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQot
ICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxs
UGF0dGVybjo6fkFwcGx5RmlsbFBhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxs
UGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuYXBwbHlGaWxsUGF0dGVybigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3Rv
cihzY2FsZUZhY3RvcikKLXsKLX0KLQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NDcsNyArOTg3LDcg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlw
ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6
IHRzIDw8ICJzYXZlIjsgYnJlYWs7CkBAIC0xNzE4LDE3MiArMTA1OCwxNzAgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBl
KQogICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgSXRlbSYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdy
b3VwKHRzKTsKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEg
bWFjcm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRj
aGVzCiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5z
bGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
Q29uY2F0ZW5hdGVDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0
ZUNUTT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRT
dHJva2VUaGlja25lc3M+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VU
aGlja25lc3M+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRl
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dExpbmVEYXNoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFNldExpbmVKb2luPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xp
cD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENs
aXBPdXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
Q2xpcE91dFRvUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8Q2xpcFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3R2x5cGhzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1h
Z2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdUaWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJ
bWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05h
dGl2ZUltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0Pihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxE
cmF3TGluZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxs
aXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0
aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJl
Y3RXaXRoQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFk
aWVudD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsUm91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxF
bGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JN
ZWRpYT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFN0cm9rZVJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxTdHJva2VJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBh
dGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
U3Ryb2tlRWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxDbGVhclJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBs
eURldmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcj4oKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRo
IG5vIGFkZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4
IGYwMTViZTVlODY2MDZlY2MyZjZjZTg1N2MxZjcxMTY3Njk0ZmU4ZTMuLjJhNDYyNmU4ZWIzMTUw
ZDgxODU0Y2ZiMmFlMmFiNjNlMzJjMGE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaApAQCAtNTEsMzIwICs1MSwxNjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwog
CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIFNhdmUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IERyYXdpbmdJdGVtKEl0ZW1UeXBlKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlNhdmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0
ZW50KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9h
dFJlY3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAg
IGJvb2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4
dGVudCk7IH0KLQotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlv
biBpbiBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBv
ZiB0cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBw
dXRJbWFnZURhdGEpIG9wZXJhdGUgaW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlv
bnMsIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1
cm4gdmFsdWUgbmVlZHMgdG8gaW5jbHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGlu
ZywgZXRjLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJh
d2luZ0l0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hh
ZG93cyBhbmQgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFJlc3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflNhdmUoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8U2F2ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgU2F2ZSgpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYp
IGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2
ZT4+IFNhdmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7
Ci19Ci0KLWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflJlc3RvcmUoKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBSZXN0b3JlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShE
ZWNvZGVyJikKLXsKLSAgICByZXR1cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDog
cHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAg
ICAgOiBtX3goeCkKKyAgICAgICAgLCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+VHJhbnNsYXRlKCk7Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94
OyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERl
Y29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94
OwotICAgIGZsb2F0IG1feTsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZs
b2F0IG1feSB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5z
bGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3g7Ci0gICAgZW5jb2RlciA8PCBtX3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYg
KCF4KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+
IHk7Ci0gICAgZGVjb2RlciA+PiB5OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1j
bGFzcyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBh
bmdsZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+Um90YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYW5nbGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFJvdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUm90YXRlKGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiAKLSAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAg
ICBmbG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgUm90YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fYW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8Um90YXRlPj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxmbG9hdD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAg
ICBpZiAoIWFuZ2xlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IFJvdGF0ZTo6Y3JlYXRlKCphbmdsZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0g
eworY2xhc3MgU2NhbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTY2FsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOworCisgICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1f
c2l6ZShzaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6
ZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAg
ICBjb25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToK
ICAgICBGbG9hdFNpemUgbV9zaXplOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgU2NhbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9zaXplOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNj
YWxlPj4gU2NhbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZs
b2F0U2l6ZT4gc2NhbGU7Ci0gICAgZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUo
KnNjYWxlKTsKLX0KLQotY2xhc3MgU2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RN
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6U2V0Q1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFs
c2U7CisKKyAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAg
ICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU2V0Q1RNKG1hdHJpeCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflNldENUTSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRy
YW5zZm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFNldENUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8
PCBtX3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxTZXRDVE0+PiBTZXRDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3Jt
OwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIFNldENUTTo6Y3JlYXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRl
bmF0ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOworCisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENv
bmNhdGVuYXRlQ1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJh
bnNmb3JtOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVD
VE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90
cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29u
Y2F0ZW5hdGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+
PiB0cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsK
LX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0SW5saW5lRmlsbEdyYWRpZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGlu
ZUZpbGxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wg
aXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxH
cmFkaWVudCgpOwotCi0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmls
bEdyYWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVm
PFNldElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9w
Q291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAg
ICBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhv
ZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwot
ICAgIH0KLQorICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENv
bG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwg
Y29uc3QgR3JhZGllbnQ6OkRhdGEmLAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3Qg
Y29sb3JTdG9wQ291bnQpOwogCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRp
ZW50Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBS
ZWY8R3JhZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsK
ICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3Jh
ZGllbnQ6OkRhdGEgbV9kYXRhOwpAQCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAg
dWludDhfdCBtX2NvbG9yU3RvcENvdW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1
aW50OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29k
ZXIgPDwgbV9vZmZzZXRzW2ldOwotICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JB
IHsgbV9jb2xvcnNbaV0gfS52YWx1ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0g
ICAgZW5jb2RlciA8PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVy
IDw8IG1fc3ByZWFkTWV0aG9kOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9w
Q291bnQ7Ci0gICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3Rv
cENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0
b3BDb3VudCA+IG1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWlu
dDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7
IGkgPCAqY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zm
c2V0OwotICAgICAgICBkZWNvZGVyID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0g
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQz
Ml90PiBjb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xv
cikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ld
ID0gYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0
c1tpXSA9ICpvZmZzZXQ7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRh
dGE7Ci0gICAgZGVjb2RlciA+PiBkYXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uOwotICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uOwotICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+
IHNwcmVhZE1ldGhvZDsKLSAgICBkZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNw
cmVhZE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7
IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpn
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3Vu
dCkgfTsKLX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xh
c3MgU2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPFNldElubGluZUZpbGxDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZp
bGxDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xv
ciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9y
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3Io
U1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAg
IDogbV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xv
cjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9y
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFs
dWU7Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRl
KGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJ
bmxpbmVTdHJva2VDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNv
bG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0
cm9rZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOwogCi1wcml2YXRlOgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9j
b2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xv
ckRhdGE7Ci19OworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0
YSB9OyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNv
bG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBh
Y2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPFNldElubGluZVN0cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsK
LSAgICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCi0gICAgcmV0dXJuIFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQ
YWNrZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVp
bnQ4X3Q+IG1fY29sb3JEYXRhOworfTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVi
bGljIEl0ZW0geworY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRo
aWNrbmVzcyk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25l
c3MoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlNldFN0cm9rZVRoaWNrbmVzczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCi0gICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7
IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dFN0cm9rZVRoaWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRTdHJva2VUaGlja25lc3MpCi0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQor
ICAgICAgICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1f
dGhpY2tuZXNzIHsgMCB9OwotfTsKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVy
biBtX3RoaWNrbmVzczsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJv
a2VUaGlja25lc3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV90aGlja25lc3M7Ci19CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VU
aGlja25lc3M+PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPGZsb2F0PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25l
c3M7Ci0gICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0
dXJuIFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToK
KyAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVi
bGljIEl0ZW0geworY2xhc3MgU2V0U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJiBzdGF0ZUNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dFN0YXRlKHN0YXRlQ2hhbmdlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNP
UkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAg
ICAgCiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQogCkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KTsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dFN0YXRlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgbV9zdGF0ZTsKIH07CiAKQEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3M+IGNoYW5nZUZsYWdzOwogICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjgg
KzYyMCw1NSBAQCBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJu
IFNldFN0YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdl
IH07CiB9CiAKLWNsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5l
Q2FwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2Fw
IGxpbmVDYXApCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CisKKyAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAo
bGluZUNhcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAo
bGluZUNhcCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVD
YXAoKTsKLSAgICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVD
YXA7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PFNldExpbmVDYXA+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIFNldExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQog
Citwcml2YXRlOgogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2Rl
ciA+PiBsaW5lQ2FwOwotICAgIGlmICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1j
bGFzcyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5
JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRh
c2hBcnJheSkKKyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNl
dCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7
Ci0KICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFz
aEFycmF5OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9m
ZnNldDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8U2V0TGluZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2
YXRlOgogICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7
CiB9OwpAQCAtOTcwLDcgKzY4MSw3IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+
IGRhc2hBcnJheTsKQEAgLTk4MiwyMTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVE
YXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFz
aE9mZnNldCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRM
aW5lRGFzaDo6Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sg
KmRhc2hBcnJheSwgKmRhc2hPZmZzZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVi
bGljIEl0ZW0geworY2xhc3MgU2V0TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
U2V0TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKKyAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExp
bmVKb2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVK
b2luKExpbmVKb2luKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAg
ICAgTGluZUpvaW4gbV9saW5lSm9pbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIFNldExpbmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fbGluZUpvaW47Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4g
bGluZUpvaW47Ci0gICAgaWYgKCFsaW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNs
YXNzIFNldE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1p
dCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKwor
ICAgIFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGlt
aXQobWl0ZXJMaW1pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1p
dGVyTGltaXQobGltaXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5T
ZXRNaXRlckxpbWl0KCk7Ci0KICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4g
bV9taXRlckxpbWl0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNl
dE1pdGVyTGltaXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZs
b2F0PiBtaXRlckxpbWl0OwotICAgIGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1p
dGVyTGltaXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0
TWl0ZXJMaW1pdDo6Y3JlYXRlKCptaXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cg
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDbGVhclNoYWRvdz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsZWFyU2hhZG93KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5DbGVhclNoYWRvdygpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBDbGVhclNoYWRvdygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8Q2xlYXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJl
dHVybiBDbGVhclNoYWRvdzo6Y3JlYXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3
aW5nSXRlbT8KLWNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMg
ZHJhd2luZyBpdGVtPworY2xhc3MgQ2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlw
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
ICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
bGlwKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7
CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9y
ZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBk
ZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBP
dXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkNsaXBPdXQoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBDbGlwT3V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxDbGlwT3V0Pj4gQ2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
Q2xpcE91dDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1Ymxp
YyBJdGVtIHsKK2NsYXNzIENsaXBPdXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
Q2xpcE91dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQ
YXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0
VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgewor
ICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
IAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBP
dXRUb1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0
ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0x
MjAwLDM3ICs4MzQsNDcgQEAgdm9pZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxD
bGlwT3V0VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxDbGlwT3V0VG9QYXRoPiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsK
ICAgICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gQ2xpcE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgq
cGF0aCkgfX07CiB9CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xp
cFBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxl
IHdpbmRSdWxlKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1f
d2luZFJ1bGUod2luZFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
bGlwUGF0aChwYXRoLCB3aW5kUnVsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5D
bGlwUGF0aCgpOworICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1
bGUpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZFJ1bGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPENsaXBQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PENsaXBQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citw
cml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9Owog
CkBAIC0xMjQyLDcgKzg4Niw3IEBAIHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENs
aXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xp
cFBhdGg+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCwzNSBA
QCBPcHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgaWYgKCF3aW5kUnVsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBDbGlwUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVy
biB7eyBXVEZNb3ZlKCpwYXRoKSwgKndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3
aW5nQ29tbWFuZHMgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNw
bGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERp
c3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwg
bV9kcmF3aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9u
LCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7Ci0KICAgICBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAg
IENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQog
ICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBt
X2RyYXdpbmdDb21tYW5kczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBD
b2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwog
ICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0Nv
bW1hbmRzOwpAQCAtMTI4OCwxMSArOTM3LDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVz
dGluYXRpb247CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBt
X2RyYXdpbmdDb21tYW5kczsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29k
ZSBpbi1tZW1vcnkgZGlzcGxheSBsaXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzPiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0
aW5hdGlvbjsKQEAgLTEzMDQsMjcgKzk1MywxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwog
ICAgIGlmICghY29sb3JTcGFjZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBk
cmF3aW5nQ29tbWFuZHM7Ci0gICAgaWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVh
dGUoKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3Bs
YXkgbGlzdHMuCisgICAgRGlzcGxheUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7
eyAqZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07
CiB9CiAKLWNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJh
d0dseXBocyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2
YW5jZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAg
IHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNl
LCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd0dseXBocyhmb250LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMp
LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkRyYXdHbHlwaHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5NzEsMjEgQEAg
cHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMo
KSBjb25zdCB7IHJldHVybiBtX2dseXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRl
Y29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxH
bHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4m
JiwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAot
ICAgIHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9ib3VuZHM7IH0KIAorcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAg
ICBHbHlwaEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9u
dD4gbV9mb250OworICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVm
ZmVyR2x5cGgsIDEyOD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwg
MTI4PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArOTk2
LDcgQEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIERyYXdHbHlwaHM6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9mb250
OworICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9mb250KTsKICAgICBlbmNvZGVyIDw8IG1fZ2x5
cGhzOwogICAgIGVuY29kZXIgPDwgbV9hZHZhbmNlczsKICAgICBlbmNvZGVyIDw8IG1fbG9jYWxB
bmNob3I7CkBAIC0xMzY2LDcgKzEwMDQsNyBAQCB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPERyYXdHbHlwaHM+PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPERyYXdHbHlwaHM+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIE9wdGlvbmFsPFJlZjxGb250Pj4gZm9udDsKICAgICBkZWNvZGVyID4+IGZvbnQ7
CkBAIC0xMzk2LDMyICsxMDM0LDM1IEBAIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0ds
eXBoczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdHbHlwaHM6OmNy
ZWF0ZShmb250LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAq
bG9jYWxBbmNob3IsICpzbW9vdGhpbmdNb2RlKTsKKyAgICByZXR1cm4ge3sgZm9udC0+Z2V0KCks
IFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21v
b3RoaW5nTW9kZSB9fTsKIH0KLQotY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIERyYXdJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+
IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpEcmF3SW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIERyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAg
ICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJj
ZSkKKyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25z
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2Um
IGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdJ
bWFnZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJ
WE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVz
cy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rl
c3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE0NDEsNyArMTA4Miw3IEBA
IHZvaWQgRHJhd0ltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlPiBEcmF3SW1hZ2U6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBp
bWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTQ2MywxNyArMTEw
NCwxNCBAQCBPcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICBpZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdJbWFnZTo6Y3JlYXRlKCppbWFnZUhh
bmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25z
KTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291
cmNlLCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZEltYWdl
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdUaWxlZEltYWdlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZEltYWdlKCk7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFn
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3Qg
SW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0
UG9pbnQgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTE0ODIsMTYgKzEx
MjAsMjUgQEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGlsZVNpemU7IH0KICAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1f
c3BhY2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8RHJhd1RpbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIERyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24o
ZGVzdGluYXRpb24pCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGls
ZVNpemUodGlsZVNpemUpCisgICAgICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgICAgICwg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAg
fQogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZEltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IGRlY29kZShE
ZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8v
IEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9n
cmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBt
X2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CkBAIC0xNTE0LDcgKzExNjEs
NyBAQCB2b2lkIERyYXdUaWxlZEltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFn
ZT4+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERy
YXdUaWxlZEltYWdlPiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4g
aW1hZ2VIYW5kbGU7CkBAIC0xNTQ2LDMyICsxMTkzLDM5IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGls
ZWRJbWFnZT4+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBp
ZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdUaWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwg
KmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGlu
Z09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRp
b24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNpbmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9
fTsKIH0KIAotY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUg
dlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUg
dlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
KyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNjYWxl
RmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX2hSdWxlKGhSdWxlKQorICAgICAg
ICAsIG1fdlJ1bGUodlJ1bGUpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFn
ZVBhaW50aW5nT3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdUaWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVG
YWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOwotCiAgICAg
Y29uc3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAg
IEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0
UmVjdCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNj
YWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9p
bWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25z
IHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxv
YXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAtMTU5Niw3
ICsxMjUwLDcgQEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gRHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdl
SGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTYz
MSwzMyArMTI4NSwzNyBAQCBPcHRpb25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIGlmICghaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVz
dGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgKmltYWdl
UGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRl
c3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFn
ZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd0ltYWdlQnVmZmVyIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEcmF3SW1hZ2VCdWZmZXI+IGNyZWF0ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpEcmF3SW1hZ2VCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQorICAgICAgICA6IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkK
KyAgICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9u
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMp
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIo
KTsKLQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsg
fQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAg
ICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlv
blJlY3Q7IH0KICAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9vcHRpb25zOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
UmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJh
d0ltYWdlQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBG
bG9hdFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CiAgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKQEAg
LTE2NzQsNyArMTMzMiw3IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxEcmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlQnVmZmVyPiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcj4gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyOwpAQCAtMTY5NiwzMSArMTM1NCwyOSBAQCBPcHRpb25hbDxS
ZWY8RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICByZXR1cm4gRHJhd0ltYWdlQnVmZmVyOjpjcmVhdGUoKnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7
ICpyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9w
dGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBEcmF3TmF0aXZlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJh
d05hdGl2ZUltYWdlPiBjcmVhdGUoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFn
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7Ci0KLSAgICBGbG9hdFJlY3Qgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0
aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxv
YXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3JjUmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGVzdGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CiAg
ICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwpAQCAtMTczOSw3ICsxMzk1LDcgQEAgdm9p
ZCBEcmF3TmF0aXZlSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IERy
YXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TmF0
aXZlSW1hZ2U+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8TmF0aXZlSW1hZ2VQdHI+IGltYWdlOwogICAgIGRlY29kZXIgPj4gaW1hZ2U7
CkBAIC0xNzY2LDE3ICsxNDIyLDE2IEBAIE9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9u
cykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TmF0aXZl
SW1hZ2U6OmNyZWF0ZSgqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNS
ZWN0LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3Rp
bmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3UGF0dGVy
biA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0dGVybiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdl
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd1BhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3Jt
OyB9CkBAIC0xNzg1LDE2ICsxNDQwLDE1IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHBoYXNl
KCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsg
fQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdHRl
cm4+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+
IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0
aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAg
IEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IG1fdGls
ZVJlY3Q7CkBAIC0xODE5LDcgKzE0NzMsNyBAQCB2b2lkIERyYXdQYXR0ZXJuOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPERyYXdQYXR0ZXJuPiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRl
Y29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xODU2LDE4MiArMTUxMCwxMDAgQEAgT3B0aW9uYWw8
UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlv
biwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywgKm9wdGlv
bnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICp0
aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcsICpvcHRpb25zIH19
OwogfQogCi0vLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCi1jbGFzcyBCZWdpblRy
YW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lM
YXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJhd2luZyBpdGVtIGJlY2F1c2Ug
dGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlw
IGJvdW5kcy4KKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAg
ICAgICAgOiBtX29wYWNpdHkob3BhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIGZs
b2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9vcGFjaXR5OwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsKLSAgICBkZWNvZGVyID4+IG9wYWNpdHk7Ci0g
ICAgaWYgKCFvcGFjaXR5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0eSk7Ci19Ci0KLWNsYXNz
IEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEVuZFRy
YW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5j
eUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAot
ewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFy
ZW5jeUxheWVyPj4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJikKLXsKLSAg
ICByZXR1cm4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBEcmF3
UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6RHJhd1JlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOworCisgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVz
cyhib3JkZXJUaGlja25lc3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5EcmF3UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJl
dHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1JlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsK
ICAgICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIERyYXdSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fYm9yZGVyVGhpY2tuZXNzOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gRHJh
d1JlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IGJvcmRlclRoaWNrbmVz
czsKLSAgICBkZWNvZGVyID4+IGJvcmRlclRoaWNrbmVzczsKLSAgICBpZiAoIWJvcmRlclRoaWNr
bmVzcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3UmVj
dDo6Y3JlYXRlKCpyZWN0LCAqYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotY2xhc3MgRHJhd0xpbmUg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmUgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkRyYXdMaW5lOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBv
aW50MikKKyAgICAgICAgOiBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9p
bnQyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQx
LCBwb2ludDIpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGlu
ZSgpOwotCiAgICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsg
fQogICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5l
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7CiAgICAgRmxv
YXRQb2ludCBtX3BvaW50MjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERy
YXdMaW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcG9pbnQxOwotICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQxOwotICAgIGRl
Y29kZXIgPj4gcG9pbnQxOwotICAgIGlmICghcG9pbnQxKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQyOwotICAgIGRlY29kZXIg
Pj4gcG9pbnQyOwotICAgIGlmICghcG9pbnQyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIERyYXdMaW5lOjpjcmVhdGUoKnBvaW50MSwgKnBvaW50Mik7Ci19Ci0K
LWNsYXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJh
d0xpbmVzRm9yVGV4dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0
PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3Is
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKLSAgICB9CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZv
aWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1f
YmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQy
LDE2ICsxNjE0LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJu
IG1fZG91YmxlTGluZXM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVy
Jik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxv
YXRTaXplIG1fbG9jYWxBbmNob3I7CiAgICAgRGFzaEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3Miw3
ICsxNjQzLDcgQEAgdm9pZCBEcmF3TGluZXNGb3JUZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3
TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CitPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9u
OwogICAgIGRlY29kZXIgPj4gYmxvY2tMb2NhdGlvbjsKQEAgLTIxMDQsMTE5ICsxNjc1LDgzIEBA
IE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkb3VibGVMaW5lcykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJs
b2NrTG9jYXRpb24sICpsb2NhbEFuY2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5n
LCAqZG91YmxlTGluZXMpOworICAgIHJldHVybiB7eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5j
aG9yLCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0K
IAotY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUgc3R5bGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShz
dHlsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKTsKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIG1fc3R5bGU7Cit9OworCitjbGFzcyBEcmF3RWxsaXBzZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RWxsaXBz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAg
eworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToK
ICAgICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5
bGU7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU+IHN0eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7Ci0gICAgaWYg
KCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19Ci0KLWNsYXNz
IERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKwor
ICAgIERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkRyYXdFbGxpcHNlKCk7Ci0KLSAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRS
ZWN0IG1fcmVjdDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdFbGxp
cHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
cmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RWxs
aXBzZT4+IERyYXdFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVj
dCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RWxsaXBz
ZTo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgRHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoKQorICAgIERyYXdQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZN
b3ZlKHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgo
cGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXRoKCk7
Ci0KICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+
IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1Bh
dGgoY29uc3QgUGF0aCYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3UGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFz
dEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6Cisg
ICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjIyNiwy
NCArMTc2MSwzNyBAQCB2b2lkIERyYXdQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+
IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXRoPiBE
cmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4g
cGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQYXRoOjpjcmVhdGUoKnBhdGgpOwor
ICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmlu
Z1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
Rm9jdXNSaW5nUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwor
CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoUGF0aCYmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAg
ICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAg
ICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgRHJh
d0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aWR0
aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihj
b2xvcikKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsg
fQpAQCAtMjI1MSwxNiArMTc5OSwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29sb3ImIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3Rm9j
dXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29u
c3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIGZsb2F0IG1f
d2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTIyNzYs
NyArMTgyMyw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERy
YXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1BhdGg+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRl
Y29kZXIgPj4gcGF0aDsKQEAgLTIyOTgsMzMgKzE4NDUsMzEgQEAgT3B0aW9uYWw8UmVmPERyYXdG
b2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAq
Y29sb3IpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAq
Y29sb3IgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNS
aW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpOwogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMo
KSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3
Rm9jdXNSaW5nUmVjdHM+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERy
YXdGb2N1c1JpbmdSZWN0cz4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBWZWN0
b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9v
ZmZzZXQ7CkBAIC0yMzQxLDcgKzE4ODYsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gRHJh
d0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxWZWN0b3I8RmxvYXRSZWN0Pj4gcmVjdHM7CiAgICAgZGVjb2RlciA+PiByZWN0czsKQEAgLTIz
NjMsNzEgKzE5MDgsNTUgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdG
b2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5n
UmVjdHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1
cm4ge3sgKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmls
bFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVj
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdChyZWN0KSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEZpbGxSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9
Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgRmlsbFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPEZpbGxSZWN0Pj4gRmlsbFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYg
KCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxS
ZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZy
b20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAg
ICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhDb2xvcigpOwotCiAgICAgRmxvYXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCitw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CkBA
IC0yNDQwLDcgKzE5NjksNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xv
cjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBy
ZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0NTIsMjkgKzE5ODEsMjggQEAgT3B0aW9u
YWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9y
KTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RX
aXRoR3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdy
YWRpZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0
V2l0aEdyYWRpZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwog
Citwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGll
bnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0y
NDg3LDcgKzIwMTUsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVj
dFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjYs
MzcgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWdyYWRpZW50KQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50
OjpjcmVhdGUoKnJlY3QsIGdyYWRpZW50LT5nZXQoKSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBn
cmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgICAgICwgbV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVj
dCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xvcjsgfQogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxD
b21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJl
Y3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9v
cDsKQEAgLTI1NDAsNyArMjA3Myw3IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29t
cG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk1LDM1
IEBAIE9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3Jl
YXRlKCpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0
LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91
bmRlZFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisg
ICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVj
dCwgY29sb3IsIGJsZW5kTW9kZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkZpbGxSb3VuZGVkUmVjdCgpOwotCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91
bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYs
IEJsZW5kTW9kZSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5k
ZWRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5k
TW9kZTsKQEAgLTI2MDEsNyArMjEzOCw3IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJl
Y3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjYxOCwzMSArMjE1NSwzNSBAQCBP
cHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNv
bG9yLCAqYmxlbmRNb2RlKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9k
ZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3Vu
ZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhv
bGVSZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4g
ZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0Owog
ICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xv
cjsKQEAgLTI2NTcsNyArMjE5OCw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiBy
ZWN0OwpAQCAtMjY3NCw3NCArMjIxNSw2MyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+PiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAg
aWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAq
Y29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19
OwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQ
YXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZpbGxJbmxpbmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0
aERhdGEmIHBhdGhEYXRhKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBh
dGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRo
IHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0
aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25z
dCBJbmxpbmVQYXRoRGF0YSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91
bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZh
c3RCb3VuZGluZ1JlY3QoKTsgfQogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0
aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0
aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3Bh
dGhEYXRhOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJ
bmxpbmVQYXRoPj4gRmlsbElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBh
dGhEYXRhOwotICAgIGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4gRmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkp
OwotfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQ
YXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRo
JiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUGF0aCgpOworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0
IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBh
dGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmls
bFBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgp
OyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjc1MSw5MCArMjI4MSw2NSBAQCB2
b2lkIEZpbGxQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNv
ZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgcmV0dXJuIEZpbGxQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBX
VEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRmlsbEVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rmls
bEVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbEVsbGlwc2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAg
ICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1j
bGFzcyBQdXRJbWFnZURhdGEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VE
YXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRh
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VE
YXRhPiBjcmVhdGUoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdl
RGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RG
TW92ZShpbWFnZURhdGEpLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJ
bWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflB1dEltYWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVf
RVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBS
ZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRG
b3JtYXQ7IH0KLSAgICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VEYXRhOyB9CisgICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9p
bWFnZURhdGE7IH0KICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1Jl
Y3Q7IH0KICAgICBJbnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2lu
dDsgfQogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdEZvcm1hdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNP
UkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07
IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gRmxvYXRSZWN0KG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRh
PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0Owog
ICAgIEludFBvaW50IG1fZGVzdFBvaW50OwotICAgIFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRh
OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gbV9pbnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVz
dEZvcm1hdDsKIH07CkBAIC0yODQzLDE0ICsyMzQ4LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+CiB2b2lkIFB1dEltYWdlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7
CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURh
dGE7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8
PCBtX3NyY1JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8
IG1fZGVzdEZvcm1hdDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0
OwogICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSAr
MjM4MywxMDkgQEAgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1
dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0
Rm9ybWF0KTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEp
LCAqc3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50
RnJhbWVGb3JNZWRpYSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9y
TWVkaWEgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVh
dGUoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JN
ZWRpYTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5QYWludEZyYW1lRm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAog
ICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7
Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9y
TWVkaWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IHsgbV9kZXN0aW5hdGlvbiB9OyB9CiAKK3ByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlm
aWVyIG1faWRlbnRpZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0g
ICAgZW5jb2RlciA8PCBtX2Rlc3RpbmF0aW9uOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVu
dGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAo
IWlkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0
aW9uKTsKLX0KLQotY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBTdHJva2VSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkK
KyAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9rZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBtX3JlY3Q7CiAgICAgZmxvYXQgbV9saW5lV2lkdGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBTdHJva2VSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBT
dHJva2VSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7
Ci0gICAgZGVjb2RlciA+PiBsaW5lV2lkdGg7Ci0gICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpy
ZWN0LCAqbGluZVdpZHRoKTsKLX0KLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1j
bGFzcyBTdHJva2VJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9r
ZUlubGluZVBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4g
Y3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0
aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShw
YXRoRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGlu
ZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5T
dHJva2VJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRo
Ojpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGlu
ZVBhdGhEYXRhJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5s
aW5lUGF0aERhdGEgbV9wYXRoRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIFN0cm9rZUlubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhE
YXRhOwotICAgIGRlY29kZXIgPj4gcGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpj
cmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIFN0cm9rZVBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3Jl
YXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1f
cGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U3Ryb2tlUGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U3Ryb2tlUGF0aCgpOworICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAg
OiBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShE
ZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25z
dCBQYXRoJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0
aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgpAQCAtMzA1MCw3MjEgKzI0OTUsMTE1IEBAIHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U3Ryb2tlUGF0aD4+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8U3Ryb2tlUGF0aD4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAg
ICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IFN0cm9rZVBhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgp
IH19OwogfQogCi1jbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIFN0cm9rZUVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBz
ZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ry
b2tlRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
CiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlw
c2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVj
dCk7Ci19Ci0KLWNsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBD
bGVhclJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6Q2xlYXJSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVh
clJlY3QocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFy
UmVjdCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7
Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGVhclJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0K
ICNpZiBVU0UoQ0cpCi1jbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAg
IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlT
dHJva2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVy
biB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBh
dHRlcm4oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29u
c3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0
cm9rZVBhdHRlcm4+PiBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAg
ICByZXR1cm4gQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlG
aWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwot
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYp
IGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBw
bHlGaWxsUGF0dGVybj4+IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAg
ICByZXR1cm4gQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3Mg
QXBwbHlEZXZpY2VTY2FsZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKyAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxl
RmFjdG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlRmFjdG9yKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9z
Y2FsZUZhY3RvciB7IDEgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV9zY2FsZUZhY3RvcjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+
IHNjYWxlRmFjdG9yOwotICAgIGRlY29kZXIgPj4gc2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2Fs
ZUZhY3RvcikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBs
eURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoKnNjYWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fdHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBl
KSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxTYXZlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3Rv
cmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8VHJhbnNsYXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U2NhbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENU
TT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50Pigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldExpbmVDYXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURh
c2g+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PENsZWFyU2hhZG93PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXA6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PENsaXBPdXQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxD
bGlwT3V0VG9QYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5k
czoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxEcmF3SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1Rp
bGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1
ZmZlcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0
aXZlSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PERyYXdSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRl
eHQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Vs
bGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVj
dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxGaWxsUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENs
ZWFyUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQot
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
SXRlbVR5cGU+IGl0ZW1UeXBlOwotICAgIGRlY29kZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFp
dGVtVHlwZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0
ZW1UeXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFNhdmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gU2NhbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTZXRDVE06OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbENvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxp
bmVTdHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gU2V0U3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gU2V0TGluZUNhcDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
U2V0TGluZURhc2g6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNl
dExpbmVKb2luOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNl
dE1pdGVyTGltaXQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENs
ZWFyU2hhZG93OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdHbHlwaHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVk
SW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3
SW1hZ2VCdWZmZXI6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IERyYXdQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3UmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVz
Rm9yVGV4dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRHJhd1BhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENv
bG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdy
YWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRmlsbElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IEZpbGxFbGxpcHNlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gUGFpbnRGcmFtZUZvck1lZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tl
SW5saW5lUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFN0cm9rZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gU3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IENsZWFyUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBs
eVN0cm9rZVBhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotfQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRl
bUhhbmRsZSk7CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RS
QVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9i
amVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lU
RU0oRHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUp
IFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5E
KCkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldENUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShD
b25jYXRlbmF0ZUNUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
ZXRJbmxpbmVGaWxsR3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU2V0SW5saW5lRmlsbENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFNldElubGluZVN0cm9rZUNvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFNldFN0cm9rZVRoaWNrbmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldExpbmVKb2luKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQ2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2Up
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJl
Y3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRS
ZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUHV0SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0
cm9rZUlubGluZVBhdGgpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRv
dykKLQogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKaW5kZXggZDE0MmMzNzc5Y2I5OTNlNzM3MmJiOGI4ODg3ZmNjNGM3NTJm
ZTk4OS4uOTBlYmRlNTVmODk3OTZhODExODc5ZGIwNzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNv
cmRlcjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdl
RGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5kSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBkZXN0Rm9ybWF0KSk7CisgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3Rh
dGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBjaGFuZ2VGbGFncykKQEAgLTg3LDMxICs4NywzMSBAQCBzdGF0aWMgYm9vbCBjb250
YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIGNoYQogdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKIHsKICAgICBpZiAoIWNvbnRhaW5zT25seUlubGlu
ZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5
TGlzdC5hcHBlbmRJdGVtKFNldFN0YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VG
bGFncykpOworICAgICAgICBhcHBlbmQ8U2V0U3RhdGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdl
RmxhZ3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAg
IG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNo
YW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxT
ZXRJbmxpbmVTdHJva2VDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5l
KCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0
ZW0oU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcykpOworICAgICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlz
dC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5m
aWxsQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9y
PihjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2Up
KQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50
OjpjcmVhdGUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5k
PFNldElubGluZUZpbGxHcmFkaWVudD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwog
fQogCi12b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQordm9p
ZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKIHsKICAgICBp
ZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+d2lsbEFwcGVuZEl0ZW0oaXRlbSk7
CisgICAgICAgIG1fZGVsZWdhdGUtPndpbGxBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwogCi0gICAg
aWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpCisgICAgaWYgKGlzRHJhd2luZ0l0ZW0odHlwZSkKICNp
ZiBVU0UoQ0cpCi0gICAgICAgIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9r
ZVBhdHRlcm4gfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgor
ICAgICAgICB8fCB0eXBlID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4gfHwgdHlwZSA9
PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuCiAjZW5kaWYKICAgICApIHsKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlcyA9IGN1cnJlbnRTdGF0ZSgp
LnN0YXRlQ2hhbmdlOwpAQCAtMTI2LDEwICsxMjYsMTAgQEAgdm9pZCBSZWNvcmRlcjo6d2lsbEFw
cGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKICAgICB9CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmRp
ZEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKK3ZvaWQgUmVjb3JkZXI6OmRpZEFwcGVuZEl0
ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKIHsKICAgICBpZiAobV9kZWxlZ2F0ZSkKLSAgICAgICAg
bV9kZWxlZ2F0ZS0+ZGlkQXBwZW5kSXRlbShpdGVtKTsKKyAgICAgICAgbV9kZWxlZ2F0ZS0+ZGlk
QXBwZW5kSXRlbU9mVHlwZSh0eXBlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKQEAgLTEzOSwyNyArMTM5LDI3IEBAIHZvaWQgUmVjb3Jk
ZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhCiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBhcHBl
bmRJdGVtKENsZWFyU2hhZG93OjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPENsZWFyU2hhZG93Pigp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAg
ICBhcHBlbmRJdGVtKFNldExpbmVDYXA6OmNyZWF0ZShsaW5lQ2FwKSk7CisgICAgYXBwZW5kPFNl
dExpbmVDYXA+KGxpbmVDYXApOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBhcHBlbmRJ
dGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgYXBw
ZW5kPFNldExpbmVEYXNoPihkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKLSAgICBhcHBlbmRJdGVtKFNl
dExpbmVKb2luOjpjcmVhdGUobGluZUpvaW4pKTsKKyAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGxp
bmVKb2luKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxp
bWl0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGltaXQp
KTsKKyAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0x
NjksMTkgKzE2OSwxOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaQogCiBJbWFnZURyYXdSZXN1
bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQ
YWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgZGVzdGluYXRp
b24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdS
ZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGls
ZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3VGlsZWRJbWFn
ZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywg
aW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+KGltYWdl
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09w
dGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1h
Z2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6
VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5n
T3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdUaWxlZFNjYWxl
ZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3Rv
ciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3
VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZh
Y3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCkBAIC0xOTAsMjMgKzE5MCwyMyBAQCBib29s
IFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVm
ZmVyLCBjb25zdCBGbG9hdFJlYwogICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+
bG9ja1JlbW90ZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZl
ci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4o
aW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0
UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KSk7CisgICAgYXBwZW5kPERyYXdQYXR0ZXJuPihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnNhdmUoKQogewotICAgIGFwcGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIGFw
cGVuZDxTYXZlPigpOwogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3Qo
KS5jbG9uZUZvclNhdmUoKSk7CiB9CiAKQEAgLTIyMSwyNSArMjIxLDI1IEBAIHZvaWQgUmVjb3Jk
ZXI6OnJlc3RvcmUoKQogICAgIC8vIEhhdmUgdG8gYXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9S
ZXN0b3JlIHdoZW4gYSBkZXNjZW5kYW50IHN0YXRlIGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCiAg
ICAgY3VycmVudFN0YXRlKCkud2FzVXNlZEZvckRyYXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2lu
ZzsKIAotICAgIGFwcGVuZEl0ZW0oUmVzdG9yZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxSZXN0
b3JlPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
IHsKICAgICBjdXJyZW50U3RhdGUoKS50cmFuc2xhdGUoeCwgeSk7Ci0gICAgYXBwZW5kSXRlbShU
cmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7CisgICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKIHsKICAgICBj
dXJyZW50U3RhdGUoKS5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotICAgIGFwcGVuZEl0ZW0oUm90
YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlhbnMpKTsKKyAgICBhcHBlbmQ8Um90YXRlPihhbmdsZUlu
UmFkaWFucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5zY2FsZShzaXplKTsKLSAgICBhcHBlbmRJdGVtKFNj
YWxlOjpjcmVhdGUoc2l6ZSkpOworICAgIGFwcGVuZDxTY2FsZT4oc2l6ZSk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKQEAg
LTI0OCwxMyArMjQ4LDEzIEBAIHZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY3VycmVudFN0YXRl
KCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6
Y3JlYXRlKHRyYW5zZm9ybSkpOworICAgIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3Jt
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIGFw
cGVuZEl0ZW0oU2V0Q1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPFNldENUTT4o
dHJhbnNmb3JtKTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCkBAIC0yNjUsMTU4ICsyNjUsMTU4IEBAIEFm
ZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKQogCiB2b2lkIFJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0eSkpOworICAgIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5j
eUxheWVyPihvcGFjaXR5KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogewotICAgIGFwcGVuZEl0ZW0oRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpKTsK
KyAgICBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBi
b3JkZXJUaGlja25lc3MpKTsKKyAgICBhcHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNr
bmVzcyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRHJhd0xpbmU6OmNyZWF0ZShwb2ludDEsIHBvaW50MikpOworICAgIGFwcGVuZDxE
cmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQogewotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0
UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZUxpbmVzKSk7CisgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQo
KSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZUxpbmVzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewot
ICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6
Y3JlYXRlKHJlY3QsIHN0eWxlKSk7CisgICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0Vs
bGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVu
ZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ZvY3VzUmluZ1BhdGg6
OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9j
dXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKSk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmls
bFJlY3Q6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhD
b2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9y
PihyZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpOwor
ICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCiB2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZShy
ZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOworICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJl
Y3Q+KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAg
ICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihyZWN0LCBjb2xvciwgYmxlbmRNb2RlKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOjpjcmVhdGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOworICAgIGFw
cGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgp
KSB7Ci0gICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbElubGluZVBhdGg6OmNy
ZWF0ZShwYXRoLmlubGluZURhdGEoKSkpOworICAgICAgICBhcHBlbmQ8RmlsbElubGluZVBhdGg+
KHBhdGguaW5saW5lRGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAg
YXBwZW5kPEZpbGxQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQo
RmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9r
ZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5lV2lkdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4o
cmVjdCwgbGluZVdpZHRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRo
Lmhhc0lubGluZURhdGEoKSkgewotICAgICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0
cm9rZUlubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEoKSkpOworICAgICAgICBhcHBl
bmQ8U3Ryb2tlSW5saW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VQYXRo
OjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxTdHJva2VQYXRoPihwYXRoKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpOwor
ICAgIGFwcGVuZDxTdHJva2VFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KENsZWFyUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0Pihy
ZWN0KTsKIH0KIAogI2lmIFVTRShDRykKIHZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCiB7Ci0gICAgYXBwZW5kSXRlbShBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKKyAg
ICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBs
eUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0
ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oKTsKIH0KICNlbmRpZgogCiB2b2lk
IFJlY29yZGVyOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBjdXJyZW50U3Rh
dGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChyZWN0KTsKLSAgICBhcHBlbmRJdGVtKENsaXA6OmNy
ZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENsaXA+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBP
dXQ6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENsaXBPdXQ+KHJlY3QpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRlbShD
bGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihw
YXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgd2luZFJ1bGUpCiB7CiAgICAgY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNl
Y3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNy
ZWF0ZShwYXRoLCB3aW5kUnVsZSkpOworICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1
bGUpOwogfQogCiBJbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkKQEAgLTQ0NCwxOSArNDQ0
LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvCiAKICAgICBhdXRvIHJlY29yZGluZ0NvbnRl
eHQgPSBtYWtlVW5pcXVlPERyYXdpbmdDb250ZXh0PihkZXN0aW5hdGlvbi5zaXplKCksIGluaXRp
YWxDVE0pOwogICAgIGRyYXdpbmdGdW5jdGlvbihyZWNvcmRpbmdDb250ZXh0LT5jb250ZXh0KCkp
OwotICAgIGFwcGVuZEl0ZW0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoZGVzdGluYXRp
b24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRha2VEaXNwbGF5TGlzdCgpKSk7Cisg
ICAgYXBwZW5kPENsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2Us
IHJlY29yZGluZ0NvbnRleHQtPnRha2VEaXNwbGF5TGlzdCgpKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCiB7Ci0gICAgYXBwZW5kSXRlbShQYWludEZyYW1lRm9yTWVkaWE6OmNy
ZWF0ZShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7CisgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRp
YT4ocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7CiAgICAgLy8gRklYTUU6IHRo
aXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwgd2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIg
Y2FjaGVkIGV4dGVudHMuCiAgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJs
eSBvbj8KLSAgICBhcHBlbmRJdGVtKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZp
Y2VTY2FsZUZhY3RvcikpOworICAgIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihkZXZp
Y2VTY2FsZUZhY3Rvcik7CiB9CiAKIEZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2Rl
KQpAQCAtNDY1LDI5ICs0NjUsNiBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OgogICAgIHJldHVy
biByZWN0OwogfQogCi12b2lkIFJlY29yZGVyOjphcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJl
ZjxEcmF3aW5nSXRlbT4mJiBpdGVtKQotewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gaXRl
bS5nZXQoKTsKLSAgICBhcHBlbmRJdGVtKFdURk1vdmUoaXRlbSkpOwotICAgIHVwZGF0ZUl0ZW1F
eHRlbnQobmV3SXRlbSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+
JiYgaXRlbSkKLXsKLSAgICBJdGVtJiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICB3aWxsQXBw
ZW5kSXRlbShpdGVtLmdldCgpKTsKLSAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKGl0
ZW0pKTsKLSAgICBkaWRBcHBlbmRJdGVtKG5ld0l0ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjp1
cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25zdAotewotICAgIGlmIChPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgp
KSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91bmRzKHJlY3QudmFs
dWUoKSkpOwotICAgIGVsc2UgaWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0uZ2xv
YmFsQm91bmRzKCkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50KHJlY3QudmFsdWUoKSk7Ci19Ci0K
IC8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0RhdGEKIHN0YXRpYyBpbmxpbmUgZmxvYXQgc2hh
ZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIHsKQEAgLTUwNyw3ICs0ODQsNyBA
QCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIGNvbnN0CiAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwogICAgIENvbG9yIHNoYWRv
d0NvbG9yOwogICAgIGlmIChncmFwaGljc0NvbnRleHQoKS5nZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93
RXh0ZW50PSBib3VuZHM7CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7
CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRv
d0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwogICAg
ICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCmluZGV4IDMxYzhjODk2Mzc4YzBjYWZiYjIxMTI4OTU5N2NlZTI4YjRmYTc1
ZDIuLmZmZTE1OTFiYWZkNDlkYjMzZTk0M2U5OWMxYmExNGNkYmM0YzYwMjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4K
ICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKQEAgLTQ4LDggKzQ5LDYgQEAgc3RydWN0IEltYWdlUGFp
bnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5n
SXRlbTsKLQogY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVj
b3JkZXIpOwpAQCAtNjAsMTQgKzU5LDE0IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CiAKLSAgICBzaXpl
X3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsg
fQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXNFbXB0
eSgpOyB9CiAKICAgICBjbGFzcyBEZWxlZ2F0ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0
dWFsIH5EZWxlZ2F0ZSgpIHsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgbG9ja1JlbW90ZUltYWdl
QnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKSB7IH07Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKSB7IH07CisgICAgICAgIHZpcnR1
YWwgdm9pZCB3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSkgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKSB7IH0KICAgICB9OwogCiBwcml2
YXRlOgpAQCAtMTQ4LDE1ICsxNDcsMzQgQEAgcHJpdmF0ZToKIAogICAgIEZsb2F0UmVjdCByb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRp
bmdNb2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYXBwZW5kSXRlbShSZWY8SXRlbT4mJik7Ci0g
ICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7Ci0gICAgdm9pZCBkaWRBcHBlbmRJ
dGVtKGNvbnN0IEl0ZW0mKTsKLSAgICB2b2lkIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVm
PERyYXdpbmdJdGVtPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdz
PgorICAgIHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFw
cGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVu
ZDxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBkaWRBcHBlbmRJdGVt
T2ZUeXBlKFQ6Oml0ZW1UeXBlKTsKKworICAgICAgICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50
cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byBpdGVtID0gVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBp
ZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAg
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2Nh
bEJvdW5kcygqcmVjdCkpOworICAgICAgICBlbHNlIGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2Jh
bEJvdW5kcygpKQorICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVu
dCgqcmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJh
d2luZ0l0ZW1FeHRlbnQoV1RGOjpudWxsb3B0KTsKKyAgICB9CisKKyAgICB2b2lkIHdpbGxBcHBl
bmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKTsKKyAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRl
bVR5cGUpOwogCiAgICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7CiAKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVj
dCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0
OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29u
c3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5jcHAKaW5kZXggY2Y0ZTc0NmU4MmRmZDRiNzMzYzNiYmY3ZTgyNDVlNWFm
OTczNTQwZi4uZmViYmI5MmNmNTZlNjA2Y2RjOTMyNTFmNGNiZDA3YzMxOTU4MTBhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTIsMTMgKzUyLDkgQEAg
c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wKICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0
KSkKICAgICAgICAgcmVwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAKLSAg
ICBzaXplX3QgbnVtSXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBhdXRvJiBpdGVtID0g
bV9kaXNwbGF5TGlzdC5saXN0KClbaV0uZ2V0KCk7Ci0KLSAgICAgICAgaWYgKCFpbml0aWFsQ2xp
cC5pc1plcm8oKSAmJiBpczxEcmF3aW5nSXRlbT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGNvbnN0
IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRlbSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihpdGVtKTsK
LSAgICAgICAgICAgIGlmIChkcmF3aW5nSXRlbS5leHRlbnRLbm93bigpICYmICFkcmF3aW5nSXRl
bS5leHRlbnQoKS5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAgIGZvciAoYXV0byBbaXRl
bSwgZXh0ZW50XSA6IG1fZGlzcGxheUxpc3QpIHsKKyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5p
c1plcm8oKSAmJiBpdGVtLmlzRHJhd2luZ0l0ZW0oKSkgeworICAgICAgICAgICAgaWYgKGV4dGVu
dCAmJiAhZXh0ZW50LT5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgewogICAgICAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8PCBp
IDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KQEAgLTY4LDEwICs2NCwxMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxh
eWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgICAgICBp
ZiAoIW1fZGVsZWdhdGUgfHwgIW1fZGVsZWdhdGUtPmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAg
ICAgICAgICAgICBpdGVtLmFwcGx5KG1fY29udGV4dCk7CiAKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHRyYWNrUmVwbGF5TGlzdCkpCi0gICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmRJdGVtKGNv
bnN0X2Nhc3Q8SXRlbSY+KGl0ZW0pKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5
TGlzdCkpIHsKKyAgICAgICAgICAgIHJlcGxheUxpc3QtPmFwcGVuZChpdGVtKTsKKyAgICAgICAg
ICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgICAgICByZXBsYXlMaXN0
LT5hZGREcmF3aW5nSXRlbUV4dGVudChXVEZNb3ZlKGV4dGVudCkpOworICAgICAgICB9CiAgICAg
fQotICAgIAorCiAgICAgcmV0dXJuIHJlcGxheUxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZXBsYXllci5oCmluZGV4IDQwY2QwZmYwZDQxNjgwY2ZjNzNlNTA0ZGVjZmMzZGVm
ODc3NTMyMzMuLjA0NWNhY2NlOGEwMWM4ZDVkY2I2NThjNDBkNjNlOWEzNTg5YjViNjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaApAQCAtNTAsNyArNTAsNyBAQCBwdWJs
aWM6CiAgICAgY2xhc3MgRGVsZWdhdGUgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+
RGVsZWdhdGUoKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW0mLCBHcmFwaGlj
c0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHko
SXRlbUhhbmRsZSwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB9Owog
ICAgIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXggY2VkMWNhOTBmY2I4ZTJhODdmZTQzNGJiYjk3
N2FlYTUwNmU5YzY1Yi4uOTU3YTBkOWI3NDVmZDBiN2JjMTYyMjczN2NlYzg4ODhkNmFhNjlhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyLmgKQEAgLTI3LDE0ICsyNywxNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQogCisjaW5jbHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNz
IFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxl
Z2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0
ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXBsYXllcjo6RGVsZWdhdGUsIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
clJlYWRpbmdDbGllbnQgewogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2Vi
Q29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6Om1fYmFja2VuZDsKQEAgLTY0LDE2ICs2NywxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGRpc3Bs
YXlMaXN0Lml0ZW1Db3VudCgpKSB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIo
QmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QsIHRoaXMpOwog
ICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBi
b29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCisgICAgYm9vbCBhcHBseShXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpIHsKLSAgICAgICAgICAgIGF1
dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0
YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpOwog
ICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRGb3JtYXQoKSwg
cHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCks
IHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdEZvcm1h
dCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC04NCw2ICs4Nywx
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZC5h
cHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICBib29sIHJlcXVpcmVz
RGVjb2RpbmcoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICByZXR1cm4gIVdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0lubGlu
ZUl0ZW0odHlwZSk7CisgICAgfQorCisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3Qq
IGRhdGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBl
LCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBh
dGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ds
eXBoczoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdHbHlwaHM+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0lt
YWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZl
cj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4
dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpG
aWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNldExpbmVEYXNoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdGF0ZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBh
dHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5
TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
RWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VO
VVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1cm4ge3sg
aGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZDViYjBmMmQwM2U2
ZjM1YTk4ZTQxOWM0MTVkMDU2YjI5NGJlNTdiYS4uNDY1YjZmNTkwMzg5YzBmMDI4MWU0NWFkNDY0
MTYyZWNhMDA1ZjNmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEw
IEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3Vy
Y2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0
ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0
ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAoIWltYWdlQnVm
ZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxp
c3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBp
dGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlz
PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0
OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0
ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9j
ZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5ICsxMzksNDkgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
U2hvdWxkRmx1c2hDb250ZXh0IGZsdXNoQ29udGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlz
dChkaXNwbGF5TGlzdCk7CisgICAgVmVjdG9yPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllcj4gYnVmZmVySWRlbnRpZmllcnM7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9
IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlzdChbJl0gKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiB1aW50OF90KiB7CisgICAgICAgIGJ1ZmZl
cklkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGF1dG8gc2hhcmVk
TWVtb3J5ID0gc2hhcmVkSXRlbUJ1ZmZlcihpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0pOworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgewor
ICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOworICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRl
ZCgpKQorICAgICAgICBkaXNwbGF5TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChkb3duY2FzdDxB
Y2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlcikpOworICAgIGVsc2UKKyAg
ICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQoZG93bmNhc3Q8VW5hY2NlbGVy
YXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlcikpOworCisgICAgaW1hZ2VCdWZmZXIt
PmZsdXNoRGlzcGxheUxpc3QoKmRpc3BsYXlMaXN0KTsKKworICAgIGlmIChmbHVzaENvbnRleHQg
PT0gU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMpCisgICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENv
bnRleHQoKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6UmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFdURk1vdmUoYnVmZmVySWRlbnRpZmllcnMpLCBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5k
Q29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1v
dGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxp
c3QpOwotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIGZsdXNo
RGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOwotICAgIH0KKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Ok5vKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5kbGUsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlm
aWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Olllcyk7CisgICAg
Zmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBX
ZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFn
ZURhdGFSZWZlcmVuY2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjgsNiArMTk3LDE3
IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJl
bGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1v
cnk6OklQQ0hhbmRsZSYgaGFuZGxlKQoreworICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNo
YXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6
UmVhZE9ubHkpKQorICAgICAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBX
VEZNb3ZlKHNoYXJlZE1lbW9yeSkpOworfQorCitSZWZQdHI8U2hhcmVkTWVtb3J5PiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRJdGVtQnVmZmVyKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX3NoYXJlZEl0ZW1C
dWZmZXJzLmdldChpZGVudGlmaWVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAyODVl
MmY3NGI0ZDRmZDZlNmE4YzVlOTEwMjVhMWM5MjZmNWZmYjE1Li5mZGFhNjg2MzVhMjE3YTRmMmUz
Mjk0ZTAxYWEzZGZiNGYxNWI3NGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1
LDkgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3Vy
Y2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAt
NjMsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0OwogCiAgICAgLy8gUmVuZGVyaW5nIG9wZXJh
dGlvbnMuCi0gICAgYm9vbCBhcHBseVJlc291cmNlSXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgYXBwbHlN
ZWRpYUl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5UmVzb3VyY2VJdGVtKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29s
IGFwcGx5TWVkaWFJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAg
dm9pZCBpbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKQEAgLTczLDYg
Kzc1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwog
CisgICAgZW51bSBjbGFzcyBTaG91bGRGbHVzaENvbnRleHQgOiBib29sIHsgTm8sIFllcyB9Owor
ICAgIHZvaWQgYXBwbHlEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0
KTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRJdGVtQnVmZmVyKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcikgY29uc3Q7CisKICAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04MywxNCArODksMTYgQEAgcHJpdmF0ZToKIAogICAg
IC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlz
dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENv
bW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlz
dEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
KyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUm
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdl
RGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNo
YXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwg
Y29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2Fj
aGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7CisgICAgSGFzaE1hcDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGE4OGUwZmI2MjYy
NDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMuLmJiOTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEz
YmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmlu
CkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2Vz
IC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBDcmVh
dGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlM
aXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVu
dGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdChXZWJLaXQ6OlNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxp
c3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwg
V2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1hZ2VEYXRhKSBTeW5jaHJvbm91cwotICAg
IHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVk
SXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKQorICAgIFJlbGVh
c2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAppbmRleCA1Y2EyMTI3YTM0
NmNkMmE0NjljYTI5N2Y0YWIxMzkwMmY2YTA2ZjhhLi41MWI5ZmZkOTMwMzQwYmRmZjJmYjcxZDBl
NDZjYWNmNDA5MzQ2NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9E
ZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApA
QCAtNzQsNiArNzQsMTYgQEAgRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplLCB2b2lkICgqYnVmZmVyRGVhbGxvY2EKICAgICAgICAgcmV0dXJu
OwogfQogCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1
ZmZlclNpemUsIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpCisgICAgOiBtX2J1ZmZlciB7IGJ1
ZmZlciB9CisgICAgLCBtX2J1ZmZlclBvcyB7IG1fYnVmZmVyIH0KKyAgICAsIG1fYnVmZmVyRW5k
IHsgbV9idWZmZXIgKyBidWZmZXJTaXplIH0KKyAgICAsIG1fYnVmZmVyRGVhbGxvY2F0b3IoW10g
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIHsgfSkKK3sKKyAgICBpZiAocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG1fYnVmZmVyKSAlIGFsaWdub2YodWludDY0X3QpKQorICAgICAgICBtYXJr
SW52YWxpZCgpOworfQorCiBEZWNvZGVyOjp+RGVjb2RlcigpCiB7CiAgICAgQVNTRVJUKG1fYnVm
ZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAppbmRleCAzZGQyNDY5NmVmNmNh
N2RjOTdkMDEzYTBmZTg3NWQ3YmQ0N2RlMzBhLi5hMDNlYmIxYjI4MzdlZjZhMzg3M2ExMTVjNGRi
ZTBmYzU4Y2Q5OTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE3Myw3ICsxNzQsMjIgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gdHJ1ZTsKIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBPcHRpb25hbDxUPiBkZWNvZGVPYmplY3QoY29uc3Qg
dWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKKyAgICB7CisgICAgICAgIE9wdGlv
bmFsPFQ+IHJlc3VsdDsKKyAgICAgICAgRGVjb2RlciBkZWNvZGVyKGJ1ZmZlciwgYnVmZmVyU2l6
ZSwgQ29uc3RydWN0V2l0aG91dEhlYWRlcik7CisgICAgICAgIGlmICghZGVjb2Rlci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIGRlY29kZXIg
Pj4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKKyAg
ICBlbnVtIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcgeyBDb25zdHJ1Y3RXaXRob3V0SGVhZGVy
IH07CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXpl
LCBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKTsKKwogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3Np
dGlvbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIGJvb2wgYnVmZmVySXNMYXJnZUVu
b3VnaFRvQ29udGFpbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCmluZGV4IDg3ZmU5NTU1MmFjNjA1MmRiY2Q3NmU0
OTBkNGFiNmE2NjJlYzhhZDQuLmIwNTU2NjU3Y2IwNmYyNGE0Mzc5YmIzM2Q1ZDdmOTdlMTIwY2Q5
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCkBAIC03Miw2ICs3Miwx
NiBAQCBFbmNvZGVyOjpFbmNvZGVyKE1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEKQogICAgIGVuY29kZUhlYWRlcigpOwogfQogCitFbmNvZGVyOjpFbmNvZGVy
KENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpCisgICAgOiBtX21lc3NhZ2VOYW1lKHN0YXRpY19j
YXN0PE1lc3NhZ2VOYW1lPigwKSkKKyAgICAsIG1fZGVzdGluYXRpb25JRCgwKQorICAgICwgbV9i
dWZmZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBtX2J1ZmZlclBvaW50ZXIobV9pbmxpbmVCdWZm
ZXIpCisgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAgICAsIG1fYnVmZmVyQ2FwYWNpdHkoc2l6ZW9m
KG1faW5saW5lQnVmZmVyKSkKK3sKK30KKwogRW5jb2Rlcjo6fkVuY29kZXIoKQogewogICAgIGlm
IChtX2J1ZmZlciAhPSBtX2lubGluZUJ1ZmZlcikKQEAgLTIxOSw3ICsyMjksMTIgQEAgdm9pZCBF
bmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1lbnQmJiBhdHRhY2htZW50KQogCiBWZWN0b3I8
QXR0YWNobWVudD4gRW5jb2Rlcjo6cmVsZWFzZUF0dGFjaG1lbnRzKCkKIHsKLSAgICByZXR1cm4g
V1RGTW92ZShtX2F0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gc3RkOjpleGNoYW5nZShtX2F0dGFj
aG1lbnRzLCB7IH0pOworfQorCitib29sIEVuY29kZXI6Omhhc0F0dGFjaG1lbnRzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fYXR0YWNobWVudHMuaXNFbXB0eSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIu
aCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAppbmRleCAzNjc4ZDRmYWUy
OTE1MmQ5OTBmNGQzYTRmMGI3ZTBhZjZjZjc0NzJiLi5lZmM5NmQ3NDgyMjM5NTI5NWNiNTk5ZDZh
ZDZhOTU5NDEwOWZhYTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5n
UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTk5LDcgKzEwMCwyNCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0VuY29kZXIgPSB0cnVlOwogCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
ZW5jb2RlT2JqZWN0KGNvbnN0IFQmIG9iamVjdCkKKyAgICB7CisgICAgICAgIEVuY29kZXIgZW5j
b2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyKTsKKyAgICAgICAgZW5jb2RlciA8PCBvYmplY3Q7
CisKKyAgICAgICAgaWYgKGVuY29kZXIuaGFzQXR0YWNobWVudHMoKSkgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgfQorCiBwcml2YXRlOgor
ICAgIGVudW0gQ29uc3RydWN0V2l0aG91dEhlYWRlclRhZyB7IENvbnN0cnVjdFdpdGhvdXRIZWFk
ZXIgfTsKKyAgICBFbmNvZGVyKENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpOworCiAgICAgdWlu
dDhfdCogZ3JvdyhzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxs
cHRyPgpAQCAtMTA5LDYgKzEyNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIGVuY29kZShXVEY6OmVu
dW1Ub1VuZGVybHlpbmdUeXBlPEU+KGVudW1WYWx1ZSkpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
QXR0YWNobWVudHMoKSBjb25zdDsKKwogICAgIHZvaWQgZW5jb2RlSGVhZGVyKCk7CiAgICAgY29u
c3QgT3B0aW9uU2V0PE1lc3NhZ2VGbGFncz4mIG1lc3NhZ2VGbGFncygpIGNvbnN0OwogICAgIE9w
dGlvblNldDxNZXNzYWdlRmxhZ3M+JiBtZXNzYWdlRmxhZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDk5MTExYTc4OTBiNTc4NWY0ZTEwNjJkNjg4MjA2
NTQ3ZDUyNTAzYmQuLjlmZjk0OGU4YmUxYWFlZGQwOTNiNGJlMjk5MzQ2MGUyY2Q5OWIyNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjA4LDYgKzIwOCw3
IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAg
ICdTdHJpbmcnLAogICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJD
b3JlOjpEaWN0YXRpb25Db250ZXh0JywKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25G
bGFncycsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6RG9jdW1lbnRPcldvcmtlcklkZW50aWZpZXInLApAQCAtNTg1LDYgKzU4Niw3IEBA
IGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgICAgICAnSlNDOjpNZXNzYWdlU291cmNl
JzogWyc8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+J10sCiAgICAgICAgICdJbnNwZWN0
b3I6Okluc3BlY3RvclRhcmdldFR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJn
ZXQuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9u
VHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPiddLAor
ICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyJzogWyc8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6
IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAgICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYv
TW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAnU2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+
J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWFhNzRkNjE1YWJkM2Y0YTMxODYyNTJmZjBmZGNiODcxZTcwZmE1MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmZvckVhY2hJdGVtQnVmZmVyKFsm
XSAoYXV0byYgaGFuZGxlKSB7CisgICAgICAgIG1fYnVmZmVycy5hcHBlbmQoeyBoYW5kbGUuaWRl
bnRpZmllciwgaGFuZGxlLmNhcGFjaXR5IH0pOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3Jl
YXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYgYnVmZmVyUHJvdmlkZXIpIGNvbnN0
Cit7CisgICAgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGVzIGhhbmRsZXM7CisgICAgaGFu
ZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYnVmZmVycy5zaXplKCkpOworICAgIGZvciAo
YXV0byYgW2lkZW50aWZpZXIsIGNhcGFjaXR5XSA6IG1fYnVmZmVycykgeworICAgICAgICBhdXRv
KiBkYXRhID0gYnVmZmVyUHJvdmlkZXIoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghZGF0YSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGhhbmRsZXMudW5jaGVja2Vk
QXBwZW5kKHsgaWRlbnRpZmllciwgZGF0YSwgY2FwYWNpdHkgfSk7CisgICAgfQorICAgIHJldHVy
biBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4oV1RGTW92ZShoYW5kbGVzKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1No
YXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3NWUxMTRmMjNiYzhmYjhlNTdj
ZDkwZjY0YTMzYmUyNjJlMWYzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgeworcHVi
bGljOgorICAgIHVzaW5nIEl0ZW1CdWZmZXJQcm92aWRlciA9IEZ1bmN0aW9uPHVpbnQ4X3QqKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcik+OworCisgICAgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dD4gY3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYpIGNvbnN0OworCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZShWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllciwgc2l6ZV90Pj4mJiBidWZmZXJzKQorICAgICAgICA6IG1fYnVmZmVycyhX
VEZNb3ZlKGJ1ZmZlcnMpKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4gbV9idWZm
ZXJzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCBtX2J1ZmZlcnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+PiBidWZmZXJzOworICAg
IGRlY29kZXIgPj4gYnVmZmVyczsKKyAgICBpZiAoIWJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqYnVmZmVycykgfX07Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZTBhYjc0MzZiYWRjMzQ2Mzc0
OTQ2NjMzNDcxOWI0NWVkZmQyYjMwNi4uNTBlMTAyNGNhZTBkYzA0MGNhYzMyM2NiY2Q3ZWM1ZTE0
NzQ0OTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNzMsNiArMTczLDcgQEAgU2hhcmVkL1NlcnZpY2VX
b3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hh
cmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVuaWZ5CiBTaGFyZWQvU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwCitTaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCiBTaGFyZWQvU2hhcmVk
U3RyaW5nSGFzaFN0b3JlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRPbmx5
LmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ2NjVjY2I3YmM2YWY3YTdh
MDg5MTVmZGU0NjcyNmQ5NjdmNWZjYjQuLmM4MWU0OGFiMTg3NTg0N2MwZjU2ODA5YTU4MjcwZmFi
NzE1MTk4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTg3Myw2ICsxODczLDcgQEAKIAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2
IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVz
LmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0UwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTg0MjE1ODNB
MDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsgfTsKIAkJRjQ5NkE0MzExRjU4QTI3MjAwNEMx
NzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdE
cm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9OworCQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEg
LyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNENCMDlFNTIyNUQ1QTA5MDA4OTE0ODcgLyogV2Vi
c2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291
cmNlUG9saWN5LmggKi87IH07CiAJCUY0RDVGNTFEMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1RleHRJ
bnB1dExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjRENUY1MTkyMDYwODdBMDAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlz
dFZpZXdDb250cm9sbGVyLmggKi87IH07CiAJCUY0RDVGNTFGMjA2MDg3QTEwMDM4QkJBOCAvKiBX
S1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTFCMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNr
Ym9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTU0NTksNiArNTQ2MCw4IEBACiAJ
CUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEy
NzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIw
MDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZCQjI1
NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlBy
ZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlv
cy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNjYsNiArNjE2OSw4IEBACiAJCQkJMUE2NDIwRTMxMkRDRTJG
RjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5oICovLAogCQkJCTUxMjE3NDVFMTY0QzIwRTMw
MDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEyMTc0NUYxNjRDMjBF
MzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8sCisJCQkJRjRBNkQ2QkQyNTRDQTUy
MjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLywKKwkJCQlGNEE2RDZC
QjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLywKIAkJCQk4
MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywK
IAkJCQk4MzEzRjdFOTFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmgg
Ki8sCiAJCQkJODMxM0Y3RTgxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJs
ZS5jcHAgKi8sCkBAIC0xMTMxNSw2ICsxMTMyMCw3IEBACiAJCQkJNTEyMTc0NjExNjRDMjBFMzAw
MzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgzNDk0
MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVmZmVyQ29weS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAw
RkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2
NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggMjI2NGViY2I2
NjY0ZDcxZmZmMGE0MDA0MmZiMjU0MmNhODA2NmViNC4uYzJkZmQyNzc3ODEzN2QzODMxOTk5YmNi
NmM3ODJlZWZjZGU1NTMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI3LDYg
KzI3LDEwIEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJFbmNvZGVy
LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAi
U2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZWNvcmRl
ci5oPgpAQCAtMzYsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3Mg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKICAgICB1c2luZyBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4
dDsKQEAgLTc3LDYgKzgxLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwor
ICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZlckNsaWVu
dCh0aGlzKTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNr
c0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1BlbmRpbmdG
bHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVk
Rmx1c2hJZGVudGlmaWVyOyB9CkBAIC0xMDQsMTAgKzExMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IGNvbnN0X2Nhc3Q8UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5tX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0
KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkgewotICAgICAgICAgICAg
Y29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Jj4oKnRoaXMpLmZsdXNoRGlzcGxheUxp
c3QoZGlzcGxheUxpc3QpOworICAgICAgICBhdXRvJiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlzKTsKKyAgICAgICAgYXV0byYgZGlzcGxheUxp
c3QgPSBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7CisgICAgICAg
IGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtdXRhYmxlVGhpcy5m
bHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNs
ZWFyKCk7CisgICAgICAgICAgICBtdXRhYmxlVGhpcy5tX2l0ZW1Db3VudEluQ3VycmVudERpc3Bs
YXlMaXN0ID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGdldEltYWdlRGF0YSBpcyBzeW5j
aHJvbm91cywgd2hpY2ggbWVhbnMgd2UndmUgYWxyZWFkeSByZWNlaXZlZCB0aGUgQ29tbWl0SW1h
Z2VCdWZmZXJGbHVzaENvbnRleHQgbWVzc2FnZS4KQEAgLTE0MSwxOCArMTQ5LDE5IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9
IG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKTsKLSAgICAgICAgaWYgKCFkaXNwbGF5TGlz
dC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKGRpc3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShGbHVzaFJl
bW90ZUltYWdlQnVmZmVyU3RhcnQsIEZsdXNoUmVtb3RlSW1hZ2VCdWZmZXJFbmQsIDEpOwogICAg
ICAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS0+Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChkaXNwbGF5TGlzdCwgbV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOwogICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkudW5sb2NrUmVtb3RlUmVzb3VyY2VzRm9yUmVtb3Rl
Q2xpZW50KG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgZGlzcGxheUxp
c3QuY2xlYXIoKTsKKyAgICAgICAgbV9pdGVtQ291bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA9IDA7
CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IHx8ICFkaXNwbGF5TGlzdC5pdGVt
Q291bnQoKSkKKyAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCBk
aXNwbGF5TGlzdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJh
Y2VTY29wZSB0cmFjaW5nU2NvcGUoRmx1c2hSZW1vdGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJl
bW90ZUltYWdlQnVmZmVyRW5kKTsKQEAgLTE3MCwyMCArMTc5LDEzMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mKSBvdmVycmlkZQorICAgIHZvaWQgd2lsbEFw
cGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgY29uc3RleHByIHNpemVfdCBEaXNwbGF5TGlzdEJhdGNoU2l6ZSA9IDUx
MjsKICAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlM
aXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSA8IERpc3BsYXlMaXN0
QmF0Y2hTaXplKQorICAgICAgICBpZiAoKyttX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0
IDwgRGlzcGxheUxpc3RCYXRjaFNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFy
KCk7CisgICAgICAgIG1faXRlbUNvdW50SW5DdXJyZW50RGlzcGxheUxpc3QgPSAwOwogICAgIH0K
IAotICAgIHZvaWQgZGlkQXBwZW5kSXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bSYgaXRlbSkgb3ZlcnJpZGUKKyAgICBib29sIHJlcXVpcmVzRW5jb2RpbmcoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBp
ZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXIpCisgICAgICAgIHJldHVybiAhV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzSW5saW5l
SXRlbSh0eXBlKTsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAg
IHJldHVybiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZlcihj
YXBhY2l0eSk7CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2Rl
SXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xp
cFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcFBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5j
b2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29t
bWFuZHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29k
ZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0
dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVy
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9y
VGV4dD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpF
bmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihpdGVt
LmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXR0ZXJuPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVk
SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rl
cjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+
KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBh
dGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VE
YXRhOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGE+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihpdGVtLmdl
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
YXRlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBh
dGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlm
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xlYXJSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGlwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcE91dDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tl
VGhpY2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5k
aWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJl
Y3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xh
dGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZSB0eXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0g
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCiAgICAgICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CiAgICAgfQogCkBAIC0xOTEsNiArMzEwLDcgQEAg
cHJvdGVjdGVkOgogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVz
aElkZW50aWZpZXI7CiAgICAgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1f
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHsgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OworICAgIHNpemVfdCBtX2l0
ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0IHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggN2Ew
MTkzMGFiNjZjNDQ3MzA1MTA5MzAzNGQ0ZjM2ZDJjMGU2NDhhMi4uOWRmMTIxNDhiMGE0NWM5YTlh
ZjQ5ZDExZmM5YTMwYTE5ZWUxNmU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1v
cnkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MTE2LDEzICsxMTgsMTMgQEAgUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGkKIAogdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3QoY29uc3QgRGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KHsg
ZGlzcGxheUxpc3QgfSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CiB9CiAKIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIERpc3BsYXlMaXN0
Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIgPSBEaXNwbGF5TGlzdEZsdXNoSWRl
bnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGRpc3BsYXlMaXN0LCBzZW50Rmx1c2hJ
ZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KHsgZGlzcGxheUxpc3QgfSwgc2VudEZsdXNoSWRl
bnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CiAgICAgcmV0dXJuIHNlbnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1
NSw2ICsxNTcsMzEgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlz
cGxheUxpc3RXYXNDb21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8
VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0
Rmx1c2hEaXNwbGF5TGlzdChmbHVzaElkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFZlY3RvcjxEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMsIFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgZm9yIChh
dXRvIGlkZW50aWZpZXIgOiBpZGVudGlmaWVycykgeworICAgICAgICBpZiAoIW1fc2hhcmVkSXRl
bUJ1ZmZlcnMucmVtb3ZlKGlkZW50aWZpZXIpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0Rpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2Fw
YWNpdHkpCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1C
dWZmZXJTaXplID0gMSA8PCAxNjsKKworICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVt
b3J5OjphbGxvY2F0ZShzdGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFj
aXR5KSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBhdXRvIGlkZW50aWZpZXIgPSBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6Omdl
bmVyYXRlKCk7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOwor
ICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoaWRlbnRpZmllciwgeyBX
VEZNb3ZlKHNoYXJlZE1lbW9yeUhhbmRsZSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH0pLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChp
ZGVudGlmaWVyLCBzaGFyZWRNZW1vcnkuY29weVJlZigpKTsKKworICAgIHJldHVybiB7IGlkZW50
aWZpZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSwg
c2hhcmVkTWVtb3J5LT5zaXplKCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAppbmRleCA5OTU2NWI2ZjE2NmJiMmQ4MDYxNDE4NDk3MmUzNDM3MDZjZTdmZWM5Li4x
MzFlNDkxOTZkZDk1YTI3NWI4MTUxYjg1NmViYTUzYzY5N2Y0NzE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNz
YWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC02MCw2ICs2MSw3IEBAIHB1Ymxp
YzoKICAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CiAKICAgICBSZW1vdGVSZXNv
dXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9CisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOwogCiAgICAgLy8gSVBDOjpNZXNz
YWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKQEAgLTcyLDYgKzc0LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6
SVBDSGFuZGxlJik7CiAgICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5
TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVsZWFzZVJl
bW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKQEAg
LTg0LDcgKzg3LDkgQEAgcHJpdmF0ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4K
ICAgICB2b2lkIGltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAg
IHZvaWQgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRp
ZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJl
bGVhc2VTaGFyZWRJdGVtQnVmZmVycyhWZWN0b3I8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJJZGVudGlmaWVyPiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogCisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogICAgIFJlbW90
ZVJlc291cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB7ICp0aGlzIH07
CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRl
eCA4ZjI0NTg1NjM1ZjQ3MDgzZDFkYjI3YTViMzk2NjY1ZjMxNWViY2IwLi43OWE5ODY2NTA2ZDFj
MjVhMDk2YmE1MTQ2OTZiZDljOGJhOTIzMTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOCArMjMsOSBAQAogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IE5vdFJlZkNvdW50ZWQgewotICAgIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRl
ZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2Vu
ZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0g
ICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RG
bHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEltYWdlQnVmZmVy
QmFja2VuZFdhc0NyZWF0ZWQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3Jl
OjpJbnRTaXplIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpE
aXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAg
UmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFZlY3RvcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXI+IGlkZW50aWZpZXJzLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmlu
ZGV4IDNmNWE3M2JlYzNiZjI4NmU1Mjk4MWRlNDhiOTBjMzFkMDE5ZDhjM2QuLjBmOWE2ZThmMTll
MWQ5ODU2OWZlZDFiYmM0MWQwNzY4M2VhY2YxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
ICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggODFmZDhlNjQ0NDU2MzYzYTIwN2RiN2EwMmFhNWU3ODIzMGY3MWNi
MC4uMmJiMTEyMGZmMjRkYTk4M2NlODkzY2E3NGZlODAwYmY0MjRhMDllNiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIwIEBACisyMDIwLTEwLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5
IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIHNldmVyYWwgZXhpc3Rp
bmcgKG5vbi1HUFUtcHJvY2VzcykgZGlzcGxheSBsaXN0IHRlc3RzIHRvIGFjY291bnQgZm9yIGEg
c2xpZ2h0IHR3ZWFrIGluIHRoZSBmb3JtYXQgaW4KKyAgICAgICAgd2hpY2ggZGlzcGxheSBsaXN0
cyBhcmUgZHVtcGVkIGFzIHRleHQuIE1vcmUgc3BlY2lmaWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0
ZW50cyBhcmUgbm93IGR1bXBlZCBhZnRlciBlYWNoCisgICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0
aGVyIHRoYW4gYmVmb3JlLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9s
YXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3Jl
cGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMTAtMzAgIEthcmwg
UmFja2xlciAgPHJhY2tsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjkw
NzApOiBbIEJpZyBTdXIgXSBlZGl0aW5nL2lucHV0L3JldmVhbC1jYXJldC1vZi1tdWx0aWxpbmUt
aW5wdXQuaHRtbCBpcyBhIGNvbnN0YW50IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAz
Mjg4NDgwNjI3MDE5ZDU0MDJkOTQyNWZjNGExMzEzNzcwZWNiMzFhLi4xNDUxYjE5MjUzYzMyMzg5
MjhiYmQ5ZjVlNWRlYmI5Mjc0YzUwZDU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC02LDEwICs2
LDggQEAKICAgKGZpbGwtY29sb3IgI0M4MDAwMCkKICAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9y
bXMgMSkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKLSAg
KHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1
eDUwKSBleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKIChzZXQtaW5saW5lLWZpbGwtY29s
b3IKICAgKGNvbG9yICMwMDAwQzg4MCkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQgYXQgKDMwLDEy
MCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3Qg
YXQgKDMwLDMwKSBzaXplIDU1eDUwKSBleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMt
c2hhZG93LWV4cGVjdGVkLnR4dAppbmRleCBlOWY1NDA0MTdiZDZlNWRjNzc4NjE1ZTVmMzc5NDk3
NmU0MTk1ZjhkLi41OTBiOTNmNWM4OTJjYWUzN2Y0MjQ2MDlhOGZlNDgwMzNlNjY4MzY4IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy1zaGFkb3ctZXhwZWN0ZWQudHh0CkBAIC05LDkgKzksOCBAQAogICAoc2hhZG93LW9mZnNldCB3
aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZp
bGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAg
IChyZWN0IGF0ICg1MCw1MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNv
bXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisg
IChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJl
c3RvcmUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCBlMDQ1MmExNzNhMWFm
ZTIzN2Y3MjhkMzBiYzI3ZWM2MGVlYzk2MjNkLi4yOGNjZjRjMDE4NTlkZTE5MGIwYTlhMjdmYTJm
ZWMwMDYzZWQ4ZTFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50
LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTExLDEx
ICsxMSwxMCBAQAogICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFk
b3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRl
bnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCwwKSBz
aXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFs
KSBleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCiAo
c2V0LWN0bQogICAoc2V0LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwy
Mi4wMCl9KSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNw
YXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlz
cGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGJkODc2ZGY0MDNhNGFkZDBiYzM5MWY3YzYyYWMy
YjRjM2JjZjdkYTAuLmJjMTdiNTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0
LWV4cGVjdGVkLnR4dApAQCAtMywyOSArMywyNCBAQAogICAoeCAwLjAwKQogICAoeSAwLjAwKSkK
IChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkK
ICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogICAoY29sb3IgIzAwODAwMCkKICAgKGNv
bXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisg
IChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQt
c3RhdGUKICAgKGNoYW5nZS1mbGFncyAzMjk2MCkKICAgKGZpbGwtY29sb3IgIzAwMDBGRikKICAg
KHN0cm9rZS1zdHlsZSAwKQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKLSAg
KGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgy
KQotICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkg
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAs
MTAyKSBzaXplIDEwNHgyKQogICAocmVjdCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCi0gIChib3Jk
ZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQg
KDAsMTAyKSBzaXplIDEwNHgyKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUg
MngxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNz
IDEuMDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAy
eDEwNCkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChy
ZWN0IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisg
IChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1y
ZWN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1j
bGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CmluZGV4IGFkZGQyY2E0MjUwYzI0YTBjOWVlMjI1NWQ0
Mjc1YTc2ZjYwNDNlZWQuLmJiNTkzZDIwZjZkYTY0ODYyOTJkMzZjMDIyMGUyYTlkODcyZjgyYjkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVk
LXJlY3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXkt
c2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0CkBAIC0zLDExICszLDEwIEBAIHJlY29yZGVk
OgogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0
ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAw
eDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1v
dmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVu
dCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKIAogcmVwbGF5ZWQ6CiAoCg==
</data>
<flag name="commit-queue"
          id="429523"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412991</attachid>
            <date>2020-11-02 17:10:53 -0800</date>
            <delta_ts>2020-11-02 18:04:33 -0800</delta_ts>
            <desc>More WIP</desc>
            <filename>bug-218406-20201102171052.patch</filename>
            <type>text/plain</type>
            <size>396921</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI3NWNmNjJmYzhiYmE5
NzMxMDQxZDU3ZTcwOTU0MTVhYWZiY2YwMy4uMGJlMDg5ODc4NDgwMTg3YTBiMjBlODRjNzA0YWYz
MWExYTY2MDhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyMCBAQAorMjAyMC0xMS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBG
b3JGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHVtcERyYXdpbmdJdGVt
RXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNU
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRl
bUV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojph
cHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVhckN1cnJlbnRJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0
b3I6Om1vdmVUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnRyYWNrc0RyYXdpbmdJdGVtRXh0
ZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjp+aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVtQXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjppdGVtQ291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6bGlzdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnRha2VEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzRHJhd2lu
Z0l0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
Okl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
On5JdGVtQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX2FsbG9jYXRl
ZEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fcmVhZE9ubHlCdWZm
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3dyaXRhYmxlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1CdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmZvckVhY2hJ
dGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Om9wZXJhdG9yIGJvb2wg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Om9wZXJh
dG9yISBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
aXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Omdl
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQ6On5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQ6On5JdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6c2l6ZUlu
Qnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpy
ZWFkT25seUJ1ZmZlcnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OmlzSW5saW5lSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OkRyYXdHbHlwaHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZmZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFwcGx5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OkRyYXdO
YXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46
OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNG
b3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OlB1dElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1l
ZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06Okl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW06OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlc3RvcmU6OlJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5l
Q2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OkNsZWFyU2hhZG93KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlw
T3V0VG9QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
UGF0aDo6Q2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
OjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZm
ZXI6OkRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OkZpbGxSZWN0V2l0aENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6
RmlsbFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxF
bGxpcHNlOjpGaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBh
dGg6OlN0cm9rZUlubGluZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpF
bmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6QXBwbHlTdHJv
a2VQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxl
RmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNh
dmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
YXZlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlc3RvcmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXN0b3JlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2NhbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldENUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmls
bEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6U2V0SW5saW5lRmls
bENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29s
b3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OlNldElubGluZVN0
cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dElubGluZVN0cm9rZUNvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpTZXRT
dHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6dGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNh
cDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVy
TGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRl
ckxpbWl0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyU2hhZG93Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcE91dDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xp
cE91dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Q2xpcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBUb0RyYXdpbmdDb21tYW5kczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNj
YWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2VCdWZmZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6c291cmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRl
c3RpbmF0aW9uUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d05hdGl2ZUltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNl
OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBz
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0
czo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OkZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoQ29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
b3VuZGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpG
aWxsSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGlu
ZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbElubGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQ
YXRoOjpTdHJva2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VJbmxpbmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9r
ZVBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdJdGVtOjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmVu
Y29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldENUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZp
bGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxD
b2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNh
cDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05h
dGl2ZUltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0VsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bEVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbEVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZUlubGluZVBhdGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
ZWFyUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkFwcGx5RmlsbFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBl
bmRTdGF0ZUNoYW5nZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xp
cFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkQXBwZW5k
SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkRlbGVnYXRlOjp3aWxsQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlOjpkaWRBcHBlbmRJdGVtT2ZUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6aXRlbUNvdW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OndpbGxB
cHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6RGVsZWdhdGU6OmRpZEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6cmVwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZTo6YXBwbHkpOgor
CiAyMDIwLTEwLTI5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0NvY29hXSBbR1BVIFByb2Nlc3NdIFBlcmZvcm0gaW1hZ2UgZGVjb2Rpbmcgb2Yg
Y29sb3IgZm9udHMgaW4gdGhlIFdlYiBQcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkxNTdiNzA4NWU0MmE4
Yzk0N2Q1YTVlNmE5OWNhZDI2ZjMzMDkzYTkuLmViN2JlMWQ0YmJkMjg0NTFlMTcyZmVkZTQ1MWI1
ZWQ3YzU3NzVkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMjAtMTEtMDIgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbmN1cnJlbnQg
ZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbnRvIHNo
YXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkanVzdCBmb3IgY2hhbmdlcyB0byBkaXNwbGF5IGxpc3RzIGFuZCBkaXNwbGF5IGxpc3Qg
aXRlbXMgaW4gV2ViQ29yZSAoc2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZQor
ICAgICAgICBpbmZvcm1hdGlvbikuIEluIHBhcnRpY3VsYXIsIHdlIGltcGxlbWVudCB0aGUgcmVh
ZGluZyBhbmQgd3JpdGluZyBjbGllbnQgaG9va3MgY29uc3VsdGVkIGJ5IEl0ZW1CdWZmZXIsIGFu
ZCB3ZQorICAgICAgICBhbHNvIGFkZCBhIHRlbXBvcmFyeSBtZWNoYW5pc20gdGhhdCBhbGxvd3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IChpbiB0aGUgd2ViIHByb2Nlc3MpIHRvIHNlbmQg
ZGlzcGxheSBsaXN0CisgICAgICAgIGl0ZW0gZGF0YSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgdG8g
dGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgKGluIHRoZSBHUFUgcHJvY2VzcykuIFRoaXMgdGVt
cG9yYXJ5IG1lY2hhbmlzbQorICAgICAgICBkb2VzIG5vdCBhdHRlbXB0IHRvIG1ha2UgYW55IHJl
YWRpbmcgb3Igd3JpdGluZyBpbiBzaGFyZWQgbWVtb3J5IGNvbmN1cnJlbnQgYmV0d2VlbiB0aGUg
R1BVIGFuZCB3ZWIgcHJvY2Vzc2VzLAorICAgICAgICBhbmQgZXhpc3RzIG9ubHkgdG8gbWFrZSBz
dXJlIHRoYXQgcmVuZGVyaW5nIHdpdGggdGhlIEdQVSBwcm9jZXNzIHN0aWxsIHdvcmtzIHVzaW5n
IHRoZXNlIG5ldyBkaXNwbGF5IGxpc3QgaXRlbXMuCisKKyAgICAgICAgSW4gdGhlIG5leHQgcGF0
Y2gsIEkgd2lsbCBhZGQgYSBzaW1wbGUgY29uY3VycmVudCByZWFkZXIvd3JpdGVyIG1vZGVsIGZv
ciBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyBiZXR3ZWVuIHRoZQorICAgICAgICB3ZWIgYW5kIEdQ
VSBwcm9jZXNzZXMsIGFuZCAoaW4gZG9pbmcgc28pIHJldmVydCBtb3N0IG9mIHRoZSBjaGFuZ2Vz
IGluIGBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kYCBhbmQKKyAgICAgICAgYFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eWAgYmVsb3cuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBt
b3JlIGRldGFpbC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENy
ZWF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlS
ZXNvdXJjZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjph
cHBseU1lZGlhSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkSXRlbUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAg
KElQQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChJUEM6Om1fYnVmZmVyRGVhbGxvY2F0
b3IpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRl
Y29kZXI6OmRlY29kZU9iamVjdCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3Bw
OgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKElQQzo6RW5jb2Rl
cjo6cmVsZWFzZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6aGFzQXR0YWNo
bWVudHMgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNwbGF5TGlzdCBjb25zdCk6CisgICAg
ICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmRlY29kZSk6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4dEFuZENvbW1pdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpyZWxlYXNlU2hhcmVkSXRlbUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgorCiAyMDIwLTEwLTMwICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyIHRvIFdlYkNvcmUsIGNsZWFuIHVwIHVzZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDQwNmUwNGU5ZjU1MDEwNTBlOGJhN2VmMTFhYTQxYjBiYmJiZWMwYzMuLjVlMmI0
ZDNlNDZiYmY1NmIwZDdlMTI2ODAyYTM5ZjYyZjhhN2Y0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTI0MSw2ICsxMjQxLDggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYzNzcxYjA0MDU4
N2E5NDg1ZjQ0NjA4ZjhjMTI4M2VmNzZjNjE1ZjkuLjQ5MTUwZDY3NTU0OTkxMjk4MzFkYTRlOTNj
YzY3NmY2OGMzOTc0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYxLDYgKzE5NjEsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY2YWY1MGQyMWVjMjc3NjQ2ZGMx
NDdlNDg2ODY1MmJhYzI1MDY3MmUuLjJiMDZhMzQ0OGQ5ZTkyNTAwZTZjYjcyNGNhNGIyOTFhYmE3
ZGEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTUxNjAsNiArNTE2MCw3IEBACiAJCUYzQUJGRTBDMTMwRTlEQTAwMEU3RjdE
MSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3RDEgLyogSW5zdHJ1bWVudGlu
Z0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhh
bmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYz
RDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovOyB9OwogCQlGNDAz
RTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIzNjNCNThDMDAwNDQ1NTAgLyog
RW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyMkI4
QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MjkyNjE4MjUyNjRENDQw
MDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRp
YVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2Fy
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQzM0U5
MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDQwRTc3QTIzM0Q5NEQ3MDA2M0Y5
QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDQwRTc2RjIzM0Q5NEQzMDA2M0Y5QUIgLyogTmF2aWdhdG9yQ2xp
cGJvYXJkLmggKi87IH07CkBAIC01MTg0LDYgKzUxODUsNyBAQAogCQlGNDhEMkE3RTIxNTcxODI2
MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2NzUyQiAvKiBGb250QXR0cmli
dXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFBMzIxNTk3NDBEMDBDNjc1MkIg
LyogQ29sb3JDb2NvYS5oICovOyB9OwogCQlGNDk3ODY4ODFGRjQ1RkE1MDBFMDYwQUIgLyogUGFz
dGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjRBNkQ2
QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkEzMjU0QzUxMkMwMEI2NUZB
QSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAwOUUxRTdEIC8qIERPTVBhc3Rl
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEJGQjk4NTFFMURERjlCMDA4
NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURERjJCMDA3NkI3RUEgLyogRHVt
cEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwogCQlGNEJGQjk4NjFFMURERjlCMDA4NjJDMjQgLyog
RWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4NDFFMURERjJCMDA3NkI3RUEgLyogRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzICovOyB9OwpAQCAtMTYzMTEsNiArMTYzMTMsOCBAQAogCQlGM0Q0NjE0NzExNjFE
NTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODYy
MzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
bnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDIyQjhCNTI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
NDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250
QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udEF0dHJp
YnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQzM0U5
MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTYzNjQsNiArMTYzNjgsOCBAQAogCQlGNDhEMkFBNDIxNTk3NDBEMDBDNjc1
MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbG9yQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3MUZGNDVGQTUwMEUwNjBBQiAv
KiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEl0ZW1JbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5OEU0MjFERUU2QzEwMDlBRTU1
RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRBY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEgLyog
RGlzcGxheUxpc3RJdGVtVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEl0ZW1UeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZB
QSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlM
aXN0SXRlbVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEI0MjJDMjIy
MEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUGFz
dGVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDNUYyMDUyNDc5RTdF
RTAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBi
b2FyZEltYWdlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QzVGMjA4
MjQ3OUU5QzgwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzYxOCw4ICsxNzYyNCwxMiBAQAogCQkJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5
MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3MkVBMDlGOTIzRkND
QzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTcyRUEw
OUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCisJCQkJ
RjQyMkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8s
CisJCQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5o
ICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNw
cCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5o
ICovLAorCQkJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcCAqLywKKwkJCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEgLyogRGlzcGxheUxpc3RJdGVt
VHlwZS5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCAqLywKIAkJCQkwRkU1RkJDRjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3RSZWNvcmRlci5oICovLAogCQkJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlcGxheWVyLmNwcCAqLywKQEAgLTMxNDQyLDcgKzMxNDUyLDkgQEAKIAkJCQkxQ0FGNTZE
QjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NUFEMDkzRTI0MDg5NjM1MDBERTRE
MkYgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQyMkI4
QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUY0QTZENkE0MjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlz
dEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2YTgwYjg0NjAwZTBhMmJiMDU1
NTIzOTU1ZmU5Y2M2MGE5YWVjM2NiLi5mNDdkYmQyZDlmOGJlMmU4NTU1YWI2ZDk2NzhhOTVlNjY1
ZGEyODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjAyMSw3ICsyMDIxLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpCiAgICAgQVNTRVJUKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiAKICAgICBhdXRv
JiBkaXNwbGF5TGlzdCA9IG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlzcGxheUxpc3QoKTsKLSAgICBp
ZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICBpZiAoIWRpc3BsYXlMaXN0LmlzRW1w
dHkoKSkgewogICAgICAgICBEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoKmNhbnZhc0Jh
c2UoKS5kcmF3aW5nQ29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CiAgICAgICAgIHJlcGxheWVyLnJl
cGxheSh7IEZsb2F0UG9pbnQ6Onplcm8oKSwgY2FudmFzQmFzZSgpLnNpemUoKSB9KTsKICAgICAg
ICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMGQxY2E5MmQ2MDQ1ZWIzN2E3OGQzZTE4
OTdjMjZmNDJiOWM3NmYzYS4uNTlkMzIzMGUwZThmNDM2MGQ3M2ViMzM2ODI1MzRhM2U0OTBhNjgz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250
ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9w
ZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIGVudW0gQ2hhbmdlIDogdWlu
dDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBmZmQ5ZDZkZGZiNjBhYzFh
MDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi5lYTBhZjk4NmVmZDUyMDhhNDkzN2VlYmI0NWVhMmQ5
MzNmMzljZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKIAorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcCgpIGNvbnN0
CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYgb3Ro
ZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0cikp
CisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJhd2lu
Z0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoSXRl
bUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVtcyhtYWtlVW5pcXVlPEl0ZW1C
dWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlMaXN0KCkgPSBkZWZhdWx0Owor
CitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShEaXNwbGF5TGlzdCYmIG90aGVy
KQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIp
OworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdp
bmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgRGlzcGxh
eUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9pdGVtcykK
KyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0ZW50cy5jbGVh
cigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0Rmxh
Z3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKICAgICBzd2l0
Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAg
IGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBkb3duY2FzdDxTZXRTdGF0ZT4o
aXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRT
dGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0
ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4K
ICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODAsMTMgKzEwNSwyNiBAQCBib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0m
IGl0ZW0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBEcmF3aW5nSXRl
bUV4dGVudChUZXh0U3RyZWFtJiBzdHJlYW0sIE9wdGlvbmFsPEZsb2F0UmVjdD4mJiBleHRlbnQp
Cit7CisgICAgc3RyZWFtIDw8ICIgZXh0ZW50ICI7CisgICAgaWYgKGV4dGVudCkKKyAgICAgICAg
c3RyZWFtIDw8ICpleHRlbnQ7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwgInVua25vd24i
OworfQorCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1RleHRGbGFncyBmbGFncykgY29u
c3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFtOjpMaW5lTW9kZTo6TXVsdGlw
bGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHlsZVJlY3QpOwotICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0
aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdzKGZsYWdzLCBpdGVtKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3Jv
dXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07CisgICAgICAgIGlmIChpdGVtLmlz
RHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIGR1bXBEcmF3aW5nSXRlbUV4dGVudChzdHJlYW0s
IFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOwog
fQpAQCAtOTYsMTAgKzEzNCwxMSBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwogICAgIHRz
IDw8ICJkaXNwbGF5IGxpc3QiOwogCi0gICAgc2l6ZV90IG51bUl0ZW1zID0gbV9saXN0LnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKLSAgICAgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7Ci0gICAgICAgIHRzIDw8IGkgPDwgIiAi
IDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhp
cykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICAgICAg
dHMgPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAg
ICAgZHVtcERyYXdpbmdJdGVtRXh0ZW50KHRzLCBXVEZNb3ZlKGV4dGVudCkpOwogICAgIH0KICAg
ICB0cy5zdGFydEdyb3VwKCk7CiAgICAgdHMgPDwgInNpemUgaW4gYnl0ZXM6ICIgPDwgc2l6ZUlu
Qnl0ZXMoKTsKQEAgLTEwOCwxMyArMTQ3LDI3NiBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAogCiBzaXplX3QgRGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzKCkg
Y29uc3QKIHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8mIHJlZiA6IG1f
bGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5dGVzKHJlZik7CisgICAgcmV0
dXJuIG1faXRlbXMgPyBtX2l0ZW1zLT5zaXplSW5CeXRlcygpIDogMDsKK30KKworYm9vbCBEaXNw
bGF5TGlzdDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2l0ZW1zIHx8IG1faXRl
bXMtPmlzRW1wdHkoKTsKK30KKworSXRlbUJ1ZmZlciYgRGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXIo
KQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgbV9pdGVtcyA9IG1ha2VVbmlxdWU8SXRl
bUJ1ZmZlcj4oKTsKKyAgICByZXR1cm4gKm1faXRlbXM7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6
OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNsaWVudCkKK3sK
KyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgRGlzcGxheUxp
c3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgRGlzcGxh
eUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhh
bmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGlmIChtX2l0ZW1zKQorICAgICAg
ICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3ZlKG1hcEZ1bmN0aW9uKSk7Cit9CiAK
LSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBEaXNwbGF5TGlzdDo6c2V0VHJhY2tzRHJhd2luZ0l0
ZW1FeHRlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXRlbXMgfHwg
bV9pdGVtcy0+aXNFbXB0eSgpKTsKKyAgICBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyA9IHZh
bHVlOwogfQogCit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQorewor
ICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8
UmVzdG9yZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1
cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRlPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxS
b3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0
PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxHcmFkaWVudD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29s
b3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNr
bmVzcz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0
PFNldExpbmVDYXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0u
Z2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93Ogor
ICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlw
PihpdGVtLmdldDxDbGlwPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXBPdXQ+KGl0ZW0uZ2V0PENsaXBPdXQ+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcE91dFRv
UGF0aD4oaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcFBhdGg+KGl0ZW0uZ2V0PENsaXBQYXRo
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAg
IHJldHVybjsgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gY2xvbmUgZGlzcGxheSBs
aXN0cyAodGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBkaXNwbGF5IGxpc3QgdHJhY2tp
bmcpLgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RHJhd0dseXBocz4oaXRlbS5nZXQ8RHJhd0dseXBocz4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZT4oaXRlbS5nZXQ8
RHJhd0ltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaXRlbS5nZXQ8RHJhd1RpbGVkSW1hZ2U+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVy
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpdGVtLmdldDxEcmF3TmF0aXZlSW1hZ2U+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdQYXR0ZXJuPihpdGVtLmdldDxEcmF3UGF0dGVybj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdS
ZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxEcmF3TGluZT4oaXRlbS5nZXQ8RHJhd0xpbmU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4
dD4oaXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyPihpdGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxE
cmF3RWxsaXBzZT4oaXRlbS5nZXQ8RHJhd0VsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQYXRoPihpdGVtLmdldDxEcmF3
UGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQ
YXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtLmdldDxEcmF3Rm9jdXNSaW5n
UmVjdHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICByZXR1cm4g
YXBwZW5kPEZpbGxSZWN0PihpdGVtLmdldDxGaWxsUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxS
b3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkp
OworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxJbmxpbmVQYXRoPihpdGVtLmdl
dDxGaWxsSW5saW5lUGF0aD4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUGF0aD4oaXRlbS5nZXQ8RmlsbFBhdGg+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5k
PEZpbGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRl
bS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtLmdl
dDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUmVjdD4oaXRlbS5nZXQ8U3Ryb2tlUmVjdD4o
KSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihp
dGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8
U3Ryb2tlUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTdHJva2VFbGxpcHNlPihpdGVtLmdldDxTdHJva2VFbGxpcHNlPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Q2xlYXJSZWN0PihpdGVtLmdldDxDbGVhclJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcj4oaXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsK
KyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbS5nZXQ8QXBwbHlTdHJv
a2VQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5RmlsbFBh
dHRlcm4+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVt
LmdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpKTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxh
eUxpc3Q6Oml0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZGlzcGxheUxpc3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1f
ZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBhdXRvIGVuZEN1cnNvciA9IGl0ZW1zLm1fd3JpdGFi
bGVCdWZmZXIuZGF0YSArIGl0ZW1zLm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJu
IG1fY3Vyc29yID09IGVuZEN1cnNvcjsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6
OnVwZGF0ZUN1cnJlbnRJdGVtKCkKK3sKKyAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisKKyAgICBp
ZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgaXRlbXMgPSAqbV9kaXNw
bGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gaXRlbVR5cGUgPSBzdGF0aWNfY2FzdDxJdGVtVHlw
ZT4obV9jdXJzb3JbMF0pOworICAgIGlmIChpc0RyYXdpbmdJdGVtKGl0ZW1UeXBlKSAmJiAhbV9k
aXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9j
dXJyZW50RXh0ZW50ID0gbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50c1ttX2RyYXdp
bmdJdGVtSW5kZXhdOworICAgICAgICBtX2RyYXdpbmdJdGVtSW5kZXgrKzsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gV1RGOjpudWxsb3B0OworCisgICAgYXV0byogY2xp
ZW50ID0gaXRlbXMubV9yZWFkaW5nQ2xpZW50OworICAgIGlmICghaXNJbmxpbmVJdGVtKGl0ZW1U
eXBlKSAmJiBjbGllbnQpIHsKKyAgICAgICAgYXV0byBzaXplT2ZUeXBlQW5kSXRlbSA9IHNpemVP
Zkl0ZW1JbkJ5dGVzKGl0ZW1UeXBlKSArIHNpemVvZihJdGVtVHlwZSk7CisgICAgICAgIG1fY3Vy
cmVudEJ1ZmZlckZvckRlY29kZWRJdGVtID0gc2l6ZU9mVHlwZUFuZEl0ZW0gPD0gc2l6ZU9mRml4
ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgPyBtX2ZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zIDog
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhzaXplT2ZUeXBlQW5kSXRlbSkp
OworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbVswXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKKworICAgICAgICBhdXRvIHNpemVPZkRhdGEgPSByZWludGVy
cHJldF9jYXN0PHNpemVfdCo+KG1fY3Vyc29yICsgc2l6ZW9mKEl0ZW1UeXBlKSlbMF07CisgICAg
ICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gbV9jdXJzb3IgKyBzaXplb2YoSXRlbVR5cGUpICsg
c2l6ZW9mKHNpemVfdCk7CisgICAgICAgIHNpemVfdCBwYWRkaW5nID0gKGFsaWdub2YodWludDY0
X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0T2ZQYWRkaW5nKSAlIGFsaWdu
b2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0X3QpOworICAgICAgICBhdXRvIGRlY29kZWRJ
dGVtSGFuZGxlID0gY2xpZW50LT5kZWNvZGVJdGVtKHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZywg
c2l6ZU9mRGF0YSwgaXRlbVR5cGUsIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKTsKKyAg
ICAgICAgaWYgKCFkZWNvZGVkSXRlbUhhbmRsZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElu
c3RlYWQgb2YgY3Jhc2hpbmcsIHRoaXMgbmVlZHMgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBpbmZv
cm0gdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgdGhpcyBh
c3NlcnRpb24gbWFrZXMgYnVncyBpbiBpdGVtIGJ1ZmZlciBlbmNvZGluZyBsb2dpYyBlYXNpZXIK
KyAgICAgICAgICAgIC8vIHRvIGNhdGNoIGJ5IGF2b2lkaW5nIG15c3RlcmlvdXMgb3V0LW9mLWJv
dW5kcyByZWFkcyBhbmQgaW5jb3JyZWN0bHkgYWxpZ25lZCBpdGVtcworICAgICAgICAgICAgLy8g
ZG93biB0aGUgbGluZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9jdXJyZW50SXRlbSA9ICpkZWNvZGVkSXRlbUhhbmRsZTsK
KyAgICAgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IHNpemVvZihJdGVtVHlwZSkgKyBz
aXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBzaXplT2ZEYXRhOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fY3VycmVudEl0ZW0gPSBJdGVtSGFuZGxlIHsgbV9jdXJzb3IgfTsKKyAgICAgICAgbV9j
dXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IG1fY3VycmVudEl0ZW0uc2l6ZSgpOworICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2UoKQoreworICAgIGlmIChhdEVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnNvciArPSBtX2N1cnJlbnRJdGVtU2l6
ZUluQnVmZmVyOworCisgICAgaWYgKG1fY3Vyc29yID09IG1fY3VycmVudEVuZE9mQnVmZmVyICYm
IG1fcmVhZE9ubHlCdWZmZXJJbmRleCA8IG1fZGlzcGxheUxpc3QubV9pdGVtcy0+bV9yZWFkT25s
eUJ1ZmZlcnMuc2l6ZSgpKSB7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCsrOworICAg
ICAgICBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgIH0KKworICAgIHVw
ZGF0ZUN1cnJlbnRJdGVtKCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVh
ckN1cnJlbnRJdGVtKCkKK3sKKyAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKwor
ICAgIGlmIChhdXRvIGl0ZW0gPSBzdGQ6OmV4Y2hhbmdlKG1fY3VycmVudEl0ZW0sIHsgfSkpCisg
ICAgICAgIGl0ZW0uZGVzdHJveSgpOworCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZl
ckZvckRlY29kZWRJdGVtICE9IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMpKSB7CisgICAg
ICAgIGZhc3RGcmVlKG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKTsKKyAgICAgICAgbV9j
dXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBE
aXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1vdmVUb0VuZCgpCit7CisgICAgaWYgKGF1dG8mIGl0ZW1z
ID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zKSB7CisgICAgICAgIG1fY3Vyc29yID0gaXRlbXMtPm1f
d3JpdGFibGVCdWZmZXIuZGF0YSArIGl0ZW1zLT5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAg
ICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yOworICAgICAgICBtX3JlYWRPbmx5
QnVmZmVySW5kZXggPSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50
QnVmZmVyKCkKK3sKKyAgICBhdXRvJiBpdGVtcyA9IG1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAg
ICBpZiAoIWl0ZW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG51bWJlck9mUmVhZE9u
bHlCdWZmZXJzID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKTsKKyAgICBpZiAobV9y
ZWFkT25seUJ1ZmZlckluZGV4IDwgbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMpIHsKKyAgICAgICAg
YXV0byYgbmV4dEJ1ZmZlckhhbmRsZSA9IGl0ZW1zLT5tX3JlYWRPbmx5QnVmZmVyc1ttX3JlYWRP
bmx5QnVmZmVySW5kZXhdOworICAgICAgICBtX2N1cnNvciA9IG5leHRCdWZmZXJIYW5kbGUuZGF0
YTsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvciArIG5leHRCdWZmZXJI
YW5kbGUuY2FwYWNpdHk7CisgICAgfSBlbHNlIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXggPT0g
bnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMpIHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93
cml0YWJsZUJ1ZmZlci5kYXRhOworICAgICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vy
c29yICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgfQorfQorCisKIH0gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCmluZGV4IGQ2YmUyNzRjNjhkZWVmYjRjMGQ1MzYxYmU2NDgxNTI0MDMy
YzlmNDEuLjg4MThkNWI1ZDJmYjI2YWRhNzc1ZTk5MGQwNGQ5OTFmN2ExZWVhNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCkBAIC0yNSwxMCArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTM5LDEwMSArNDIsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKLSAgICBTYXZlLAotICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50LAotICAgIFNldElubGluZUZpbGxDb2xvciwK
LSAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKLSAgICBTZXRTdHJva2VUaGlja25lc3MsCi0gICAg
U2V0U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5l
Sm9pbiwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAotICAgIENsaXAsCi0g
ICAgQ2xpcE91dCwKLSAgICBDbGlwT3V0VG9QYXRoLAotICAgIENsaXBQYXRoLAotICAgIENsaXBU
b0RyYXdpbmdDb21tYW5kcywKLSAgICBEcmF3R2x5cGhzLAotICAgIERyYXdJbWFnZSwKLSAgICBE
cmF3VGlsZWRJbWFnZSwKLSAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKLSAgICBEcmF3SW1hZ2VC
dWZmZXIsCi0gICAgRHJhd05hdGl2ZUltYWdlLAotICAgIERyYXdQYXR0ZXJuLAotICAgIERyYXdS
ZWN0LAotICAgIERyYXdMaW5lLAotICAgIERyYXdMaW5lc0ZvclRleHQsCi0gICAgRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlciwKLSAgICBEcmF3RWxsaXBzZSwKLSAgICBEcmF3UGF0aCwKLSAgICBE
cmF3Rm9jdXNSaW5nUGF0aCwKLSAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCi0gICAgRmlsbFJlY3Qs
Ci0gICAgRmlsbFJlY3RXaXRoQ29sb3IsCi0gICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAg
RmlsbENvbXBvc2l0ZWRSZWN0LAotICAgIEZpbGxSb3VuZGVkUmVjdCwKLSAgICBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSwKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBGaWxsSW5s
aW5lUGF0aCwKLSNlbmRpZgotICAgIEZpbGxQYXRoLAotICAgIEZpbGxFbGxpcHNlLAotICAgIFB1
dEltYWdlRGF0YSwKLSAgICBQYWludEZyYW1lRm9yTWVkaWEsCi0gICAgU3Ryb2tlUmVjdCwKLSNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBTdHJva2VJbmxpbmVQYXRoLAotI2VuZGlm
Ci0gICAgU3Ryb2tlUGF0aCwKLSAgICBTdHJva2VFbGxpcHNlLAotICAgIENsZWFyUmVjdCwKLSAg
ICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAotI2lm
IFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJl
IGEgcmVjb3JkZWQgaXRlbS4KLSAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxk
IG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCi0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yLAotfTsKLQotY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKLXB1Ymxp
YzoKLSAgICBJdGVtKCkgPSBkZWxldGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBJdGVtKEl0ZW1U
eXBlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JdGVtKCk7Ci0KLSAgICBJdGVtVHlw
ZSB0eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKLQotICAg
IHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
I2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBk
ZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRl
cyhjb25zdCBJdGVtJik7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxJdGVtPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBJdGVt
VHlwZSBtX3R5cGU7Ci19OwotCiBlbnVtIEFzVGV4dEZsYWcgewogICAgIE5vbmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAwLAogICAgIEluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAg
ICAgPSAxIDw8IDAsCkBAIC0xNDYsODYgKzU0LDEwOSBAQCBjbGFzcyBEaXNwbGF5TGlzdCB7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlY29yZGVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBsYXllcjsKIHB1
YmxpYzoKLSAgICBEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKLSAgICBEaXNwbGF5TGlzdChEaXNw
bGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBEaXNwbGF5TGlzdChJdGVtQnVmZmVySGFuZGxlcyYmKTsKIAotICAgIERpc3Bs
YXlMaXN0JiBvcGVyYXRvcj0oRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0OworICAgIFdFQkNPUkVf
RVhQT1JUIH5EaXNwbGF5TGlzdCgpOwogCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0JiBvcGVyYXRvcj0oRGlzcGxh
eUxpc3QmJik7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdDsgfQotICAgIEl0ZW0mIGl0ZW1BdChzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
bGlzdFtpbmRleF0uZ2V0KCk7Ci0gICAgfQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0m
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qg
c2l6ZUluQnl0ZXMoKSBjb25zdDsKIAotICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0g
ICAgCiAgICAgU3RyaW5nIGFzVGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQq
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZl
cldyaXRpbmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxF
RAogICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYpOwotCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNv
bnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9p
ZCBhcHBlbmQoSXRlbUhhbmRsZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CisKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIGNsYXNzIEltbWVk
aWF0ZWx5TW92ZVRvRW5kIHsgTm8sIFllcyB9OworICAgICAgICBpdGVyYXRvcihjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIEltbWVkaWF0ZWx5TW92ZVRvRW5kIGltbWVkaWF0ZWx5TW92
ZVRvRW5kID0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6Ok5vKQorICAgICAgICAgICAgOiBtX2Rpc3Bs
YXlMaXN0KGRpc3BsYXlMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW1tZWRpYXRl
bHlNb3ZlVG9FbmQgPT0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcykKKyAgICAgICAgICAgICAg
ICBtb3ZlVG9FbmQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmVD
dXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ3Vy
cmVudEl0ZW0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5pdGVyYXRv
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0
dXJuICZtX2Rpc3BsYXlMaXN0ID09ICZvdGhlci5tX2Rpc3BsYXlMaXN0ICYmIG1fY3Vyc29yID09
IG90aGVyLm1fY3Vyc29yOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIHZvaWQgb3Bl
cmF0b3IrKygpIHsgYWR2YW5jZSgpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxJdGVtSGFuZGxlLCBP
cHRpb25hbDxGbG9hdFJlY3Q+PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiB7IG1fY3VycmVu
dEl0ZW0sIG1fY3VycmVudEV4dGVudCB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA9IDI1
NjsKKworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJy
ZW50QnVmZmVyKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvRW5kKCk7Cisg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWR2YW5jZSgpOworICAgICAgICBib29sIGF0RW5kKCkgY29uc3Q7CisKKyAg
ICAgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgICAgIHVpbnQ4X3Qq
IG1fY3Vyc29yIHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgbV9yZWFkT25seUJ1ZmZlcklu
ZGV4IHsgMCB9OworICAgICAgICBzaXplX3QgbV9kcmF3aW5nSXRlbUluZGV4IHsgMCB9OworICAg
ICAgICB1aW50OF90KiBtX2N1cnJlbnRFbmRPZkJ1ZmZlciB7IG51bGxwdHIgfTsKKworICAgICAg
ICB1aW50OF90IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXNbc2l6ZU9mRml4ZWRCdWZmZXJG
b3JEZWNvZGVkSXRlbXNdIHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRCdWZmZXJG
b3JEZWNvZGVkSXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgSXRlbUhhbmRsZSBtX2N1cnJlbnRJ
dGVtOworICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fY3VycmVudEV4dGVudDsKKyAgICAg
ICAgc2l6ZV90IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgeyAwIH07CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkltbWVkaWF0ZWx5TW92
ZVRvRW5kOjpZZXMgfTsgfQogCiBwcml2YXRlOgotICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4m
JiBpdGVtKQotICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAg
ICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAgfQorICAgIEl0ZW1CdWZmZXIq
IGl0ZW1CdWZmZXJJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuZ2V0KCk7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVyKCk7CiAKLSAgICAvLyBMZXNz
IGVmZmljaWVudCBhcHBlbmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tpbmcgcmVwbGF5LgotICAgIHZv
aWQgYXBwZW5kSXRlbShJdGVtJiBpdGVtKQorICAgIHZvaWQgYWRkRHJhd2luZ0l0ZW1FeHRlbnQo
T3B0aW9uYWw8RmxvYXRSZWN0PiYmIGV4dGVudCkKICAgICB7Ci0gICAgICAgIG1fbGlzdC5hcHBl
bmQoaXRlbSk7CisgICAgICAgIEFTU0VSVChtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk7Cisg
ICAgICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZNb3ZlKGV4dGVudCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgY29u
c3QgSXRlbSYpOwotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSB7IHJldHVybiBtX2xp
c3Q7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MsIEl0
ZW1IYW5kbGUpOwogCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJdGVtQnVmZmVyPiBtX2l0ZW1zOworICAgIFZlY3RvcjxPcHRpb25hbDxGbG9hdFJl
Y3Q+PiBtX2RyYXdpbmdJdGVtRXh0ZW50czsKKyAgICBib29sIG1fdHJhY2tzRHJhd2luZ0l0ZW1F
eHRlbnRzIHsgdHJ1ZSB9OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBE
aXNwbGF5TGlzdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBjbGFzcy4uLiBBcmdzPgordm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3MmJi4u
LiBhcmdzKQogewotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fbGlzdC5z
aXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0KQotICAgICAgICBlbmNvZGVy
IDw8IGl0ZW0uZ2V0KCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxE
aXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPHVpbnQ2NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBpdGVtQ291bnQ7
Ci0gICAgaWYgKCFpdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkg
PCAqaXRlbUNvdW50OyBpKyspIHsKLSAgICAgICAgYXV0byBpdGVtID0gSXRlbTo6ZGVjb2RlKGRl
Y29kZXIpOwotICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gZGVjb2RlIGFsbCB0eXBlcywg
ZmFpbGluZyB0byBkZWNvZGUgYW4gaXRlbSBzaG91bGQgdHVybiBpbnRvIGEgZGVjb2RlIGZhaWx1
cmUuCi0gICAgICAgIC8vIEZvciBub3csIHdlIGp1c3QgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAg
ICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXNwbGF5TGlz
dC5hcHBlbmQoV1RGTW92ZSgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5TGlz
dDsKKyAgICBpdGVtQnVmZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CiB9CiAKIH0gLy8gRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBmN2Nh
NmJiZmZkOThmYTBkZjY4YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4wODFjZWM3OWUzYzlhZTJhMjgw
NGMwMTUxZWVhZjNjNWIyOWI5Njc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3Jl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zMzMsNyAr
MzMzLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1cGRhdGVTdHJva2VDb2xvcihD
R0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0
ZUdldFN0eWxlKGdzdGF0ZSkpOwogCi0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KERyYXdHbHlwaHM6OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFk
dmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oKm1fb3Jp
Z2luYWxGb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25z
LCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0
cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CiAKICAgICBtX293
bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKIAogICAgIGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAg
IG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFn
ZSwgcmVjdCwge3sgfSwgaW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2lu
VG9wTGVmdCB9KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgRmxvYXRS
ZWN0KHJlY3QpLCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdP
cHRpb25zIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKIAogICAgIC8vIFVu
ZG8gdGhlIGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgogICAgIG1fb3duZXIu
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggMjNhYzMy
NGI3YjAwYTllMTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNi
YmNhOWE4NTg0ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtNDMsNyArNDMs
NyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3du
ZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApp
bmRleCBkNDYxN2QzNTE2ZjRmM2U1MWQ3NWQ2NDQzNGE2YTM5NDU3YTAwMDFmLi5mOWIzMjNjNzQy
NjZlZDFmNjFkNDRiMDQ3MmVmNTUxODUzZThjN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFJlY29yZGVy
JiBEcmF3aW5nQ29udGV4dDo6cmVjb3JkZXIoKQogCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewotICAgIGlmICgh
bV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0
LCBtX2Rpc3BsYXlMaXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdjYzAu
Ljk2ZTRiMWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBAQCBw
dWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VEaXNw
bGF5TGlzdCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNwbGF5
TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxp
c3QsIHsgfSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rp
c3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXll
ZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAppbmRleCAzMjU5
OWUwNjJkN2NmNTlkMWRjMmVhZDAxZTc2MGQ2NmUzZjdlYzNjLi5mZmQ5NGI1MjljMDZhN2UyY2Rl
MDBlYzk0YjM1NWM4NWRkYWZiNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdDb250
ZXh0LmRpc3BsYXlMaXN0KCkuaXRlbUNvdW50KCkpCisgICAgICAgIGlmICghbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQucmVwbGF5RGlzcGxheUxpc3QoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJjY2RjOWM0ZGNhOTUzYTVhYTVhNzVmNGU0MmZhMTk2MWNlZThlOGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDYwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
aCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3Qgewor
Cit2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAg
Z2V0PFNhdmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAgICBnZXQ8UmVzdG9yZT4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6IHsKKyAgICAgICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAg
Z2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06IHsKKyAgICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogewor
ICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAg
ICBnZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogewor
ICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3M6IHsKKyAgICAgICAgZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTog
eworICAgICAgICBnZXQ8U2V0U3RhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBnZXQ8
U2V0TGluZUNhcD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8U2V0TGluZURhc2g+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6IHsKKyAgICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6
IHsKKyAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHsKKyAgICAgICAgZ2V0PENs
aXA+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDogeworICAgICAgICBnZXQ8Q2xpcE91dD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoOiB7CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAg
ICAgIGdldDxDbGlwUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsKKyAgICAgICAg
Z2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIGdl
dDxEcmF3R2x5cGhzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogeworICAgICAgICBnZXQ8RHJhd0ltYWdlPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOiB7CisgICAgICAgIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7
CisgICAgICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogeworICAgICAgICBnZXQ8RHJh
d0xpbmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAgICBnZXQ8RHJhd0xpbmVzRm9y
VGV4dD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIGdldDxEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAgIGdldDxE
cmF3RWxsaXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBnZXQ8RHJhd1BhdGg+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUmVjdD4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDogewor
ICAgICAgICBnZXQ8RmlsbElubGluZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAg
ICAgICBnZXQ8RmlsbFBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAgICAgICAgZ2V0PEZpbGxF
bGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlBhaW50RnJhbWVGb3JNZWRpYTogeworICAgICAgICBnZXQ8UGFpbnRGcmFtZUZvck1lZGlh
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVJlY3Q+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBnZXQ8
U3Ryb2tlSW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0
PFN0cm9rZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogeworICAgICAgICBnZXQ8U3Ryb2tlRWxs
aXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHsKKyAgICAgICAgZ2V0PENsZWFyUmVjdD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdldDxFbmRUcmFuc3BhcmVu
Y3lMYXllcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBV
U0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOiB7CisgICAgICAg
IGdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogeworICAgICAg
ICBnZXQ8QXBwbHlGaWxsUGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6IHsKKyAgICAgICAgZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgfQorfQorCit2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dFRvUGF0aDogeworICAgICAgICBnZXQ8Q2xpcE91dFRvUGF0aD4oKS5+Q2xpcE91dFRv
UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQ
YXRoOiB7CisgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsK
KyAgICAgICAgZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKS5+Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9j
dXNSaW5nUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigp
Ln5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIGdldDxEcmF3R2x5cGhzPigpLn5EcmF3
R2x5cGhzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkufkRyYXdJbWFnZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjogewor
ICAgICAgICBnZXQ8RHJhd0ltYWdlQnVmZmVyPigpLn5EcmF3SW1hZ2VCdWZmZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7
CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLn5EcmF3TGluZXNGb3JUZXh0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
OiB7CisgICAgICAgIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCkufkRyYXdOYXRpdmVJbWFnZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7Cisg
ICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8RHJhd1Bh
dHRlcm4+KCkufkRyYXdQYXR0ZXJuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdl
PigpLn5EcmF3VGlsZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4oKS5+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHsKKyAgICAgICAg
Z2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsKKyAgICAgICAg
Z2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVj
dFdpdGhDb2xvcj4oKS5+RmlsbFJlY3RXaXRoQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBn
ZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkufkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLn5GaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0Pigp
Ln5GaWxsUm91bmRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpQdXRJbWFnZURhdGE6IHsKKyAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5+UHV0
SW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6IHsKKyAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLn5TZXRMaW5lRGFzaCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7
CisgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIGdldDxTdHJv
a2VQYXRoPigpLn5TdHJva2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBseURldmljZVNjYWxlRmFjdG9y
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEFwcGx5RmlsbFBhdHRlcm4+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPEFwcGx5U3Ryb2tlUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QmVnaW5U
cmFuc3BhcmVuY3lMYXllcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xpcD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsaXBPdXQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdFbGxpcHNl
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPERyYXdMaW5lPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEVuZFRyYW5z
cGFyZW5jeUxheWVyPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxJbmxpbmVQYXRoPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbFJlY3Q+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVGb3JNZWRpYT46OnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3RvcmU+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJvdGF0
ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFNhdmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U2NhbGU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldENUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmls
bENvbG9yPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lQ2FwPjo6dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2lu
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNldExpbmVKb2luPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
U3Ryb2tlVGhpY2tuZXNzPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlRWxsaXBzZT46OnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUlubGluZVBhdGg+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VS
ZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFN0cm9rZVJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKHR5
cGUoKSk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJiBo
YW5kbGVzKQorICAgIDogbV9yZWFkT25seUJ1ZmZlcnMoV1RGTW92ZShoYW5kbGVzKSkKK3sKK30K
KworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcigpID0gZGVmYXVsdDsKKworSXRlbUJ1ZmZlcjo6fkl0
ZW1CdWZmZXIoKQoreworICAgIGNsZWFyKCk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIo
SXRlbUJ1ZmZlciYmIG90aGVyKQorICAgIDogbV9yZWFkaW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fd3JpdGluZ0NsaWVudChz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX25v
bklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fYWxsb2NhdGVkQnVm
ZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAs
IG1fcmVhZE9ubHlCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMs
IHsgfSkpCisgICAgLCBtX3dyaXRhYmxlQnVmZmVyKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
YWJsZUJ1ZmZlciwgeyB9KSkKKyAgICAsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMoc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKSkKK3sKK30KKworSXRlbUJ1ZmZl
ciYgSXRlbUJ1ZmZlcjo6b3BlcmF0b3I9KEl0ZW1CdWZmZXImJiBvdGhlcikKK3sKKyAgICBtX3Jl
YWRpbmdDbGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0
cik7CisgICAgbV93cml0aW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdD
bGllbnQsIG51bGxwdHIpOworICAgIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMs
IHsgfSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2Fs
bG9jYXRlZEJ1ZmZlcnMsIHsgfSk7CisgICAgbV9yZWFkT25seUJ1ZmZlcnMgPSBzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pOworICAgIG1fd3JpdGFibGVCdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZC
eXRlcywgMCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJdGVtQnVmZmVySGFuZGxlIEl0ZW1C
dWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIGlmIChtX3dy
aXRpbmdDbGllbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gbV93cml0aW5nQ2xpZW50
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgfQorCisgICAgY29uc3RleHByIHNpemVfdCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5
ID0gMSA8PCAxMDsKKworICAgIGF1dG8gbmV3QnVmZmVyQ2FwYWNpdHkgPSBzdGQ6Om1heChjYXBh
Y2l0eSwgZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSk7CisgICAgYXV0byogYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhuZXdCdWZmZXJDYXBhY2l0eSkpOwor
ICAgIG1fYWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKKyAgICByZXR1cm4geyBJdGVt
QnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSwgYnVmZmVyLCBuZXdCdWZmZXJDYXBhY2l0eSB9
OworfQorCit2b2lkIEl0ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgaGFuZGxlIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgIG1hcEZ1bmN0aW9u
KGhhbmRsZSk7CisKKyAgICBpZiAobV93cml0YWJsZUJ1ZmZlciAmJiBtX3dyaXR0ZW5OdW1iZXJP
ZkJ5dGVzKQorICAgICAgICBtYXBGdW5jdGlvbih7IG1fd3JpdGFibGVCdWZmZXIuaWRlbnRpZmll
ciwgbV93cml0YWJsZUJ1ZmZlci5kYXRhLCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIH0pOworfQor
Cit2b2lkIEl0ZW1CdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHN0ZDo6
ZXhjaGFuZ2UobV9ub25JbmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAg
ICAgaXRlbS5kZXN0cm95KCk7CisKKyAgICBmb3IgKGF1dG8qIGJ1ZmZlciA6IHN0ZDo6ZXhjaGFu
Z2UobV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBmYXN0RnJlZShidWZmZXIpOwor
CisgICAgbV9yZWFkT25seUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0g
eyB9OworICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1Mjk1NzJkYjA4OTkyMTlhNGRlOTI1
MDI1ZWUwOGU4ZDg3ZWRlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAgLTAs
MCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gSXRlbUJ1ZmZl
cklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEl0ZW1CdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxJdGVtQnVmZmVySWRlbnRpZmllclR5cGU+OworCisvLyBBbiBJdGVtQnVmZmVy
SGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgY29udGFpbnMgZGlz
cGxheSBsaXN0IGl0ZW0gZGF0YS4KK3N0cnVjdCBJdGVtQnVmZmVySGFuZGxlIHsKKyAgICBJdGVt
QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IGNhcGFjaXR5IHsgMCB9OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhKCp0aGlzKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWRhdGE7IH0KK307CisKK3VzaW5nIEl0ZW1CdWZmZXJIYW5kbGVzID0gVmVjdG9yPEl0
ZW1CdWZmZXJIYW5kbGUsIDI+OworCisvLyBBbiBJdGVtSGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0
byBhbiBJdGVtVHlwZSwgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYW4gaXRlbSBvZiB0aGF0IHR5
cGUuCitzdHJ1Y3QgSXRlbUhhbmRsZSB7CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsK
KworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkZXN0cm95KCk7
CisgICAgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3Q7CisKKyAgICBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFkYXRhOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhZGF0YTsgfQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEl0ZW1UeXBlPihkYXRhWzBdKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKHR5cGUoKSk7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFQ6Oml0ZW1UeXBlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCYgZ2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpczxUPigpKTsKKyAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFQqPigmZGF0YVtzaXplb2YoSXRlbVR5cGUpXSk7CisgICAgfQorfTsKKworY2xh
c3MgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50KCkgPSAwOworCisgICAgdmlydHVhbCBJdGVtQnVmZmVySGFuZGxl
IGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBlbmNvZGVJdGVtKEl0ZW1IYW5kbGUpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIEl0
ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVy
UmVhZGluZ0NsaWVudCgpID0gMDsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRsZT4g
V0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgPSAwOworfTsK
KworSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQ6On5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpIHsg
fQorSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQ6On5JdGVtQnVmZmVyUmVhZGluZ0NsaWVudCgpIHsg
fQorCisvLyBBbiBJdGVtQnVmZmVyIGNvbnRhaW5zIGRpc3BsYXkgbGlzdCBpdGVtIGRhdGEsIGFu
ZCBjb25zaXN0cyBvZiBhIHJlYWR3cml0ZSBJdGVtQnVmZmVySGFuZGxlICh0byB3aGljaCBkaXNw
bGF5CisvLyBsaXN0IGl0ZW1zIGFyZSBhcHBlbmRlZCkgYXMgd2VsbCBhcyBhIG51bWJlciBvZiBy
ZWFkb25seSBJdGVtQnVmZmVySGFuZGxlcy4gSXRlbXMgYXJlIGFwcGVuZGVkIHRvIHRoZSByZWFk
d3JpdGUKKy8vIGJ1ZmZlciB1bnRpbCBhbGwgYXZhaWxhYmxlIGNhcGFjaXR5IGlzIGV4aGF1c3Rl
ZCwgYXQgd2hpY2ggcG9pbnQgd2Ugd2lsbCBtb3ZlIHRoaXMgd3JpdGFibGUgaGFuZGxlIHRvIHRo
ZSBsaXN0CisvLyBvZiByZWFkb25seSBoYW5kbGVzLgorY2xhc3MgSXRlbUJ1ZmZlciB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSXRlbUJ1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBEaXNwbGF5TGlzdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIEl0ZW1CdWZmZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+SXRlbUJ1ZmZlcigpOwor
ICAgIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZl
ciYgb3BlcmF0b3I9KEl0ZW1CdWZmZXImJik7CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBj
b25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoYXV0
byBidWZmZXIgOiBtX3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAgICAgIHJlc3VsdCArPSBidWZm
ZXIuY2FwYWNpdHk7CisgICAgICAgIHJlc3VsdCArPSBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKTsKKworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fd3JpdHRlbk51
bWJlck9mQnl0ZXMgJiYgbV9yZWFkT25seUJ1ZmZlcnMuaXNFbXB0eSgpOworICAgIH0KKworICAg
IFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3Qp
OworCisgICAgLy8gSXRlbUJ1ZmZlcjo6YXBwZW5kPFQ+KC4uLikgYXBwZW5kcyBhIGRpc3BsYXkg
bGlzdCBpdGVtIG9mIHR5cGUgVCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CisgICAgLy8gd3Jp
dGFibGUgYnVmZmVyIGhhbmRsZTsgaWYgcmVtYWluaW5nIGJ1ZmZlciBjYXBhY2l0eSBpcyBpbnN1
ZmZpY2llbnQgdG8gc3RvcmUgdGhlIGl0ZW0sIGEKKyAgICAvLyBuZXcgYnVmZmVyIHdpbGwgYmUg
YWxsb2NhdGVkIChlaXRoZXIgYnkgdGhlIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50LCBpZiBzZXQs
IG9yIGJ5IHRoZSBpdGVtCisgICAgLy8gYnVmZmVyIGl0c2VsZiBpZiB0aGVyZSBpcyBubyBjbGll
bnQpLiBJdGVtcyBhcmUgcGxhY2VkIGJhY2stdG8tYmFjayBpbiB0aGVzZSBpdGVtIGJ1ZmZlcnMs
CisgICAgLy8gd2l0aCBhbiBJdGVtVHlwZSBzZXBhcmF0aW5nIGVhY2ggaXRlbS4KKyAgICAvLwor
ICAgIC8vIElmIGEgd3JpdGluZyBjbGllbnQgaXMgcHJlc2VudCBhbmQgcmVxdWlyZXMgY3VzdG9t
IGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0eXBlIFQsIHRoZQorICAgIC8vIGl0ZW0gYnVm
ZmVyIHdpbGwgYXNrIHRoZSBjbGllbnQgZm9yIGFuIG9wYXF1ZSBTaGFyZWRCdWZmZXIgY29udGFp
bmluZyBlbmNvZGVkIGRhdGEgZm9yIHRoZQorICAgIC8vIGl0ZW0uIFRoaXMgZW5jb2RlZCBkYXRh
IGlzIHRoZW4gYXBwZW5kZWQgdG8gdGhlIGl0ZW0gYnVmZmVyLCB3aXRoIHBhZGRpbmcgdG8gZW5z
dXJlIHRoYXQKKyAgICAvLyB0aGUgc3RhcnQgb2YgdGhpcyBkYXRhIGlzIGFsaWduZWQgdG8gOCBi
eXRlcywgaWYgbmVjZXNzYXJ5LiBXaGVuIGNvbnN1bWluZyBlbmNvZGVkIGl0ZW0KKyAgICAvLyBk
YXRhLCBhIGNvcnJlc3BvbmRpbmcgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgd2lsbCBiZSByZXF1
aXJlZCB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhCisgICAgLy8gYmFjayBpbnRvIGFuIGl0
ZW0gb2YgdHlwZSBULgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZv
aWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlIHx8ICFUOjppc0lubGluZUl0
ZW0pOworICAgICAgICBjb25zdGV4cHIgYXV0byBzaXplT2ZUeXBlQW5kSXRlbSA9IHNpemVvZihJ
dGVtVHlwZSkgKyBzaXplb2YoVCk7CisKKyAgICAgICAgaWYgKCFUOjppc0lubGluZUl0ZW0gJiYg
bV93cml0aW5nQ2xpZW50KSB7CisgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBpdGVtQnVmZmVy
W3NpemVPZlR5cGVBbmRJdGVtXTsKKyAgICAgICAgICAgIGl0ZW1CdWZmZXJbMF0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgICAgICBuZXcgKGl0ZW1CdWZmZXIg
KyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAg
ICAgICAgICBpZiAoYXV0byBzaGFyZWRCdWZmZXIgPSBtX3dyaXRpbmdDbGllbnQtPmVuY29kZUl0
ZW0oeyBpdGVtQnVmZmVyIH0pKSB7CisgICAgICAgICAgICAgICAgYXV0byBtYXhBZGRpdGlvbmFs
Q2FwYWNpdHlGb3JJdGVtID0gc2hhcmVkQnVmZmVyLT5zaXplKCkgKyBzaXplb2YoSXRlbVR5cGUp
ICsgc2l6ZW9mKHNpemVfdCkgKyBhbGlnbm9mKHVpbnQ2NF90KTsKKyAgICAgICAgICAgICAgICBp
ZiAobV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIG1heEFkZGl0aW9uYWxDYXBhY2l0eUZvckl0ZW0g
PiBtX3dyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
bGFzdFdyaXRhYmxlQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX3dyaXRhYmxlQnVmZmVyLCB7IH0p
OworICAgICAgICAgICAgICAgICAgICBsYXN0V3JpdGFibGVCdWZmZXIuY2FwYWNpdHkgPSBzdGQ6
OmV4Y2hhbmdlKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApOworICAgICAgICAgICAgICAgICAg
ICBpZiAobGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5KQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9yZWFkT25seUJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUobGFzdFdyaXRhYmxlQnVmZmVyKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fd3JpdGFibGVCdWZmZXIgPSBjcmVhdGVJdGVtQnVmZmVy
KG1heEFkZGl0aW9uYWxDYXBhY2l0eUZvckl0ZW0pOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fd3JpdGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVz
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICBh
dXRvKiBzdGFydE9mRGF0YUxlbmd0aCA9IG1fd3JpdGFibGVCdWZmZXIuZGF0YSArIG1fd3JpdHRl
bk51bWJlck9mQnl0ZXMgKyBzaXplb2YoSXRlbVR5cGUpOworICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4oc3RhcnRPZkRhdGFMZW5ndGgpWzBdID0gc2hhcmVkQnVmZmVy
LT5zaXplKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvKiBzdGFydE9mUGFkZGluZyA9IHN0YXJ0
T2ZEYXRhTGVuZ3RoICsgc2l6ZW9mKHNpemVfdCk7CisgICAgICAgICAgICAgICAgc2l6ZV90IHBh
ZGRpbmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
c3RhcnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRfdCk7
CisgICAgICAgICAgICAgICAgYXV0byogc3RhcnRPZkRhdGEgPSBzdGFydE9mRGF0YUxlbmd0aCAr
IHNpemVvZihzaXplX3QpICsgcGFkZGluZzsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc3RhcnRP
ZkRhdGEsIHNoYXJlZEJ1ZmZlci0+ZGF0YUFzVUludDhQdHIoKSwgc2hhcmVkQnVmZmVyLT5zaXpl
KCkpOworCisgICAgICAgICAgICAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArPSBzaXplb2Yo
SXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBwYWRkaW5nICsgc2hhcmVkQnVmZmVyLT5zaXpl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIHNpemVPZlR5cGVBbmRJdGVtID4gbV93
cml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkgeworICAgICAgICAgICAgYXV0byBsYXN0V3JpdGFibGVC
dWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgICAgICAg
ICBsYXN0V3JpdGFibGVCdWZmZXIuY2FwYWNpdHkgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdHRlbk51
bWJlck9mQnl0ZXMsIDApOworICAgICAgICAgICAgaWYgKGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBh
Y2l0eSkKKyAgICAgICAgICAgICAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShs
YXN0V3JpdGFibGVCdWZmZXIpKTsKKyAgICAgICAgICAgIG1fd3JpdGFibGVCdWZmZXIgPSBjcmVh
dGVJdGVtQnVmZmVyKHNpemVPZlR5cGVBbmRJdGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8qIHN0YXJ0T2ZJdGVtID0gJm1fd3JpdGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJP
ZkJ5dGVzXTsKKyAgICAgICAgc3RhcnRPZkl0ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihU
OjppdGVtVHlwZSk7CisgICAgICAgIG5ldyAoc3RhcnRPZkl0ZW0gKyBzaXplb2YoSXRlbVR5cGUp
KSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIG1fd3JpdHRlbk51bWJl
ck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKFQ6Oml0ZW1U
eXBlKTsKKworICAgICAgICBpZiAoIVQ6OmlzSW5saW5lSXRlbSkKKyAgICAgICAgICAgIG1fbm9u
SW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMuYXBwZW5kKHsgc3RhcnRPZkl0ZW0gfSk7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVu
dCkgeyBtX3dyaXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChJdGVt
QnVmZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGluZ0NsaWVudCA9IGNsaWVudDsg
fQorCitwcml2YXRlOgorICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGVzJiByZWFkT25seUJ1ZmZl
cnMoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsgfQorICAgIHZvaWQgZm9yRWFj
aEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYpIGNv
bnN0OworCisgICAgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIG1fcmVhZGluZ0NsaWVudCB7IG51
bGxwdHIgfTsKKyAgICBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogbV93cml0aW5nQ2xpZW50IHsg
bnVsbHB0ciB9OworICAgIFZlY3RvcjxJdGVtSGFuZGxlPiBtX25vbklubGluZUl0ZW1zSW5BbGxv
Y2F0ZWRCdWZmZXJzOworICAgIFZlY3Rvcjx1aW50OF90Kj4gbV9hbGxvY2F0ZWRCdWZmZXJzOwor
ICAgIEl0ZW1CdWZmZXJIYW5kbGVzIG1fcmVhZE9ubHlCdWZmZXJzOworICAgIEl0ZW1CdWZmZXJI
YW5kbGUgbV93cml0YWJsZUJ1ZmZlcjsKKyAgICBzaXplX3QgbV93cml0dGVuTnVtYmVyT2ZCeXRl
cyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmVlNjFmNzQzZDYyZjEwODgzNmM2ZWYwMDA0MTc4ZTUwMWVhNDgxMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1UeXBlLmNwcApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBlLmgiCisKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CisKK3NpemVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoU2F2ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihSZXN0b3JlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6CisgICAgICAgIHJldHVybiBzaXplb2YoVHJhbnNsYXRlKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBzaXplb2YoUm90YXRlKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihTY2FsZSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBzaXplb2YoQ29uY2F0ZW5h
dGVDVE0pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihTZXRDVE0pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVGaWxsR3JhZGllbnQpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxp
bmVGaWxsQ29sb3IpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKFNldElubGluZVN0cm9rZUNvbG9yKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0U3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgcmV0
dXJuIHNpemVvZihTZXRTdGF0ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lQ2FwKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTZXRMaW5lRGFzaCk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZUpvaW4p
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBzaXpl
b2YoU2V0TWl0ZXJMaW1pdCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAg
ICAgIHJldHVybiBzaXplb2YoQ2xlYXJTaGFkb3cpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwT3V0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0VG9QYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXBPdXRUb1BhdGgpOworICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXBQYXRo
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgIHJl
dHVybiBzaXplb2YoQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3R2x5cGhzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdHbHlwaHMpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3SW1hZ2UpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KERyYXdUaWxlZEltYWdlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3VGlsZWRTY2FsZWRJbWFnZSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdJ
bWFnZUJ1ZmZlcik7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKERyYXdOYXRpdmVJbWFnZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1BhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1BhdHRlcm4pOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdSZWN0KTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3TGlu
ZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihEcmF3TGluZXNGb3JUZXh0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKERyYXdFbGxpcHNlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihEcmF3UGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ZvY3VzUmluZ1BhdGgpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihEcmF3Rm9jdXNSaW5nUmVjdHMpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0Ogor
ICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhDb2xvcik7
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgIHJldHVy
biBzaXplb2YoRmlsbFJlY3RXaXRoR3JhZGllbnQpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsQ29tcG9zaXRlZFJlY3Qp
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihGaWxsUm91bmRlZFJlY3QpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
SW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsSW5saW5lUGF0aCk7CisjZW5k
aWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihG
aWxsUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisgICAgICAgIHJldHVy
biBzaXplb2YoRmlsbEVsbGlwc2UpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToK
KyAgICAgICAgcmV0dXJuIHNpemVvZihQdXRJbWFnZURhdGEpOworICAgIGNhc2UgSXRlbVR5cGU6
OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgcmV0dXJuIHNpemVvZihQYWludEZyYW1lRm9y
TWVkaWEpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiBz
aXplb2YoU3Ryb2tlUmVjdCk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJv
a2VJbmxpbmVQYXRoKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tlUGF0aCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihTdHJva2VFbGxpcHNlKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xlYXJSZWN0
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOworICAgIGNhc2UgSXRlbVR5cGU6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEVuZFRyYW5zcGFy
ZW5jeUxheWVyKTsKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFwcGx5U3Ryb2tlUGF0dGVybik7CisgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihB
cHBseUZpbGxQYXR0ZXJuKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6CisgICAgICAgIHJldHVybiBzaXplb2YoQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgfQorfQorCitib29sIGlzRHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFj
dG9yOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgorICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kczoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTYXZlOgorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldENUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVD
YXA6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUpvaW46CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRl
eHQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0
aDoKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29s
IGlzSW5saW5lSXRlbShJdGVtVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdSZWN0czoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdJbWFnZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3TmF0aXZlSW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UGF0aDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5Rmls
bFBhdHRlcm46CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgIGNh
c2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgY2FzZSBJ
dGVtVHlwZTo6UmVzdG9yZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRDVE06CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAg
IGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5
cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jZTRmODU3OWFjODc3YmI4ODNiNDk2MzMzMjdmYTc4YzIzMTcxY2M2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlz
cGxheUxpc3QgeworCitlbnVtIGNsYXNzIEl0ZW1UeXBlIDogdWludDhfdCB7CisgICAgU2F2ZSwK
KyAgICBSZXN0b3JlLAorICAgIFRyYW5zbGF0ZSwKKyAgICBSb3RhdGUsCisgICAgU2NhbGUsCisg
ICAgQ29uY2F0ZW5hdGVDVE0sCisgICAgU2V0Q1RNLAorICAgIFNldElubGluZUZpbGxHcmFkaWVu
dCwKKyAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCisgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IsCisg
ICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAorICAgIFNldFN0YXRlLAorICAgIFNldExpbmVDYXAsCisg
ICAgU2V0TGluZURhc2gsCisgICAgU2V0TGluZUpvaW4sCisgICAgU2V0TWl0ZXJMaW1pdCwKKyAg
ICBDbGVhclNoYWRvdywKKyAgICBDbGlwLAorICAgIENsaXBPdXQsCisgICAgQ2xpcE91dFRvUGF0
aCwKKyAgICBDbGlwUGF0aCwKKyAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMsCisgICAgRHJhd0ds
eXBocywKKyAgICBEcmF3SW1hZ2UsCisgICAgRHJhd1RpbGVkSW1hZ2UsCisgICAgRHJhd1RpbGVk
U2NhbGVkSW1hZ2UsCisgICAgRHJhd0ltYWdlQnVmZmVyLAorICAgIERyYXdOYXRpdmVJbWFnZSwK
KyAgICBEcmF3UGF0dGVybiwKKyAgICBEcmF3UmVjdCwKKyAgICBEcmF3TGluZSwKKyAgICBEcmF3
TGluZXNGb3JUZXh0LAorICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIsCisgICAgRHJhd0Vs
bGlwc2UsCisgICAgRHJhd1BhdGgsCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgsCisgICAgRHJhd0Zv
Y3VzUmluZ1JlY3RzLAorICAgIEZpbGxSZWN0LAorICAgIEZpbGxSZWN0V2l0aENvbG9yLAorICAg
IEZpbGxSZWN0V2l0aEdyYWRpZW50LAorICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKKyAgICBGaWxs
Um91bmRlZFJlY3QsCisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgRmlsbElubGluZVBhdGgsCisjZW5kaWYKKyAgICBGaWxsUGF0
aCwKKyAgICBGaWxsRWxsaXBzZSwKKyAgICBQdXRJbWFnZURhdGEsCisgICAgUGFpbnRGcmFtZUZv
ck1lZGlhLAorICAgIFN0cm9rZVJlY3QsCisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisg
ICAgU3Ryb2tlSW5saW5lUGF0aCwKKyNlbmRpZgorICAgIFN0cm9rZVBhdGgsCisgICAgU3Ryb2tl
RWxsaXBzZSwKKyAgICBDbGVhclJlY3QsCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllciwKKyAg
ICBFbmRUcmFuc3BhcmVuY3lMYXllciwKKyNpZiBVU0UoQ0cpCisgICAgQXBwbHlTdHJva2VQYXR0
ZXJuLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCisgICAgQXBwbHlG
aWxsUGF0dGVybiwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorI2Vu
ZGlmCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciwKK307CisKK1dFQkNPUkVfRVhQT1JUIHNp
emVfdCBzaXplT2ZJdGVtSW5CeXRlcyhJdGVtVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGlz
SW5saW5lSXRlbShJdGVtVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGlzRHJhd2luZ0l0ZW0o
SXRlbVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmluZGV4IDQ3Yzc2MmUx
YTYxOTdkNmM4YjhjNDVmYTljZmRjMDVhMDNkZWU1MWIuLjYwYWU2MjY4MTMzZjM3ZWVlZWRjYjFi
NTRmNTEzNDZjNTM0YTM5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
QEAgLTUyLDE5NSArNTIsMTYgQEAgV1RGOjpDU3RyaW5nIEl0ZW06OmRlc2NyaXB0aW9uKCkgY29u
c3QKIH0KICNlbmRpZgogCi1JdGVtOjpJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgOiBtX3R5cGUo
dHlwZSkKLXsKLX0KLQotSXRlbTo6fkl0ZW0oKSA9IGRlZmF1bHQ7Ci0KLXNpemVfdCBJdGVtOjpz
aXplSW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQotewotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkp
IHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFNhdmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFJlc3RvcmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8VHJhbnNsYXRlPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFJvdGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNjYWxlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0Q1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldENUTT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFNldElubGluZUZpbGxHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVG
aWxsQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxT
ZXRTdGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExp
bmVEYXNoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNl
dE1pdGVyTGltaXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclNoYWRvdz4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRU
b1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PENsaXBQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBUb0RyYXdp
bmdDb21tYW5kcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
SW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJ
bWFnZUJ1ZmZlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdSZWN0PihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RHJhd0xpbmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0Ogot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3RWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRo
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXRoPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0Zv
Y3VzUmluZ1JlY3RzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0
aEdyYWRpZW50PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxGaWxsUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFB1dEltYWdlRGF0YT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JN
ZWRpYToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgot
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlw
c2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lM
YXllcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxFbmRUcmFuc3BhcmVuY3lMYXll
cj4oaXRlbSkpOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBh
dHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJu
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPihpdGVtKSk7Ci0jZW5kaWYK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pKTsKLSAgICB9
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3aW5nSXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3Vw
KCk7Ci0gICAgdHMgPDwgImV4dGVudCAiOwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0g
ICAgICAgIHRzIDw8IGl0ZW0uZXh0ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5r
bm93biI7Ci0gICAgCi0gICAgdHMuZW5kR3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURy
YXdpbmdJdGVtOjpEcmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogSXRlbSh0eXBlKQot
ewotfQotCi1EcmF3aW5nSXRlbTo6fkRyYXdpbmdJdGVtKCkgPSBkZWZhdWx0OwotCi1TYXZlOjpT
YXZlKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi17Ci19Ci0KLVNhdmU6On5TYXZlKCkg
PSBkZWZhdWx0OwotCiB2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LnNhdmUoKTsKIH0KIAotUmVzdG9yZTo6UmVzdG9yZSgpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpSZXN0b3JlKQotewotfQotCi1SZXN0b3JlOjp+UmVzdG9yZSgp
ID0gZGVmYXVsdDsKLQogdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLVRyYW5zbGF0ZTo6VHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUp
Ci0gICAgLCBtX3goeCkKLSAgICAsIG1feSh5KQotewotfQotCi1UcmFuc2xhdGU6On5UcmFuc2xh
dGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwpAQCAt
MjU0LDE0ICs3NSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBUcmFuc2xhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Sb3RhdGU6
OlJvdGF0ZShmbG9hdCBhbmdsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJvdGF0ZSkKLSAgICAs
IG1fYW5nbGUoYW5nbGUpCi17Ci19Ci0KLVJvdGF0ZTo6flJvdGF0ZSgpID0gZGVmYXVsdDsKLQog
dm9pZCBSb3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LnJvdGF0ZShtX2FuZ2xlKTsKQEAgLTI3NCwxNCArODcsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQog
ICAgIHJldHVybiB0czsKIH0KIAotU2NhbGU6OlNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNjYWxlKQotICAgICwgbV9zaXplKHNpemUpCi17Ci19Ci0K
LVNjYWxlOjp+U2NhbGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7CkBA
IC0yOTQsMTQgKzk5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNjYWxlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0Q1RNOjpT
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLVNldENU
TTo6flNldENUTSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7
CkBAIC0zMTQsMTQgKzExMSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTZXRDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Db25j
YXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKLSAgICAsIG1fdHJhbnNm
b3JtKHRyYW5zZm9ybSkKLXsKLX0KLQotQ29uY2F0ZW5hdGVDVE06On5Db25jYXRlbmF0ZUNUTSgp
ID0gZGVmYXVsdDsKLQogdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsK
QEAgLTMzNSw4ICsxMjQsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCiB9CiAKIFNldElubGluZUZpbGxH
cmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0
YShncmFkaWVudC5kYXRhKCkpCisgICAgOiBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQogICAgICwg
bV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnQuZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSgpKQogICAgICwgbV9zcHJlYWRNZXRob2QoZ3JhZGllbnQuc3ByZWFkTWV0aG9kKCkpCiAg
ICAgLCBtX2NvbG9yU3RvcENvdW50KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGdyYWRpZW50LnN0b3Bz
KCkuc2l6ZSgpKSkKQEAgLTM1OCwxNCArMTQ2LDggQEAgUmVmPEdyYWRpZW50PiBTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OmdyYWRpZW50KCkgY29uc3QKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAK
LVJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRl
KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRJbmxpbmVGaWxsR3JhZGllbnQoZ3JhZGllbnQpKTsKLX0KLQogU2V0SW5saW5lRmlsbEdyYWRp
ZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3Vu
dF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRp
ZW50OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFu
c2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNv
bG9yU3RvcENvdW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
KQotICAgICwgbV9kYXRhKGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKICAgICAsIG1fZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKICAgICAs
IG1fc3ByZWFkTWV0aG9kKHNwcmVhZE1ldGhvZCkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoY29s
b3JTdG9wQ291bnQpCkBAIC0zNzcsOCArMTU5LDYgQEAgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpT
ZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFMK
ICAgICB9CiB9CiAKLVNldElubGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVu
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8
PSBtYXhDb2xvclN0b3BDb3VudCkKQEAgLTQwNCwxMyArMTg0LDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVu
dCYpCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxp
bmVGaWxsQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbENvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1T
ZXRJbmxpbmVGaWxsQ29sb3I6On5TZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgU2V0SW5saW5lRmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC00MjIsMTMgKzE5
NSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRJbmxpbmVGaWxsQ29sb3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNl
dElubGluZVN0cm9rZUNvbG9yPiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVT
dHJva2VDb2xvcihjb2xvckRhdGEpKTsKLX0KLQotU2V0SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJ
bmxpbmVTdHJva2VDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVTdHJva2VDb2xv
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoY29sb3IoKSk7CkBAIC00NDAsMTMgKzIwNiw2IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVTdHJva2VD
b2xvciYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0U3Ryb2tlVGhpY2tuZXNz
PiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwotfQotCi1T
ZXRTdHJva2VUaGlja25lc3M6On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgU2V0U3Ryb2tlVGhpY2tuZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwpAQCAt
NDU5LDE5ICsyMTgsMTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB9CiAKIFNldFN0YXRlOjpT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0
U3RhdGUpCi0gICAgLCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICA6IG1fc3RhdGUoc3RhdGUs
IGZsYWdzKQogewogfQogCiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUp
Ci0gICAgLCBtX3N0YXRlKHN0YXRlQ2hhbmdlKQorICAgIDogbV9zdGF0ZShzdGF0ZUNoYW5nZSkK
IHsKIH0KIAotU2V0U3RhdGU6On5TZXRTdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdGF0
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIG1fc3RhdGUu
YXBwbHkoY29udGV4dCk7CkBAIC00ODMsMTQgKzIzOCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCiAgICAgcmV0
dXJuIHRzOwogfQogCi1TZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVDYXApCi0gICAgLCBtX2xpbmVDYXAobGluZUNhcCkK
LXsKLX0KLQotU2V0TGluZUNhcDo6flNldExpbmVDYXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0
TGluZUNhcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0TGluZUNhcChtX2xpbmVDYXApOwpAQCAtNTAyLDE1ICsyNDksNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYg
bGluZUNhcCkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVEYXNoOjpTZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldExpbmVEYXNoKQotICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAg
ICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCi17Ci19Ci0KLVNldExpbmVEYXNoOjp+U2V0TGlu
ZURhc2goKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFy
cmF5LCBtX2Rhc2hPZmZzZXQpOwpAQCAtNTIzLDE0ICsyNjEsNiBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNo
KQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZUpvaW46OlNldExpbmVKb2luKExpbmVKb2lu
IGxpbmVKb2luKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAgLCBtX2xp
bmVKb2luKGxpbmVKb2luKQotewotfQotCi1TZXRMaW5lSm9pbjo6flNldExpbmVKb2luKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsKQEAgLTU0
MiwxNCArMjcyLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldExpbmVKb2luJiBsaW5lSm9pbikKICAgICByZXR1cm4gdHM7CiB9CiAKLVNl
dE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQpCi0gICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkK
LXsKLX0KLQotU2V0TWl0ZXJMaW1pdDo6flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgU2V0TWl0ZXJMaW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwpAQCAtNTYxLDI2ICsy
ODMsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNldE1pdGVyTGltaXQmIG1pdGVyTGltaXQpCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGVh
clNoYWRvdzo6Q2xlYXJTaGFkb3coKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cp
Ci17Ci19Ci0KLUNsZWFyU2hhZG93Ojp+Q2xlYXJTaGFkb3coKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
Q2xlYXJTaGFkb3c6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmNsZWFyU2hhZG93KCk7CiB9CiAKLUNsaXA6OkNsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAsIG1fcmVjdChyZWN0KQot
ewotfQotCi1DbGlwOjp+Q2xpcCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7
CkBAIC01OTIsMTQgKzI5OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDbGlwJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91
dDo6Q2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpD
bGlwT3V0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXBPdXQ6On5DbGlwT3V0KCkg
PSBkZWZhdWx0OwotCiB2b2lkIENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9yZWN0KTsKQEAgLTYxMSwxNCArMzEw
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENsaXBPdXQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0VG9QYXRoOjpDbGlw
T3V0VG9QYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0
VG9QYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUNsaXBPdXRUb1BhdGg6On5DbGlw
T3V0VG9QYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRo
KTsKQEAgLTYzMCwxNSArMzIxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXRUb1BhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi1DbGlwUGF0aDo6Q2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1
bGUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQot
ICAgICwgbV93aW5kUnVsZSh3aW5kUnVsZSkKLXsKLX0KLQotQ2xpcFBhdGg6On5DbGlwUGF0aCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsK
QEAgLTY1MSwxNiArMzMzLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IENsaXBQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdp
bmdDb21tYW5kcykKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kcykK
LSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX2NvbG9yU3BhY2UoY29s
b3JTcGFjZSkKLSAgICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRz
KSkKLXsKLX0KLQotQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjp+Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
KCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBUb0RyYXdpbmdDb21tYW5kczo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKG1fZGVzdGluYXRpb24sIG1fY29sb3JTcGFjZSwgWyZdIChHcmFwaGljc0NvbnRleHQm
IGNsaXBwaW5nQ29udGV4dCkgewpAQCAtNjczLDEzICszNDUsMTEgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBUb0RyYXdpbmdDb21tYW5k
cyYgaXRlbSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3RpbmF0aW9uIiwgaXRlbS5kZXN0
aW5hdGlvbigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yLXNwYWNlIiwgaXRlbS5jb2xv
clNwYWNlKCkpOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgiZHJhd2luZy1jb21tYW5kcy1jb3VudCIs
IGl0ZW0uZHJhd2luZ0NvbW1hbmRzKCkuaXRlbUNvdW50KCkpOwogICAgIHJldHVybiB0czsKIH0K
IAogRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhC
dWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4
PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5
cGhzKQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250
KG1ha2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQogICAgICwgbV9nbHlwaHMoV1RG
TW92ZShnbHlwaHMpKQogICAgICwgbV9hZHZhbmNlcyhXVEZNb3ZlKGFkdmFuY2VzKSkKICAgICAs
IG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCkBAIC02ODksOCArMzU5LDcgQEAgRHJhd0dseXBo
czo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwg
MTI4PiYmIGdseXBocywKIH0KIAogRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFu
Y2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZv
bnQpKQorICAgIDogbV9mb250KG1ha2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQog
ICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9kZShz
bW9vdGhpbmdNb2RlKQogewpAQCAtNzAzLDE5ICszNzIsMTcgQEAgRHJhd0dseXBoczo6RHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEcKICAgICBjb21wdXRlQm91bmRzKCk7CiB9CiAKLURyYXdHbHlwaHM6On5EcmF3R2x5cGhz
KCkgPSBkZWZhdWx0OwotCiBpbmxpbmUgR2x5cGhCdWZmZXIgRHJhd0dseXBoczo6Z2VuZXJhdGVH
bHlwaEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgcmVzdWx0OwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5h
ZGQobV9nbHlwaHNbaV0sIG1fZm9udC5nZXQoKSwgbV9hZHZhbmNlc1tpXSwgR2x5cGhCdWZmZXI6
Om5vT2Zmc2V0KTsKKyAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgKm1fZm9udCwgbV9h
ZHZhbmNlc1tpXSwgR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiB2b2lkIERyYXdHbHlwaHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKLSAgICBjb250ZXh0LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVy
KCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsK
KyAgICBjb250ZXh0LmRyYXdHbHlwaHMoKm1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAw
LCBtX2dseXBocy5zaXplKCksIGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAK
IHZvaWQgRHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcygpCkBAIC03MzUsMTQgKzQwMiw4IEBAIHZv
aWQgRHJhd0dseXBoczo6Y29tcHV0ZUJvdW5kcygpCiAgICAgfQogfQogCi1PcHRpb25hbDxGbG9h
dFJlY3Q+IERyYXdHbHlwaHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fYm91bmRzOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1F
OiBkdW1wIG1vcmUgc3R1ZmYuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBp
dGVtLmxvY2FsQW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50Iiwg
aXRlbS5hbmNob3JQb2ludCgpKTsKQEAgLTc1MSwxNyArNDEyLDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAs
IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1E
cmF3SW1hZ2U6On5EcmF3SW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3SW1h
Z2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1faW1hZ2VQYWludGlu
Z09wdGlvbnMpOwpAQCAtNzY5LDI2ICs0MTksMTIgQEAgdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRJbWFn
ZTo6RHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTaXplKHRpbGVTaXpl
KQotICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25z
KGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRJbWFnZTo6fkRyYXdUaWxl
ZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFj
aW5nLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc5Niw3ICs0MzIsNiBAQCB2b2lkIERy
YXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGls
ZWRJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwpAQCAtODA1
LDIwICs0NDAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd1RpbGVkSW1hZ2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3
VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVT
Y2FsZUZhY3RvcikKLSAgICAsIG1faFJ1bGUoaFJ1bGUpCi0gICAgLCBtX3ZSdWxlKHZSdWxlKQot
ICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0K
LQotRHJhd1RpbGVkU2NhbGVkSW1hZ2U6On5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpID0gZGVmYXVs
dDsKLQogdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQo
KSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBt
X3ZSdWxlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTgyNiwyNCArNDQ3LDEyIEBAIHZv
aWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdUaWxlZFNjYWxlZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIs
IGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0u
c291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5h
dGlvbigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdl
QnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKQotICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5hdGlv
blJlY3QoZGVzdFJlY3QpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQotewotfQotCi1EcmF3SW1hZ2VCdWZmZXI6On5EcmF3SW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAg
LTg1Miw3ICs0NjEsNiBAQCB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdJbWFnZUJ1ZmZlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3Rl
LXJlc291cmNlLWlkZW50aWZpZXIiLCBpdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uUmVjdCgpKTsK
QEAgLTg2MCw4ICs0NjgsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVtKQogfQogCiBEcmF3TmF0aXZlSW1h
Z2U6OkRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZSkKLSAgICAsIG1faW1hZ2Uo
aW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICwgbV9pbWFnZVNpemUoaW1hZ2VTaXpl
KQogICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCiAgICAgLCBtX3NyY1JlY3Qoc3Jj
UmVjdCkKQEAgLTg2OSw4ICs0NzYsNiBAQCBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFn
ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaQogewogfQog
Ci1EcmF3TmF0aXZlSW1hZ2U6On5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFnZVNpemUsIG1fZGVz
dGluYXRpb25SZWN0LCBtX3NyY1JlY3QsIG1fb3B0aW9ucyk7CkBAIC04NzgsNyArNDgzLDYgQEAg
dm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCiAgICAg
dHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBAIC04ODYs
OCArNDkwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIH0KIAogRHJhd1BhdHRlcm46OkRyYXdQYXR0
ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3UGF0dGVybikKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdl
KQogICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgLCBtX3Rp
bGVSZWN0KHRpbGVSZWN0KQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKQEAgLTg5Nyw4
ICs1MDAsNiBAQCBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlYwogewogfQogCi1EcmF3UGF0dGVybjo6
fkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UGF0dGVybiht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFuc2Zv
cm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcHRpb25zKTsKQEAgLTkwNiw3ICs1MDcsNiBAQCB2
b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
UGF0dGVybiYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFu
c2Zvcm0oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0
KCkpOwpAQCAtOTE2LDE1ICs1MTYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi1EcmF3UmVjdDo6RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAg
LCBtX3JlY3QocmVjdCkKLSAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykK
LXsKLX0KLQotRHJhd1JlY3Q6On5EcmF3UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
ZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7CkBAIC05MzIsMjEgKzUyMywxMSBA
QCB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
UmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygp
KTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdMaW5lOjpEcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3TGluZSkKLSAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAsIG1fcG9p
bnQyKHBvaW50MikKLXsKLX0KLQotRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVsdDsKLQog
T3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtOTYxLDE1ICs1NDIs
MTMgQEAgdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0xpbmUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50MSgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKIERyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0KQotICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgOiBtX2Js
b2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNo
b3IpCiAgICAgLCBtX3dpZHRocyh3aWR0aHMpCiAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3Mp
CkBAIC05NzgsOCArNTU3LDYgQEAgRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFMKIHsKIH0KIAotRHJh
d0xpbmVzRm9yVGV4dDo6fkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJh
d0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywgbV93aWR0
aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwpAQCAtOTk5LDcgKzU3Niw2IEBAIE9wdGlv
bmFsPEZsb2F0UmVjdD4gRHJhd0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHko
ImJsb2NrLWxvY2F0aW9uIiwgaXRlbS5ibG9ja0xvY2F0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInBvaW50IiwgaXRlbS5wb2ludCgpKTsKQEAgLTEwMTEsMTUgKzU4Nyw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNG
b3JUZXh0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1f
c3R5bGUoc3R5bGUpCi17Ci19Ci0KLURyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6On5EcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9yZWN0LCBtX3N0eWxlKTsKQEAgLTEw
MzIsMTkgKzU5OSwxMCBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAg
ICByZXR1cm4gdHM7CiB9CiAKLURyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0gICAg
LCBtX3JlY3QocmVjdCkKLXsKLX0KLQotRHJhd0VsbGlwc2U6On5EcmF3RWxsaXBzZSgpID0gZGVm
YXVsdDsKLQogdm9pZCBEcmF3RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKQEAgLTEwNTYsMTQg
KzYxNCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdQYXRoOjpE
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRy
YXdQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLURyYXdQYXRoOjp+RHJhd1BhdGgo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICNpZiBVU0UoQ0cpCkBAIC0xMDczLDI0ICs2MjMsMTIgQEAgdm9pZCBE
cmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogI2VuZGlmCiB9
CiAKLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3UGF0aCYgaXRlbSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3UGF0aCYpCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKLS8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0
aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICAvLyBGSVhNRTogYWRk
IGxvZ2dpbmcgZm9yIHBhdGhzLgogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ZvY3VzUmluZ1Bh
dGg6OkRyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV93aWR0aCh3
aWR0aCkKLSAgICAsIG1fb2Zmc2V0KG9mZnNldCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19
Ci0KLURyYXdGb2N1c1JpbmdQYXRoOjp+RHJhd0ZvY3VzUmluZ1BhdGgoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29m
ZnNldCwgbV9jb2xvcik7CkBAIC0xMTA1LDcgKzY0Myw2IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4g
RHJhd0ZvY3VzUmluZ1BhdGg6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3Rm9jdXNSaW5nUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRl
bS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zm
c2V0IiwgaXRlbS5vZmZzZXQoKSk7CkBAIC0xMTE0LDE2ICs2NTEsMTMgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRo
JiBpdGVtKQogfQogCiBEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHMpCi0gICAgLCBtX3JlY3RzKHJlY3RzKQorICAgIDogbV9yZWN0cyhyZWN0cykKICAg
ICAsIG1fd2lkdGgod2lkdGgpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NvbG9y
KGNvbG9yKQogewogfQogCi1EcmF3Rm9jdXNSaW5nUmVjdHM6On5EcmF3Rm9jdXNSaW5nUmVjdHMo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcmVj
dHMsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExNDAsNyArNjc0LDYgQEAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnMKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdHMiLCBpdGVtLnJlY3RzKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgi
LCBpdGVtLndpZHRoKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZz
ZXQoKSk7CkBAIC0xMTQ4LDE0ICs2ODEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotRmlsbFJlY3Q6OkZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0
KQotewotfQotCi1GaWxsUmVjdDo6fkZpbGxSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5maWxsUmVjdChtX3JlY3QpOwpAQCAtMTE2MywyMCArNjg4LDEwIEBAIHZvaWQgRmlsbFJlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAot
RmlsbFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aENvbG9yKQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQot
ewotfQotCi1GaWxsUmVjdFdpdGhDb2xvcjo6fkZpbGxSZWN0V2l0aENvbG9yKCkgPSBkZWZhdWx0
OwotCiB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOwpAQCAt
MTE4NCwyMSArNjk5LDE3IEBAIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3Ii
LCBpdGVtLmNvbG9yKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRmlsbFJlY3RXaXRoR3JhZGll
bnQ6OkZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50KQotICAgICwgbV9yZWN0KHJlY3QpCisgICAgOiBtX3JlY3QocmVjdCkKICAgICAsIG1fZ3Jh
ZGllbnQoZ3JhZGllbnQpCiB7CiB9CiAKLUZpbGxSZWN0V2l0aEdyYWRpZW50Ojp+RmlsbFJlY3RX
aXRoR3JhZGllbnQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxS
ZWN0KG1fcmVjdCwgbV9ncmFkaWVudC5nZXQoKSk7CkBAIC0xMjA2LDIzICs3MTcsMTEgQEAgdm9p
ZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3RXaXRoR3JhZGllbnQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTogbG9nIGdyYWRpZW50Lgog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKLUZpbGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi0gICAg
LCBtX29wKG9wKQotICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1GaWxsQ29t
cG9zaXRlZFJlY3Q6On5GaWxsQ29tcG9zaXRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmls
bENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2Rl
KTsKQEAgLTEyMzAsNyArNzI5LDYgQEAgdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
ImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1v
cGVyYXRpb24iLCBpdGVtLmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwpAQCAtMTIzOCwxNiArNzM2LDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSb3VuZGVk
UmVjdDo6RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29s
b3IoY29sb3IpCi0gICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxSb3Vu
ZGVkUmVjdDo6fkZpbGxSb3VuZGVkUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUm91bmRl
ZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmZpbGxSb3VuZGVkUmVjdChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKQEAgLTEy
NTUsMjMgKzc0MywxMiBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yb3VuZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9y
IiwgaXRlbS5jb2xvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVt
LmJsZW5kTW9kZSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAg
ICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3Qp
Ci0gICAgLCBtX2NvbG9yKGNvbG9yKQotewotfQotCi1GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6
fkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVS
ZWN0LCBtX2NvbG9yKTsKQEAgLTEyNzksNyArNzU2LDYgQEAgdm9pZCBGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0ZW0ucm91bmRlZEhv
bGVSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwpA
QCAtMTI4OCwxNCArNzY0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGUKIAogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgoY29u
c3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkZpbGxJbmxpbmVQYXRoKQotICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKLXsKLX0KLQotRmls
bElubGluZVBhdGg6On5GaWxsSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsSW5s
aW5lUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuZmlsbFBhdGgocGF0aCgpKTsKQEAgLTEzMDMsMjEgKzc3MSwxMiBAQCB2b2lkIEZpbGxJ
bmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsSW5saW5l
UGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotRmls
bFBhdGg6OkZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbFBhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRmlsbFBhdGg6On5G
aWxsUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKQEAg
LTEzMjUsMTkgKzc4NCwxMCBAQCB2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0
ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxFbGxpcHNlOjpGaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bEVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotRmlsbEVsbGlwc2U6On5GaWxs
RWxsaXBzZSgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0
KTsKQEAgLTEzNDUsMTQgKzc5NSwxMiBAQCB2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIFB1dEltYWdlRGF0
YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNy
Y1JlY3QpCisgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQ
b2ludCkKICAgICAsIG1faW1hZ2VEYXRhKGltYWdlRGF0YS5kZWVwQ2xvbmUoKSkgLy8gVGhpcyBj
b3B5IGlzIGFjdHVhbGx5IHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBzZW1hbnRpY3Mgb2YgcHV0
SW1hZ2VEYXRhKCkuCiAgICAgLCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQpAQCAtMTM2MSw4
ICs4MDksNyBAQCBQdXRJbWFnZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmCiB9CiAKIFB1dEltYWdlRGF0YTo6UHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURh
dGE+JiYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3Qp
CisgICAgOiBtX3NyY1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkK
ICAgICAsIG1faW1hZ2VEYXRhKFdURk1vdmUoaW1hZ2VEYXRhKSkKICAgICAsIG1faW5wdXRGb3Jt
YXQoaW5wdXRGb3JtYXQpCkBAIC0xMzcwLDggKzgxNyw2IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+
JiYKIHsKIH0KIAotUHV0SW1hZ2VEYXRhOjp+UHV0SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OwotCiB2
b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICAv
LyBTaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdhdGUuCkBAIC0xMzgwLDcgKzgyNSw2IEBA
IHZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VE
YXRhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3Jt
YXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZURhdGFTaXplIiwgaXRlbS5pbWFnZURh
dGEoKS5zaXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVj
dCgpKTsKQEAgLTEzODksMzIgKzgzMywxMiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQogICAgIHJldHVybiB0
czsKIH0KIAotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVh
dGUoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0
aW5hdGlvbikpOwotfQotCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVk
aWE6OmNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1l
Rm9yTWVkaWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKLX0KLQogUGFpbnRGcmFtZUZvck1l
ZGlhOjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKKyAgICA6
IG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQogICAgICwgbV9kZXN0aW5hdGlvbihk
ZXN0aW5hdGlvbikKIHsKIH0KIAotUGFpbnRGcmFtZUZvck1lZGlhOjpQYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlh
KQotICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQotewotfQotCi1QYWludEZyYW1lRm9yTWVkaWE6On5QYWludEZyYW1lRm9yTWVk
aWEoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxl
Z2F0ZS4KQEAgLTE0MjMsMjAgKzg0NywxMCBAQCB2b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBhaW50RnJhbWVGb3JNZWRpYSYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVy
biB0czsKIH0KIAotU3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0
KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCi17Ci19
Ci0KLVN0cm9rZVJlY3Q6On5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9h
dFJlY3Q+IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKQEAgLTE0NTEsNyArODY1LDYg
QEAgdm9pZCBTdHJva2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
dHJva2VSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOwogICAg
IHJldHVybiB0czsKQEAgLTE0NzQsMTkgKzg4NywxMCBAQCB2b2lkIFN0cm9rZVBhdGg6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCiB7Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJv
a2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17
Ci19Ci0KLVN0cm9rZUVsbGlwc2U6On5TdHJva2VFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiBPcHRp
b25hbDxGbG9hdFJlY3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBj
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTUwMyw3ICs5MDcsNiBAQCB2b2lkIFN0cm9r
ZUVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlw
c2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0
dXJuIHRzOwogfQpAQCAtMTUyNywzNyArOTMwLDEyIEBAIHZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlSW5saW5lUGF0aCYgaXRl
bSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKLVN0cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0
aERhdGEmIHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUlubGlu
ZVBhdGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1TdHJva2VJbmxpbmVQ
YXRoOjp+U3Ryb2tlSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogI2VuZGlmIC8vIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogCi1TdHJva2VQYXRoOjpTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAsIG1fcGF0
aChwYXRoKQotewotfQotCi1TdHJva2VQYXRoOjp+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKLQot
Q2xlYXJSZWN0OjpDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkNsZWFyUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1D
bGVhclJlY3Q6On5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJSZWN0OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVhclJl
Y3QobV9yZWN0KTsKQEAgLTE1NjUsMTkgKzk0MywxMCBAQCB2b2lkIENsZWFyUmVjdDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJSZWN0JiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotQmVnaW5U
cmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAg
LCBtX29wYWNpdHkob3BhY2l0eSkKLXsKLX0KLQotQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6fkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwpAQCAtMTU4NSw1NyArOTU0
LDI4IEBAIHZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUVu
ZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi17Ci19Ci0KLUVuZFRyYW5zcGFy
ZW5jeUxheWVyOjp+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKICNpZiBVU0UoQ0cp
Ci1BcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCi17Ci19Ci0KLUFwcGx5U3Ryb2tlUGF0dGVybjo6
fkFwcGx5U3Ryb2tlUGF0dGVybigpID0gZGVmYXVsdDsKIAogdm9pZCBBcHBseVN0cm9rZVBhdHRl
cm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi1BcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQ
YXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCi17Ci19Ci0K
LUFwcGx5RmlsbFBhdHRlcm46On5BcHBseUZpbGxQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lk
IEFwcGx5RmlsbFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KICNlbmRpZgogCi1BcHBseURl
dmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9y
KQotICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAsIG1f
c2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCi17Ci19Ci0KLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
On5BcHBseURldmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7CkBAIC0xNjQ3
LDcgKzk4Nyw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBBcHBseURldmljZVNjYWxlRmFjdG9yJiBpdGVtCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRl
bVR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgSXRlbVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwpAQCAtMTcxOCwxNzIgKzEwNTgsMTcwIEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVt
VHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7Ci0gICAgVGV4dFN0cmVhbTo6R3Jv
dXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKLSAgICAvLyBGSVhN
RTogTWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJh
dGlvbiBzd2l0Y2hlcwogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKICAgICBjYXNlIEl0ZW1U
eXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTY2Fs
ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dENUTT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
Q29uY2F0ZW5hdGVDVE0+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmls
bEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdy
YWRpZW50PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
U2V0U3Ryb2tlVGhpY2tuZXNzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNh
cD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExp
bmVEYXNoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TWl0ZXJM
aW1pdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PENsaXA+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDbGlwT3V0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PENsaXBPdXRUb1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXBQYXRoPigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdHbHlwaHM+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0ltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlPigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERy
YXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PERyYXdOYXRpdmVJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxE
cmF3UmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0xpbmU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3TGlu
ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4
dDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0VsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3RWxsaXBz
ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8RHJhd1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PEZpbGxSZWN0V2l0aENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJl
Y3RXaXRoR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RmlsbElubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxQYXRo
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFBhdGg+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxFbGxp
cHNlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxQYWlu
dEZyYW1lRm9yTWVkaWE+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxQYWludEZyYW1l
Rm9yTWVkaWE+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJl
Y3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxTdHJva2VSZWN0PigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5k
aWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxTdHJva2VQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlUGF0aD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PFN0cm9rZUVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xlYXJSZWN0PigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgLy8g
SXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAppbmRleCBmMDE1YmU1ZTg2NjA2ZWNjMmY2Y2U4NTdjMWY3MTE2NzY5NGZlOGUzLi4yYTQ2
MjZlOGViMzE1MGQ4MTg1NGNmYjJhZTJhYjYzZTMyYzBhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmgKQEAgLTUxLDMyMCArNTEsMTYzIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5n
T3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW0g
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTYXZlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTYXZlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3aW5n
SXRlbSgpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAg
Y29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgp
OyB9Ci0KLSAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Ym9vbD4obV9leHRlbnQpOyB9Ci0KLSAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2lu
ZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVk
ZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0
dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLSAgICAvLyBTb21lIG9wZXJhdGlv
bnMgKGUuZy4gcHV0SW1hZ2VEYXRhKSBvcGVyYXRlIGluIGdsb2JhbCBib3VuZHMuIEZvciB0aGVz
ZSBvcGVyYXRpb25zLCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLSAgICAvLyBJZiBhcHBsaWNhYmxl
LCB0aGUgcmV0dXJuIHZhbHVlIG5lZWRzIHRvIGluY2x1ZGUgdGhlIGVmZmVjdHMgb2Ygc2hhZG93
cywgY2xpcHBpbmcsIGV0Yy4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLXByaXZhdGU6Ci0gICAg
Ym9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywg
dGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLWNsYXNzIFNhdmUgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNh
dmU+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsK
LSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpSZXN0b3JlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TYXZlKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFNhdmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIFNhdmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2F2ZTo6ZW5jb2Rl
KEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFNhdmU+PiBTYXZlOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFNhdmU6
OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBSZXN0b3JlIDogcHVibGljIEl0ZW0geworY2xhc3MgVHJh
bnNsYXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3JlKTsKLSAgICB9Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXN0b3JlKCk7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxSZXN0b3JlPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXN0b3JlKCk7Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgUmVzdG9yZTo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBSZXN0b3Jl
OjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFJlc3RvcmU6OmNyZWF0ZSgpOwotfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6VHJhbnNs
YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLWNsYXNzIFRy
YW5zbGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0
ZT4gY3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCisgICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCisgICAgICAgIDogbV94KHgpCisgICAgICAgICwgbV95KHkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflRyYW5zbGF0ZSgpOwotCiAgICAgZmxvYXQgeCgpIGNvbnN0IHsg
cmV0dXJuIG1feDsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+
IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAg
IGZsb2F0IG1feDsKLSAgICBmbG9hdCBtX3k7Citwcml2YXRlOgorICAgIGZsb2F0IG1feCB7IDAg
fTsKKyAgICBmbG9hdCBtX3kgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBUcmFuc2xhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV94OwotICAgIGVuY29kZXIgPDwgbV95OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IFRyYW5zbGF0ZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAgZGVjb2RlciA+PiB4
OwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlv
bmFsPGZsb2F0PiB5OwotICAgIGRlY29kZXIgPj4geTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gVHJhbnNsYXRlOjpjcmVhdGUoKngsICp5
KTsKLX0KLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgUm90YXRlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90
YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBSb3Rh
dGUoZmxvYXQgYW5nbGUpCisgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJvdGF0ZSgpOwotCiAgICAgZmxvYXQgYW5nbGUo
KSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxSb3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFJvdGF0ZShmbG9hdCBhbmdsZSk7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFucy4KK3By
aXZhdGU6CisgICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFJvdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2FuZ2xlOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJvdGF0ZT4+IFJvdGF0ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGFuZ2xlOwotICAgIGRlY29kZXIgPj4g
YW5nbGU7Ci0gICAgaWYgKCFhbmdsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBSb3RhdGU6OmNyZWF0ZSgqYW5nbGUpOwotfQotCi1jbGFzcyBTY2FsZSA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNjYWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNjYWxl
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAg
ICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNjYWxlKHNpemUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TY2Fs
ZSgpOwotCiAgICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PFNjYWxlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBTY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAK
K3ByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIFNjYWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fc2l6ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxTY2FsZT4+IFNjYWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDxGbG9hdFNpemU+IHNjYWxlOwotICAgIGRlY29kZXIgPj4gc2NhbGU7Ci0gICAgaWYg
KCFzY2FsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTY2Fs
ZTo6Y3JlYXRlKCpzY2FsZSk7Ci19Ci0KLWNsYXNzIFNldENUTSA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFNldENUTSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRDVE0+IGNyZWF0ZShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldENUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNldENUTShtYXRyaXgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5TZXRDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldENUTT4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBTZXRDVE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8U2V0Q1RNPj4gU2V0Q1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKLSAgICBkZWNvZGVyID4+
IHRyYW5zZm9ybTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBTZXRDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xh
c3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDb25jYXRlbmF0ZUNUTSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRlQ1RNKG1hdHJpeCkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNvbmNhdGVuYXRlQ1RNKCk7Ci0K
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxDb25jYXRlbmF0ZUNUTT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENv
bmNhdGVuYXRlQ1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fdHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPENvbmNhdGVuYXRlQ1RNPj4gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAg
IGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUoKnRy
YW5zZm9ybSk7Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ4X3QgbWF4Q29sb3JTdG9wQ291bnQgPSA0OwogCi0gICAgc3RhdGljIFJl
ZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFkaWVudCYpOwotICAgIHN0
YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7Ci0KLSAgICB2aXJ0dWFsIH5TZXRJ
bmxpbmVGaWxsR3JhZGllbnQoKTsKLQotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25z
dDsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dElubGluZUZpbGxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShmbG9hdCBvZmZzZXRzW21h
eENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50
XSwKLSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBz
cHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGllbnQob2Zmc2V0cywgY29sb3JzLCBk
YXRhLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIHNwcmVhZE1ldGhvZCwgY29sb3JTdG9w
Q291bnQpKTsKLSAgICB9Ci0KKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGll
bnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zm
c2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0
b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiwKICAgICAgICAgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9k
LCB1aW50OF90IGNvbG9yU3RvcENvdW50KTsKIAotICAgIFNldElubGluZUZpbGxHcmFkaWVudChj
b25zdCBHcmFkaWVudCYpOworICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50
Jik7CisgICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorCitwcml2YXRlOgogICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0
b3BDb3VudF07CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRd
OwogICAgIEdyYWRpZW50OjpEYXRhIG1fZGF0YTsKQEAgLTM3MywxOTggKzIxNiw3OSBAQCBwcml2
YXRlOgogICAgIHVpbnQ4X3QgbV9jb2xvclN0b3BDb3VudCB7IDAgfTsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENvdW50Owot
ICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAg
ICAgICBlbmNvZGVyIDw8IG1fb2Zmc2V0c1tpXTsKLSAgICAgICAgZW5jb2RlciA8PCBQYWNrZWRD
b2xvcjo6UkdCQSB7IG1fY29sb3JzW2ldIH0udmFsdWU7Ci0gICAgfQotICAgIGVuY29kZXIgPDwg
bV9kYXRhOwotICAgIGVuY29kZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0g
ICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQ4X3Q+
IGNvbG9yU3RvcENvdW50OwotICAgIGRlY29kZXIgPj4gY29sb3JTdG9wQ291bnQ7Ci0gICAgaWYg
KCFjb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlm
ICgqY29sb3JTdG9wQ291bnQgPiBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAg
IFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgZm9yICh1aW50
OF90IGkgPSAwOyBpIDwgKmNvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgT3B0aW9uYWw8
ZmxvYXQ+IG9mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBvZmZzZXQ7Ci0gICAgICAgIGlmICgh
b2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBPcHRp
b25hbDx1aW50MzJfdD4gY29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgICAg
IGlmICghY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAg
IGNvbG9yc1tpXSA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqY29sb3IgfSk7Ci0gICAg
ICAgIG9mZnNldHNbaV0gPSAqb2Zmc2V0OwotICAgIH0KLQotICAgIE9wdGlvbmFsPEdyYWRpZW50
OjpEYXRhPiBkYXRhOwotICAgIGRlY29kZXIgPj4gZGF0YTsKLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+
IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBkZWNvZGVyID4+IGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEdyYWRpZW50U3By
ZWFkTWV0aG9kPiBzcHJlYWRNZXRob2Q7Ci0gICAgZGVjb2RlciA+PiBzcHJlYWRNZXRob2Q7Ci0g
ICAgaWYgKCFzcHJlYWRNZXRob2QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICByZXR1cm4geyBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShvZmZzZXRzLCBjb2xvcnMs
ICpkYXRhLCAqZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCAqc3ByZWFkTWV0aG9kLCAqY29s
b3JTdG9wQ291bnQpIH07Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxDb2xvciA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90
Pik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xvcigpOwot
Ci0gICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGlu
ZUZpbGxDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0SW5saW5l
RmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRh
KQorICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQorICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xv
ckRhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVGaWxs
Q29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
UGFja2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxDb2xvcj4+IFNldElubGlu
ZUZpbGxDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWlu
dDMyX3Q+IHZhbHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRJbmxpbmVGaWxsQ29s
b3I6OmNyZWF0ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKLX0KLQot
Y2xhc3MgU2V0SW5saW5lU3Ryb2tlQ29sb3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRJbmxp
bmVTdHJva2VDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxT
ZXRJbmxpbmVTdHJva2VDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZVN0cm9rZUNvbG9yKCk7Ci0KLSAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVTdHJva2VDb2xv
cihTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0
SW5saW5lU3Ryb2tlQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQorICAg
ICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFNSR0JBPHVpbnQ4
X3Q+IG1fY29sb3JEYXRhOwotfTsKKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsg
bV9jb2xvckRhdGEgfTsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxp
bmVTdHJva2VDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IFNldElubGluZVN0cm9r
ZUNvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJf
dD4gdmFsdWU7Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAotICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRl
KGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQorcHJpdmF0ZToKKyAg
ICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKK307CiAKLWNsYXNzIFNldFN0cm9rZVRoaWNr
bmVzcyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0cm9rZVRoaWNrbmVzcyB7CiBwdWJsaWM6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+IGNyZWF0
ZShmbG9hdCB0aGlja25lc3MpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ry
b2tlVGhpY2tuZXNzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKIAotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1f
dGhpY2tuZXNzOyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgogICAgIFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi0gICAgICAgIDogSXRl
bShJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAsIG1fdGhpY2tuZXNzKHRo
aWNrbmVzcykKKyAgICAgICAgOiBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgewogICAgIH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKLX07CisgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgU2V0U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fdGhpY2tuZXNzOwotfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
U2V0U3Ryb2tlVGhpY2tuZXNzPj4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gdGhpY2tuZXNzOwotICAgIGRlY29kZXIg
Pj4gdGhpY2tuZXNzOwotICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
IAotICAgIHJldHVybiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSgqdGhpY2tuZXNzKTsKLX0K
K3ByaXZhdGU6CisgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Cit9OwogCi1jbGFzcyBTZXRT
dGF0ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOwotICAg
IH0KLQotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZUNoYW5nZSkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0YXRlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+U2V0U3RhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYpOwogICAgIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIApAQCAtNTczLDE0ICsyOTcsMTQgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyk7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIFdF
QkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7CiB9OwogCkBAIC02NjksNyArMzkzLDcgQEAgdm9pZCBT
ZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCitPcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKICAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOwpA
QCAtODk2LDY4ICs2MjAsNTUgQEAgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3RhdGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIH0KIAot
ICAgIHJldHVybiBTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlKTsKKyAgICByZXR1cm4geyBz
dGF0ZUNoYW5nZSB9OwogfQogCi1jbGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0geworY2xh
c3MgU2V0TGluZUNhcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lQ2FwPiBjcmVh
dGUoTGluZUNhcCBsaW5lQ2FwKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOworCisgICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCisgICAgICAgIDog
bV9saW5lQ2FwKGxpbmVDYXApCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRMaW5lQ2FwKGxpbmVDYXApKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5TZXRMaW5lQ2FwKCk7Ci0gICAgCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lQ2FwOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxTZXRMaW5lQ2FwPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRMaW5lQ2FwKExpbmVDYXApOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBMaW5lQ2FwIG1fbGluZUNhcDsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVDYXA6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9saW5lQ2FwOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBTZXRMaW5lQ2FwOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lQ2FwPiBsaW5lQ2FwOwot
ICAgIGRlY29kZXIgPj4gbGluZUNhcDsKLSAgICBpZiAoIWxpbmVDYXApCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUNhcDo6Y3JlYXRlKCpsaW5lQ2Fw
KTsKLX0KLQotY2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5l
RGFzaCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0
IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBtX2Rh
c2hBcnJheShkYXNoQXJyYXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJyYXks
IGRhc2hPZmZzZXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRM
aW5lRGFzaCgpOwotCiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBtX2Rhc2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX2Rhc2hPZmZzZXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7CiAgICAgZmxvYXQgbV9k
YXNoT2Zmc2V0OwogfTsKQEAgLTk3MCw3ICs2ODEsNyBAQCB2b2lkIFNldExpbmVEYXNoOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7CiAgICAg
ZGVjb2RlciA+PiBkYXNoQXJyYXk7CkBAIC05ODIsMjE1ICs2OTMsMTM4IEBAIE9wdGlvbmFsPFJl
ZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICBpZiAoIWRhc2hPZmZzZXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gU2V0TGluZURhc2g6OmNyZWF0ZSgqZGFzaEFycmF5LCAqZGFzaE9mZnNldCk7CisgICAg
cmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwogfQogCi1jbGFzcyBTZXRMaW5l
Sm9pbiA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVKb2luIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZUpv
aW4oTGluZUpvaW4gbGluZUpvaW4pCisgICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVKb2luKGxpbmVKb2luKSk7
CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TGluZUpvaW4oKTsKLSAg
ICAKICAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExp
bmVKb2luPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBTZXRMaW5lSm9pbihMaW5lSm9pbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitw
cml2YXRlOgogICAgIExpbmVKb2luIG1fbGluZUpvaW47CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBTZXRMaW5lSm9pbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVKb2luOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVKb2luPj4gU2V0TGluZUpvaW46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVKb2luPiBsaW5lSm9pbjsKLSAgICBk
ZWNvZGVyID4+IGxpbmVKb2luOwotICAgIGlmICghbGluZUpvaW4pCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUpvaW46OmNyZWF0ZSgqbGluZUpvaW4p
OwotfQotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TWl0
ZXJMaW1pdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRNaXRlckxpbWl0PiBjcmVhdGUo
ZmxvYXQgbGltaXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
ZmFsc2U7CisKKyAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCisgICAgICAgIDog
bV9taXRlckxpbWl0KG1pdGVyTGltaXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZXRNaXRlckxpbWl0KGxpbWl0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpOwotCiAgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TWl0ZXJMaW1pdChmbG9hdCk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fbWl0ZXJMaW1p
dDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldE1pdGVyTGltaXQ6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9taXRlckxp
bWl0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldE1pdGVy
TGltaXQ+PiBTZXRNaXRlckxpbWl0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDxmbG9hdD4gbWl0ZXJMaW1pdDsKLSAgICBkZWNvZGVyID4+IG1pdGVyTGltaXQ7Ci0g
ICAgaWYgKCFtaXRlckxpbWl0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIFNldE1pdGVyTGltaXQ6OmNyZWF0ZSgqbWl0ZXJMaW1pdCk7Ci19Ci0KLWNsYXNzIENs
ZWFyU2hhZG93IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xlYXJTaGFkb3cgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+Q2xlYXJTaGFkb3coKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hh
ZG93OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJTaGFkb3coKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclNoYWRvdzo6
ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gQ2xlYXJTaGFkb3c6OmRlY29kZShEZWNvZGVyJikK
LXsKLSAgICByZXR1cm4gQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpOwotfQotCi0vLyBGSVhNRTogdHJl
YXQgYXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworLy8gRklYTUU6
IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8KK2NsYXNzIENsaXAgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xpcD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xpcChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+Q2xpcCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcD4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCiBw
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxv
YXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsaXA6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0
OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXA+PiBDbGlw
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGlwOjpjcmVhdGUoKnJlY3QpOwotfQotCi1j
bGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxDbGlwT3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxDbGlwT3V0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcE91dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcE91dD4+IENsaXBPdXQ6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+
IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIENsaXBPdXQ6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXRUb1Bh
dGggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0VG9QYXRoIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBP
dXRUb1BhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0VG9QYXRoKHBhdGgpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0VG9QYXRoKCk7Cisg
ICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRo
KQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxDbGlwT3V0VG9QYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gZGVjb2RlKERlY29kZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0VG9QYXRoKGNvbnN0IFBh
dGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0
aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgpAQCAtMTIwMCwzNyArODM0LDQ3IEBAIHZvaWQgQ2xpcE91dFRvUGF0aDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8Q2xpcE91dFRvUGF0aD4+IENsaXBPdXRUb1BhdGg6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVy
ID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIENsaXBPdXRUb1BhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7
IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBDbGlwUGF0aCA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIENsaXBQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVh
dGUoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwUGF0aDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBQYXRoKFBhdGgmJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAg
ICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB+Q2xpcFBhdGgoKTsKKyAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpbmRS
dWxlKHdpbmRSdWxlKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX3dpbmRSdWxlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxDbGlwUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIGNvbnN0IFBhdGgg
bV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBXaW5kUnVsZSBtX3dpbmRS
dWxlOwogfTsKIApAQCAtMTI0Miw3ICs4ODYsNyBAQCB2b2lkIENsaXBQYXRoOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxDbGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09w
dGlvbmFsPENsaXBQYXRoPiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0xMjU0LDMw
ICs4OTgsMzUgQEAgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghd2luZFJ1bGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xpcFBhdGg6OmNyZWF0ZSgqcGF0aCwgKndpbmRSdWxlKTsK
KyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aW5kUnVsZSB9fTsKIH0KIAotY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBUb0RyYXdpbmdDb21tYW5k
cz4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICAgICAgOiBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
ICAgICAgICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBUb0RyYXdpbmdDb21tYW5kcyhk
ZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOwotCiAgICAg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b247IH0KICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZHJhd2luZ0NvbW1hbmRzKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3aW5nQ29tbWFuZHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENs
aXBUb0RyYXdpbmdDb21tYW5kcz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgQ29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBEaXNwbGF5TGlzdCBt
X2RyYXdpbmdDb21tYW5kczsKQEAgLTEyODgsMTEgKzkzNywxMSBAQCB2b2lkIENsaXBUb0RyYXdp
bmdDb21tYW5kczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCBtX2Rlc3RpbmF0aW9uOwogICAgIGVuY29kZXIgPDwgbV9jb2xvclNwYWNlOwotICAgIGVu
Y29kZXIgPDwgbV9kcmF3aW5nQ29tbWFuZHM7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdh
eSB0byBlbmNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENsaXBUb0Ry
YXdpbmdDb21tYW5kcz4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwogICAgIGRlY29k
ZXIgPj4gZGVzdGluYXRpb247CkBAIC0xMzA0LDI3ICs5NTMsMTYgQEAgT3B0aW9uYWw8UmVmPENs
aXBUb0RyYXdpbmdDb21tYW5kcz4+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29k
ZXImIGRlY28KICAgICBpZiAoIWNvbG9yU3BhY2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICBPcHRpb25hbDxEaXNwbGF5TGlzdD4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGRl
Y29kZXIgPj4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGlmICghZHJhd2luZ0NvbW1hbmRzKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21t
YW5kczo6Y3JlYXRlKCpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoKmRyYXdpbmdD
b21tYW5kcykpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB3YXkgdG8gZGVjb2RlIGluLW1l
bW9yeSBkaXNwbGF5IGxpc3RzLgorICAgIERpc3BsYXlMaXN0IGRyYXdpbmdDb21tYW5kczsKKyAg
ICByZXR1cm4ge3sgKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29t
bWFuZHMpIH19OwogfQogCi1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIERyYXdHbHlwaHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4g
Y3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0
IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250LCBn
bHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250
LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVm
ZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hv
ciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgV1RGTW92ZShnbHlwaHMpLCBXVEZNb3Zl
KGFkdmFuY2VzKSwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3R2x5cGhzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKICAgICBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KIApAQCAtMTMzMywyMSAr
OTcxLDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4
PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3
R2x5cGhzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgogICAgIERyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRT
bW9vdGhpbmdNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZh
bmNlLCAxMjg+JiYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSk7CiAKLSAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wdXRlQm91
bmRzKCk7CiAgICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OwogCi0g
ICAgUmVmPEZvbnQ+IG1fZm9udDsKKyAgICBSZWZQdHI8Rm9udD4gbV9mb250OwogICAgIFZlY3Rv
cjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZl
ckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKICAgICBGbG9hdFJlY3QgbV9ib3VuZHM7CkBAIC0x
MzU4LDcgKzk5Niw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBE
cmF3R2x5cGhzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
IDw8IG1fZm9udDsKKyAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1fZm9udCk7CiAgICAgZW5jb2Rl
ciA8PCBtX2dseXBoczsKICAgICBlbmNvZGVyIDw8IG1fYWR2YW5jZXM7CiAgICAgZW5jb2RlciA8
PCBtX2xvY2FsQW5jaG9yOwpAQCAtMTM2Niw3ICsxMDA0LDcgQEAgdm9pZCBEcmF3R2x5cGhzOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitPcHRpb25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxSZWY8Rm9udD4+IGZvbnQ7CiAgICAgZGVjb2Rl
ciA+PiBmb250OwpAQCAtMTM5NiwzMiArMTAzNCwzNSBAQCBPcHRpb25hbDxSZWY8RHJhd0dseXBo
cz4+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghc21vb3Ro
aW5nTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3
R2x5cGhzOjpjcmVhdGUoZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFk
dmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSk7CisgICAgcmV0dXJuIHt7IGZv
bnQtPmdldCgpLCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZhbmNlcyksICpsb2NhbEFu
Y2hvciwgKnNtb290aGluZ01vZGUgfX07CiB9Ci0KLWNsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0ltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6RHJhd0ltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1h
Z2UpCisgICAgICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3Nv
dXJjZShzb3VyY2UpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50
aW5nT3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFn
ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2UoKTsKLQogICAgIGNv
bnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBG
bG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3SW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2lt
YWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMg
dG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9h
dFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBAIC0xNDQxLDcg
KzEwODIsNyBAQCB2b2lkIERyYXdJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4g
RHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZT4g
RHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFn
ZUhhbmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE0
NjMsMTcgKzExMDQsMTQgQEAgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERyYXdJbWFnZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2U6OmNyZWF0
ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50
aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5h
dGlvbiwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3
VGlsZWRJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRJbWFnZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291
cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMp
KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRJbWFnZSgp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAog
ICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0K
ICAgICBGbG9hdFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC0x
NDgyLDE2ICsxMTIwLDI1IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX3RpbGVTaXplOyB9CiAgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7
IHJldHVybiBtX3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBE
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAg
ICAgLCBtX3RpbGVTaXplKHRpbGVTaXplKQorICAgICAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQor
ICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCisg
ICAgeworICAgIH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZEltYWdl
PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBt
X2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlv
bnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBG
bG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFBvaW50IG1fc291cmNlOwpAQCAtMTUx
NCw3ICsxMTYxLDcgQEAgdm9pZCBEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d1RpbGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxEcmF3VGlsZWRJbWFnZT4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBk
ZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTU0NiwzMiArMTE5MywzOSBAQCBPcHRpb25hbDxS
ZWY8RHJhd1RpbGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRs
ZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmlt
YWdlUGFpbnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwg
KmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGlu
Z09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK2NsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBt
X3RpbGVTY2FsZUZhY3Rvcih0aWxlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9oUnVsZShoUnVs
ZSkKKyAgICAgICAgLCBtX3ZSdWxlKHZSdWxlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09w
dGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
dGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2Uo
KTsKLQogICAgIGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7IH0KICAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
ICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3VGlsZWRTY2FsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gZGVjb2RlKERl
Y29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8
SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIg
YW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxl
LgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsK
QEAgLTE1OTYsNyArMTI1MCw3IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IERy
YXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRs
ZTsKQEAgLTE2MzEsMzMgKzEyODUsMzcgQEAgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZElt
YWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBp
ZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5p
bWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1
bGUsICppbWFnZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+
aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZS
dWxlLCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2VCdWZmZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlQnVmZmVyPiBjcmVhdGUoUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKKyAgICAgICAgOiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgICAgICwgbV9kZXN0aW5hdGlvblJlY3Qo
ZGVzdFJlY3QpCisgICAgICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgICAgICwgbV9vcHRp
b25zKG9wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1h
Z2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0lt
YWdlQnVmZmVyKCk7Ci0KICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXI7IH0KICAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNS
ZWN0OyB9CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdGluYXRpb25SZWN0OyB9CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvblJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPERyYXdJbWFnZUJ1ZmZlcj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAg
ICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXI7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwogICAgIEZsb2F0UmVjdCBtX3Ny
Y1JlY3Q7CkBAIC0xNjc0LDcgKzEzMzIsNyBAQCB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZUJ1ZmZlcj4gRHJhd0ltYWdlQnVmZmVy
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI+IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBkZWNvZGVy
ID4+IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKQEAgLTE2OTYsMzEgKzEzNTQsMjkgQEAg
T3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCpyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMpOworICAg
IHJldHVybiB7eyAqcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpz
b3VyY2UsICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3TmF0aXZlSW1hZ2UgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd05hdGl2ZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdOYXRpdmVJbWFnZT4gY3JlYXRlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKLSAgICB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpOwotCi0gICAgRmxv
YXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQotICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYs
IGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdOYXRp
dmVJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdl
UHRyJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8RHJhd05hdGl2ZUltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCitw
cml2YXRlOgogICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CiAgICAgRmxvYXRTaXplIG1faW1h
Z2VTaXplOwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKQEAgLTE3MzksNyArMTM5
NSw3IEBAIHZvaWQgRHJhd05hdGl2ZUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TmF0aXZl
SW1hZ2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9u
YWw8RHJhd05hdGl2ZUltYWdlPiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPE5hdGl2ZUltYWdlUHRyPiBpbWFnZTsKICAgICBkZWNvZGVy
ID4+IGltYWdlOwpAQCAtMTc2NiwxNyArMTQyMiwxNiBAQCBPcHRpb25hbDxSZWY8RHJhd05hdGl2
ZUltYWdlPj4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBp
ZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
RHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoKmltYWdlLCAqaW1hZ2VTaXplLCAqZGVzdGluYXRpb25S
ZWN0LCAqc3JjUmVjdCwgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2UsICppbWFnZVNp
emUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3Mg
RHJhd1BhdHRlcm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1BhdHRlcm4gewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0
dGVybihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UGF0
dGVybigpOworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgY29uc3QgSW1h
Z2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVy
blRyYW5zZm9ybTsgfQpAQCAtMTc4NSwxNiArMTQ0MCwxNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQ
b2ludCBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0KICAgICBGbG9hdFNpemUgc3Bh
Y2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PERyYXdQYXR0ZXJuPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUg
UmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRo
ZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0
YWJsZS4KICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJuVHJhbnNmb3JtOwogICAgIEZsb2F0
UmVjdCBtX3RpbGVSZWN0OwpAQCAtMTgxOSw3ICsxNDczLDcgQEAgdm9pZCBEcmF3UGF0dGVybjo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3UGF0dGVybj4gRHJhd1BhdHRlcm46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRs
ZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTg1NiwxODIgKzE1MTAsMTAwIEBA
IE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICByZXR1cm4gRHJhd1BhdHRlcm46OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAq
ZGVzdGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNp
bmcsICpvcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3Rp
bmF0aW9uLCAqdGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2UsICpzcGFjaW5nLCAq
b3B0aW9ucyB9fTsKIH0KIAotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0
aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xh
c3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7IC8vIElzIGRyYXdpbmcgaXRl
bSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRs
eSB0aGUgY2xpcCBib3VuZHMuCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCisgICAgICAgIDogbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCk7
Ci0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fb3BhY2l0
eTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPj4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IG9wYWNpdHk7Ci0gICAgZGVjb2RlciA+PiBv
cGFjaXR5OwotICAgIGlmICghb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKm9wYWNpdHkpOwot
fQotCi1jbGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBFbmRUcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRU
cmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEVuZFRyYW5zcGFyZW5jeUxheWVyKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5FbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVy
JikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxF
bmRUcmFuc3BhcmVuY3lMYXllcj4+IEVuZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2Rl
ciYpCi17Ci0gICAgcmV0dXJuIEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKTsKLX0KLQot
Y2xhc3MgRHJhd1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1JlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdSZWN0KEZsb2F0UmVjdCByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9ib3Jk
ZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1JlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3JkZXJUaGlja25lc3M7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBtX3JlY3Q7CiAgICAgZmxvYXQgbV9ib3JkZXJUaGlja25lc3M7CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3UmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2JvcmRlclRo
aWNrbmVzczsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3
UmVjdD4+IERyYXdSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBib3Jk
ZXJUaGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiBib3JkZXJUaGlja25lc3M7Ci0gICAgaWYgKCFi
b3JkZXJUaGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gRHJhd1JlY3Q6OmNyZWF0ZSgqcmVjdCwgKmJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLWNsYXNz
IERyYXdMaW5lIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdMaW5lIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3TGluZShGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpCisgICAgICAgIDogbV9wb2ludDEocG9pbnQxKQorICAgICAgICAsIG1f
cG9pbnQyKHBvaW50MikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdM
aW5lKHBvaW50MSwgcG9pbnQyKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+RHJhd0xpbmUoKTsKLQogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludDE7IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9p
bnQyOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxEcmF3TGluZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fcG9pbnQx
OwogICAgIEZsb2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBEcmF3TGluZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX3BvaW50MTsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQyOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gRHJhd0xpbmU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50
MTsKLSAgICBkZWNvZGVyID4+IHBvaW50MTsKLSAgICBpZiAoIXBvaW50MSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MjsKLSAg
ICBkZWNvZGVyID4+IHBvaW50MjsKLSAgICBpZiAoIXBvaW50MikKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3TGluZTo6Y3JlYXRlKCpwb2ludDEsICpwb2lu
dDIpOwotfQotCi1jbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIERyYXdMaW5lc0ZvclRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xp
bmVzRm9yVGV4dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxv
Y2FsQW5jaG9yLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7Ci0g
ICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpOworICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7
CiAKICAgICB2b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2Nh
dGlvbikgeyBtX2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29uc3QgRmxv
YXRQb2ludCYgYmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsg
fQpAQCAtMjA0MiwxNiArMTYxNCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ByaW50aW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmludGluZzsgfQogICAgIGJvb2wgZG91YmxlTGluZXMoKSBjb25z
dCB7IHJldHVybiBtX2RvdWJsZUxpbmVzOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3Is
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBkZWNv
ZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9u
OwogICAgIEZsb2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwogICAgIERhc2hBcnJheSBtX3dpZHRoczsK
QEAgLTIwNzIsNyArMTY0Myw3IEBAIHZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4dD4gRHJhd0xpbmVzRm9yVGV4dDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYmxv
Y2tMb2NhdGlvbjsKICAgICBkZWNvZGVyID4+IGJsb2NrTG9jYXRpb247CkBAIC0yMTA0LDExOSAr
MTY3NSw4MyBAQCBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRl
eHQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZG91YmxlTGluZXMpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0xpbmVzRm9yVGV4dDo6
Y3JlYXRlKCpibG9ja0xvY2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMs
ICpwcmludGluZywgKmRvdWJsZUxpbmVzKTsKKyAgICByZXR1cm4ge3sgKmJsb2NrTG9jYXRpb24s
ICpsb2NhbEFuY2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGlu
ZXMgfX07CiB9CiAKLWNsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAs
IG1fc3R5bGUoc3R5bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpOwotCiAgICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSk7CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd0VsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChy
ZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
K3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBtX3N0eWxlOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX3N0eWxlOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+PiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0Owot
ICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlv
bmFsPERvY3VtZW50TWFya2VyTGluZVN0eWxlPiBzdHlsZTsKLSAgICBkZWNvZGVyID4+IHN0eWxl
OwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKCpyZWN0LCAqc3R5bGUpOwot
fQotCi1jbGFzcyBEcmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3
UGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBEcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0
aChwYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0VsbGlwc2Uo
cmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5EcmF3RWxsaXBzZSgpOwotCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdFbGxpcHNlPj4gZGVj
b2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQot
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBEcmF3RWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd0VsbGlwc2U+PiBEcmF3RWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
RHJhd0VsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIERyYXdQYXRoIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICBEcmF3UGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBt
X3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERyYXdQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5E
cmF3UGF0aCgpOwotCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RHJhd1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8RHJhd1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0
aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citw
cml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
QEAgLTIyMjYsMjQgKzE3NjEsMzcgQEAgdm9pZCBEcmF3UGF0aDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
RHJhd1BhdGg+PiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxE
cmF3UGF0aD4gRHJhd1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0aDo6Y3JlYXRl
KCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIERy
YXdGb2N1c1JpbmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1c1Jp
bmdQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVh
dGUoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIERyYXdGb2N1c1JpbmdQYXRoKFBhdGgmJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShw
YXRoKSkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUGF0aCgp
OworICAgIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAg
ICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAs
IG1fY29sb3IoY29sb3IpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fd2lkdGg7IH0KQEAgLTIyNTEsMTYgKzE3OTksMTUgQEAgcHVibGljOgogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RHJhd0ZvY3VzUmluZ1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAg
ICBmbG9hdCBtX3dpZHRoOwogICAgIGZsb2F0IG1fb2Zmc2V0OwogICAgIENvbG9yIG1fY29sb3I7
CkBAIC0yMjc2LDcgKzE4MjMsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBEcmF3Rm9jdXNSaW5n
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0
aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0yMjk4LDMzICsxODQ1LDMxIEBAIE9wdGlvbmFs
PFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgcmV0dXJuIERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUoKnBhdGgsICp3aWR0aCwg
Km9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aWR0aCwg
Km9mZnNldCwgKmNvbG9yIH19OwogfQogCi1jbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdSZWN0cz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1Jl
Y3RzKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwotICAgIH0KKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RHJhd0ZvY3VzUmluZ1JlY3RzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKIAogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+IHJlY3RzKCkgY29uc3QgeyByZXR1cm4gbV9yZWN0czsgfQogICAgIGZsb2F0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQogICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEcmF3Rm9jdXNSaW5nUmVjdHM+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6
CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9yZWN0czsKICAgICBmbG9hdCBtX3dpZHRoOwogICAg
IGZsb2F0IG1fb2Zmc2V0OwpAQCAtMjM0MSw3ICsxODg2LDcgQEAgdm9pZCBEcmF3Rm9jdXNSaW5n
UmVjdHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1Jp
bmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9jdXNSaW5n
UmVjdHM+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8VmVjdG9yPEZsb2F0UmVjdD4+IHJlY3RzOwogICAgIGRlY29kZXIgPj4gcmVj
dHM7CkBAIC0yMzYzLDcxICsxOTA4LDU1IEBAIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVj
dHM+PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJh
d0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUoKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvcik7
CisgICAgcmV0dXJuIHt7ICpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAK
LWNsYXNzIEZpbGxSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0KCk7CisgICAgY29u
c3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIEZpbGxSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxGaWxsUmVjdD4+IEZpbGxSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0
OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBGaWxsUmVjdDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotLy8gRklYTUU6IE1ha2UgdGhlc2Ug
aW5oZXJpdCBmcm9tIEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9yZWN0KHJl
Y3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoQ29sb3IoKTsKLQogICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gZGVjb2RlKERlY29k
ZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29s
b3I7CiB9OwpAQCAtMjQ0MCw3ICsxOTY5LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gRmlsbFJl
Y3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDUyLDI5ICsxOTgxLDI4
IEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUoKnJl
Y3QsICpjb2xvcik7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNz
IEZpbGxSZWN0V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxS
ZWN0V2l0aEdyYWRpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aEdy
YWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhHcmFkaWVu
dChyZWN0LCBncmFkaWVudCkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5GaWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0
aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CiAKLSAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gZGVjb2RlKERl
Y29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIG11dGFibGUg
UmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0aGlzIG5vdCBtdXRhYmxl
CiB9OwpAQCAtMjQ4Nyw3ICsyMDE1LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBGaWxsUmVjdFdpdGhHcmFkaWVu
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDk4
LDMyICsyMDI2LDM3IEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgaWYgKCFncmFkaWVu
dCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdp
dGhHcmFkaWVudDo6Y3JlYXRlKCpyZWN0LCBncmFkaWVudC0+Z2V0KCkpOworICAgIHJldHVybiB7
eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2Nv
bG9yKGNvbG9yKQorICAgICAgICAsIG1fb3Aob3ApCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxl
bmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbENvbXBvc2l0
ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxDb21wb3NpdGVkUmVjdD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG1fb3A7CkBAIC0yNTQwLDcgKzIwNzMsNyBAQCB2b2lkIEZpbGxDb21wb3NpdGVkUmVj
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRS
ZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVj
dD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjU2Miwz
MSArMjA5NSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBv
c2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsQ29tcG9zaXRl
ZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUpOworICAgIHJldHVy
biB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxS
b3VuZGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUm91bmRlZFJlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJvdW5kZWRSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CisKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1fcmVj
dChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9ibGVuZE1vZGUo
YmxlbmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5k
ZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKTsKLQogICAgIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3Qg
Q29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAgIEJsZW5kTW9kZSBi
bGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImLCBCbGVuZE1vZGUpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKICAgICBCbGVuZE1v
ZGUgbV9ibGVuZE1vZGU7CkBAIC0yNjAxLDcgKzIxMzgsNyBAQCB2b2lkIEZpbGxSb3VuZGVkUmVj
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJv
dW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9h
dFJvdW5kZWRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI2MTgsMzEgKzIx
NTUsMzUgQEAgT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVjdD4+IEZpbGxSb3VuZGVkUmVjdDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFibGVuZE1vZGUpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUo
KnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3Is
ICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAg
ICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAgLCBtX2NvbG9y
KGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7Ci0KICAg
ICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JvdW5kZWRIb2xlUmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IG1fcmVjdDsKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OwogICAgIENv
bG9yIG1fY29sb3I7CkBAIC0yNjU3LDcgKzIxOTgsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRl
Y29kZXIgPj4gcmVjdDsKQEAgLTI2NzQsNzQgKzIyMTUsNjMgQEAgT3B0aW9uYWw8UmVmPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNv
ZGVyJgogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRI
b2xlUmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpyb3VuZGVkSG9sZVJlY3Qs
ICpjb2xvciB9fTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBG
aWxsSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsSW5saW5lUGF0
aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0
IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxJbmxpbmVQYXRoKGNvbnN0IElubGluZVBh
dGhEYXRhJiBwYXRoRGF0YSkKKyAgICAgICAgOiBtX3BhdGhEYXRhKHBhdGhEYXRhKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbElubGluZVBhdGgocGF0aERhdGEpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsSW5saW5lUGF0aCgpOwot
CiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Rmls
bElubGluZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGlu
ZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXRo
KCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBJbmxpbmVQYXRo
RGF0YSBtX3BhdGhEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmls
bElubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxGaWxsSW5saW5lUGF0aD4+IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0YT4gcGF0aERhdGE7Ci0gICAgZGVj
b2RlciA+PiBwYXRoRGF0YTsKLSAgICBpZiAoIXBhdGhEYXRhKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgq
cGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1j
bGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUGF0aCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxs
UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmls
bFBhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFBhdGgoKTsKKyAgICBGaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CiAK
ICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPEZpbGxQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIEZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdS
ZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBh
dGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTI3NTEsOTAgKzIy
ODEsNjUgQEAgdm9pZCBGaWxsUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFBhdGg+PiBGaWxs
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUGF0aD4gRmlsbFBh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7
CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICBy
ZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCk7Ci0KICAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxFbGxpcHNlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IEZpbGxFbGxp
cHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxsRWxsaXBzZTo6Y3JlYXRlKCpyZWN0
KTsKLX0KLQotY2xhc3MgUHV0SW1hZ2VEYXRhIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IFB1dEltYWdlRGF0YSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQdXRJbWFnZURhdGE+IGNy
ZWF0ZShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
IGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEs
IHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVm
PFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIFdURk1vdmUoaW1hZ2VEYXRhKSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0
KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6UHV0SW1hZ2VEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QdXRJbWFnZURhdGEoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsK
IAogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVy
biBtX2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlRGF0YTsgfQorICAgIEltYWdlRGF0YSYgaW1hZ2VEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gKm1faW1hZ2VEYXRhOyB9CiAgICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9zcmNSZWN0OyB9CiAgICAgSW50UG9pbnQgZGVzdFBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0UG9pbnQ7IH0KICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RGb3JtYXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
KTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3NyY1JlY3Qu
c2l6ZSgpIH19OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdChtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNp
emUoKSk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1
dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBJbnRSZWN0IG1f
c3JjUmVjdDsKICAgICBJbnRQb2ludCBtX2Rlc3RQb2ludDsKLSAgICBSZWY8SW1hZ2VEYXRhPiBt
X2ltYWdlRGF0YTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBtX2Rlc3RGb3JtYXQ7CiB9OwpAQCAtMjg0MywxNCArMjM0OCwxNCBAQCB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgogdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9pbnB1dEZvcm1hdDsKLSAgICBlbmNvZGVyIDw8
IG1faW1hZ2VEYXRhOworICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOwogICAg
IGVuY29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwgbV9kZXN0UG9pbnQ7CiAgICAg
ZW5jb2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBp
bnB1dEZvcm1hdDsKICAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VEYXRhOwpAQCAt
Mjg3OCwxNjkgKzIzODMsMTA5IEBAIE9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFn
ZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGVzdEZvcm1hdCkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBQdXRJbWFnZURhdGE6OmNy
ZWF0ZSgqaW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBv
aW50LCAqZGVzdEZvcm1hdCk7CisgICAgcmV0dXJuIHt7ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgq
aW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCi1j
bGFzcyBQYWludEZyYW1lRm9yTWVkaWEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUGFp
bnRGcmFtZUZvck1lZGlhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBhaW50RnJhbWVGb3JN
ZWRpYT4gY3JlYXRlKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGFpbnRGcmFtZUZvck1lZGlhKCk7CisgICAg
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBkZWNvZGUo
RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UGFp
bnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKTsKLQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotICAgIFBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiB7IG1fZGVzdGluYXRpb24gfTsgfQogCitwcml2YXRlOgogICAgIE1lZGlhUGxh
eWVySWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247
CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9pZGVu
dGlmaWVyOwotICAgIGVuY29kZXIgPDwgbV9kZXN0aW5hdGlvbjsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBQYWludEZyYW1l
Rm9yTWVkaWE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPE1lZGlh
UGxheWVySWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7
Ci0gICAgaWYgKCFpZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsKLSAgICBkZWNvZGVyID4+IGRlc3Rp
bmF0aW9uOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoKmlkZW50aWZpZXIs
ICpkZXN0aW5hdGlvbik7Ci19Ci0KLWNsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgU3Ryb2tlUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VS
ZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VSZWN0
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCisgICAgICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VSZWN0KCk7Ci0KICAgICBG
bG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGxpbmVX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAg
ICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1fbGluZVdpZHRoOwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2xp
bmVXaWR0aDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJv
a2VSZWN0Pj4gU3Ryb2tlUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJl
Y3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9hdD4g
bGluZVdpZHRoOwotICAgIGRlY29kZXIgPj4gbGluZVdpZHRoOwotICAgIGlmICghbGluZVdpZHRo
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZVJlY3Q6
OmNyZWF0ZSgqcmVjdCwgKmxpbmVXaWR0aCk7Ci19Ci0KICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKIAotY2xhc3MgU3Ryb2tlSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBTdHJva2VJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUlu
bGluZVBhdGg+IGNyZWF0ZShjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQ
YXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9r
ZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1f
cGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
dHJva2VJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+U3Ryb2tlSW5saW5lUGF0aCgpOwotCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyBy
ZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlSW5saW5lUGF0aChj
b25zdCBJbmxpbmVQYXRoRGF0YSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRl
OgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcGF0aERhdGE7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IFN0cm9rZUlubGluZVBh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBhdGhE
YXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0aERh
dGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlSW5s
aW5lUGF0aDo6Y3JlYXRlKFdURk1vdmUoKnBhdGhEYXRhKSk7Ci19Ci0KICNlbmRpZiAvLyBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tlUGF0aCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBTdHJva2VQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9r
ZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUGF0aChQYXRoJiYgcGF0aCkKKyAg
ICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflN0cm9rZVBhdGgoKTsKKyAgICBTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgm
IHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTdHJva2VQYXRo
PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3Qg
UGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KQEAgLTMwNTAsNzIxICsyNDk1LDExNSBAQCB2b2lkIFN0cm9rZVBhdGg6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBTdHJva2VQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPFN0cm9rZVBhdGg+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+
PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBTdHJva2VQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZN
b3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBTdHJva2VFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0
cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgflN0cm9rZUVsbGlwc2UoKTsKKyAgICBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsK
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUVsbGlwc2U6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBT
dHJva2VFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VFbGxpcHNlOjpj
cmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgQ2xlYXJSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ2xlYXJSZWN0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5DbGVhclJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclJlY3Q6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0Owot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IENs
ZWFyUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xlYXJSZWN0OjpjcmVhdGUoKnJl
Y3QpOwotfQotCiAjaWYgVVNFKENHKQotY2xhc3MgQXBwbHlTdHJva2VQYXR0ZXJuIDogcHVibGlj
IEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPiBjcmVh
dGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHJva2VQYXR0
ZXJuKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseVN0cm9rZVBh
dHRlcm4oKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7CitjbGFzcyBBcHBseVN0
cm9rZVBhdHRlcm4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBw
bHlTdHJva2VQYXR0ZXJuKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUoRW5j
b2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoRGVjb2Rl
ciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCk7Ci19Ci0KLWNs
YXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseUZpbGxQYXR0
ZXJuIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsK
LSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseUZpbGxQYXR0ZXJuKCk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxBcHBseUZp
bGxQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5RmlsbFBh
dHRlcm4oKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsK
IAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlGaWxsUGF0dGVybjo6ZW5jb2Rl
KEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUoRGVjb2Rl
ciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpOwotfQogI2VuZGlm
CiAKLWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBB
cHBseURldmljZVNjYWxlRmFjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogbV9zY2FsZUZh
Y3RvcihzY2FsZUZhY3RvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFjdG9yKCk7Ci0KICAgICBmbG9hdCBz
Y2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7Citwcml2YXRlOgorICAg
IGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fc2NhbGVGYWN0b3I7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPGZsb2F0PiBzY2FsZUZhY3RvcjsKLSAgICBkZWNvZGVyID4+IHNjYWxlRmFjdG9yOwotICAg
IGlmICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKCpzY2FsZUZhY3Rvcik7Ci19Ci0K
LQotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0
ZW0mKTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgSXRlbTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3R5cGU7Ci0KLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U2F2ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFJlc3RvcmU+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
Um90YXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNjYWxlPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxTZXRDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVD
VE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxH
cmFkaWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmls
bENvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZVN0
cm9rZUNvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJva2VU
aGlja25lc3M+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PFNldExpbmVEYXNoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVKb2luOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVKb2luPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxDbGVhclNoYWRvdz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXA+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwUGF0
aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdH
bHlwaHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd0ltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PERyYXdUaWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PERyYXdUaWxlZFNjYWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxE
cmF3SW1hZ2VCdWZmZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdOYXRp
dmVJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxE
cmF3TGluZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TGluZXNGb3JUZXh0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRl
eHQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdFbGxpcHNl
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RmlsbFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RX
aXRoQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxDb21w
b3NpdGVkUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRS
ZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbEVs
bGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1h
Z2VEYXRhOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJ
bmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxDbGVhclJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lm
IFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPEl0ZW1UeXBlPiBpdGVtVHlwZTsKLSAgICBkZWNvZGVyID4+IGl0ZW1UeXBlOwot
ICAgIGlmICghaXRlbVR5cGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBz
d2l0Y2ggKCppdGVtVHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBTYXZlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFJlc3RvcmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBUcmFuc2xh
dGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBSb3RhdGU6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2Fs
ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNjYWxlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gU2V0Q1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogewot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZp
bGxDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0YXRlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IFNldExpbmVDYXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFNldExpbmVEYXNoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRMaW5lSm9pbjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDbGVhclNoYWRvdzo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBD
bGlwOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBPdXQ6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwT3V0VG9QYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dFRvUGF0aDo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcFBhdGg6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwVG9EcmF3aW5nQ29t
bWFuZHM6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0dseXBo
czo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdJbWFnZTo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkSW1hZ2U6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdU
aWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRHJhd1JlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IERyYXdMaW5lOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxp
cHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0VsbGlwc2U6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdSZWN0czoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdSZWN0czo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3Q6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aENvbG9y
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxs
UmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFB1dEltYWdlRGF0YTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJl
Y3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VSZWN0OjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0g
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IFN0cm9rZUVsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBDbGVhclJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBVU0UoQ0cpCi0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseURldmljZVNjYWxlRmFj
dG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIEl0ZW1IYW5kbGUpOwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVO
YW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0RSQVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCi0KLSNkZWZpbmUgU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVUeXBlTmFtZSkgXAot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1
ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
YXZlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oQ29uY2F0ZW5hdGVDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oU2V0SW5saW5lRmlsbEdyYWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFNldElubGluZUZpbGxDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVTdHJva2VDb2xvcikKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdHJva2VUaGlja25lc3MpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3RhdGUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUNhcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lRGFzaCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRMaW5lSm9pbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRNaXRlckxpbWl0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsaXApCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQ2xpcE91dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlw
T3V0VG9QYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBQ
YXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBUb0RyYXdp
bmdDb21tYW5kcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3
R2x5cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFn
ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFn
ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2Fs
ZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3SW1h
Z2VCdWZmZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05h
dGl2ZUltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQ
YXR0ZXJuKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdSZWN0
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lc0ZvclRleHQpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RWxs
aXBzZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0aCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUGF0
aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5n
UmVjdHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3Qp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoQ29s
b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRo
R3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbENv
bXBvc2l0ZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZp
bGxSb3VuZGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsSW5saW5lUGF0aCkKLSNl
bmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxQYXRoKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxFbGxpcHNlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFB1dEltYWdlRGF0YSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQYWludEZyYW1lRm9yTWVkaWEpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLSNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTdHJva2VJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVyKQotI2lmIFVTRShDRykKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseVN0cm9rZVBhdHRlcm4pCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlGaWxsUGF0dGVybikK
LSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q2xlYXJTaGFkb3cpCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IGQxNDJjMzc3OWNiOTkzZTczNzJiYjhiODg4
N2ZjYzRjNzUyZmU5ODkuLjkwZWJkZTU1Zjg5Nzk2YTgxMTg3OWRiMDc4NDhjMDc0ZjQ1Mzg1NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0
YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJD
b3JlOjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOworICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7
CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkBAIC04NywzMSArODcsMzEgQEAgc3RhdGlj
IGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJiBjaGEKIHZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCiB7CiAgICAgaWYgKCFjb250YWlu
c09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAg
IG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRTdGF0ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0
ZSwgY2hhbmdlRmxhZ3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0YXRlPihjaGFuZ2VzLm1fc3Rh
dGUsIGNoYW5nZUZsYWdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lU3Ryb2tlQ29sb3I6
OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAg
ICBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xv
ci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlz
dC5hcHBlbmRJdGVtKFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5z
dHJva2VUaGlja25lc3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oY2hh
bmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIG1f
ZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShjaGFuZ2Vz
Lm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGlu
ZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKTsKIAogICAg
IGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRp
ZW50Q2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZp
bGxHcmFkaWVudDo6Y3JlYXRlKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KSk7CisgICAg
ICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdy
YWRpZW50KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYg
aXRlbSkKK3ZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlIHR5cGUp
CiB7CiAgICAgaWYgKG1fZGVsZWdhdGUpCi0gICAgICAgIG1fZGVsZWdhdGUtPndpbGxBcHBlbmRJ
dGVtKGl0ZW0pOworICAgICAgICBtX2RlbGVnYXRlLT53aWxsQXBwZW5kSXRlbU9mVHlwZSh0eXBl
KTsKIAotICAgIGlmIChpdGVtLmlzRHJhd2luZ0l0ZW0oKQorICAgIGlmIChpc0RyYXdpbmdJdGVt
KHR5cGUpCiAjaWYgVVNFKENHKQotICAgICAgICB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuIHx8IGl0ZW0udHlwZSgpID09IEl0ZW1UeXBlOjpBcHBseVN0cm9r
ZVBhdHRlcm4KKyAgICAgICAgfHwgdHlwZSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
IHx8IHR5cGUgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybgogI2VuZGlmCiAgICAgKSB7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZXMgPSBjdXJy
ZW50U3RhdGUoKS5zdGF0ZUNoYW5nZTsKQEAgLTEyNiwxMCArMTI2LDEwIEBAIHZvaWQgUmVjb3Jk
ZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgfQogfQogCi12b2lkIFJl
Y29yZGVyOjpkaWRBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCit2b2lkIFJlY29yZGVyOjpk
aWRBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlIHR5cGUpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGUp
Ci0gICAgICAgIG1fZGVsZWdhdGUtPmRpZEFwcGVuZEl0ZW0oaXRlbSk7CisgICAgICAgIG1fZGVs
ZWdhdGUtPmRpZEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCkBAIC0xMzksMjcgKzEzOSwyNyBAQCB2
b2lkIFJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCiB7
Ci0gICAgYXBwZW5kSXRlbShDbGVhclNoYWRvdzo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxDbGVh
clNoYWRvdz4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRMaW5lQ2FwOjpjcmVhdGUobGluZUNhcCkpOworICAg
IGFwcGVuZDxTZXRMaW5lQ2FwPihsaW5lQ2FwKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0g
ICAgYXBwZW5kSXRlbShTZXRMaW5lRGFzaDo6Y3JlYXRlKGRhc2hBcnJheSwgZGFzaE9mZnNldCkp
OworICAgIGFwcGVuZDxTZXRMaW5lRGFzaD4oZGFzaEFycmF5LCBkYXNoT2Zmc2V0KTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCiB7Ci0gICAgYXBw
ZW5kSXRlbShTZXRMaW5lSm9pbjo6Y3JlYXRlKGxpbmVKb2luKSk7CisgICAgYXBwZW5kPFNldExp
bmVKb2luPihsaW5lSm9pbik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZSht
aXRlckxpbWl0KSk7CisgICAgYXBwZW5kPFNldE1pdGVyTGltaXQ+KG1pdGVyTGltaXQpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQpAQCAtMTY5LDE5ICsxNjksMTkgQEAgdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2kKIAogSW1h
Z2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRHJhd0ltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdJbWFnZT4oaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKICAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRl
cjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJh
d1RpbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUs
IHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdUaWxlZElt
YWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdl
UGFpbnRpbmdPcHRpb25zKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7
CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVs
ZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1h
Z2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxl
U2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBh
cHBlbmQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAg
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIApAQCAtMTkwLDIzICsxOTAs
MjMgQEAgYm9vbCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWMKICAgICBpZiAoIW1fZGVsZWdhdGUgfHwgIW1f
ZGVsZWdhdGUtPmxvY2tSZW1vdGVJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4o
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJh
d05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3TmF0
aXZlSW1hZ2U+KGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdHRlcm46OmNyZWF0ZShp
bWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UsIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpzYXZlKCkKIHsKLSAgICBhcHBlbmRJdGVtKFNhdmU6OmNyZWF0ZSgp
KTsKKyAgICBhcHBlbmQ8U2F2ZT4oKTsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVT
dGFjay5sYXN0KCkuY2xvbmVGb3JTYXZlKCkpOwogfQogCkBAIC0yMjEsMjUgKzIyMSwyNSBAQCB2
b2lkIFJlY29yZGVyOjpyZXN0b3JlKCkKICAgICAvLyBIYXZlIHRvIGF2b2lkIGVsaWRpbmcgbmVz
dGVkIFNhdmUvUmVzdG9yZSB3aGVuIGEgZGVzY2VuZGFudCBzdGF0ZSBjb250YWlucyBkcmF3aW5n
IGl0ZW1zLgogICAgIGN1cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nIHw9IHN0YXRlVXNl
ZEZvckRyYXdpbmc7CiAKLSAgICBhcHBlbmRJdGVtKFJlc3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBh
cHBlbmQ8UmVzdG9yZT4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCiB7CiAgICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIGFw
cGVuZEl0ZW0oVHJhbnNsYXRlOjpjcmVhdGUoeCwgeSkpOworICAgIGFwcGVuZDxUcmFuc2xhdGU+
KHgsIHkpOwogfQogCiB2b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
CiB7CiAgICAgY3VycmVudFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBhcHBl
bmRJdGVtKFJvdGF0ZTo6Y3JlYXRlKGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgYXBwZW5kPFJvdGF0
ZT4oYW5nbGVJblJhZGlhbnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCiB7CiAgICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgYXBw
ZW5kSXRlbShTY2FsZTo6Y3JlYXRlKHNpemUpKTsKKyAgICBhcHBlbmQ8U2NhbGU+KHNpemUpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCkBAIC0yNDgsMTMgKzI0OCwxMyBAQCB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIGN1
cnJlbnRTdGF0ZSgpLmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oQ29uY2F0
ZW5hdGVDVE06OmNyZWF0ZSh0cmFuc2Zvcm0pKTsKKyAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+
KHRyYW5zZm9ybSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3Jt
KTsKLSAgICBhcHBlbmRJdGVtKFNldENUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworICAgIGFwcGVu
ZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQpAQCAtMjY1LDE1OCArMjY1
LDE1OCBAQCBBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkKIAogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQmVn
aW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKG9wYWNpdHkpKTsKKyAgICBhcHBlbmQ8QmVnaW5U
cmFuc3BhcmVuY3lMYXllcj4ob3BhY2l0eSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpj
cmVhdGUoKSk7CisgICAgYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdSZWN0OjpjcmVh
dGUocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKTsKKyAg
ICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdMaW5lc0ZvclRleHQ6OmNy
ZWF0ZShGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMs
IHByaW50aW5nLCBkb3VibGVMaW5lcykpOworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihG
bG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVMaW5lcyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6OmNyZWF0ZShyZWN0LCBzdHlsZSkpOworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPihyZWN0LCBzdHlsZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KERyYXdFbGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4o
cmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKTsK
KyAgICBhcHBlbmQ8RHJhd1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdGb2N1
c1JpbmdQYXRoOjpjcmVhdGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBl
bmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVj
dHM+KHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KEZpbGxSZWN0OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsUmVjdD4ocmVj
dCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmls
bFJlY3RXaXRoQ29sb3I6OmNyZWF0ZShyZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVj
dFdpdGhDb2xvcj4ocmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3Jh
ZGllbnQpKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbENvbXBvc2l0ZWRSZWN0
OjpjcmVhdGUocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbENv
bXBvc2l0ZWRSZWN0PihyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRN
b2RlKSk7CisgICAgYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIGJsZW5kTW9k
ZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
KTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogewogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lu
bGluZURhdGEoKSkgewotICAgICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxJbmxp
bmVQYXRoOjpjcmVhdGUocGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgYXBwZW5kPEZpbGxJ
bmxpbmVQYXRoPihwYXRoLmlubGluZURhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxQYXRoOjpjcmVhdGUocGF0
aCkpOworICAgIGFwcGVuZDxGaWxsUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KEZpbGxFbGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsRWxs
aXBzZT4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChTdHJva2VSZWN0OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSk7CisgICAgYXBwZW5kPFN0
cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUocGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAg
ICAgICAgYXBwZW5kPFN0cm9rZUlubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQo
U3Ryb2tlUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlRWxsaXBzZTo6Y3JlYXRl
KHJlY3QpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENs
ZWFyUmVjdD4ocmVjdCk7CiB9CiAKICNpZiBVU0UoQ0cpCiB2b2lkIFJlY29yZGVyOjphcHBseVN0
cm9rZVBhdHRlcm4oKQogewotICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVh
dGUoKSk7CisgICAgYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kSXRlbShBcHBseUZpbGxQYXR0
ZXJuOjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CiAjZW5k
aWYKIAogdm9pZCBSZWNvcmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAg
Y3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocmVjdCk7Ci0gICAgYXBwZW5kSXRl
bShDbGlwOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxDbGlwPihyZWN0KTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5k
SXRlbShDbGlwT3V0OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxDbGlwT3V0PihyZWN0KTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFw
cGVuZEl0ZW0oQ2xpcE91dFRvUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8Q2xpcE91
dFRvUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3Vu
ZHMuaW50ZXJzZWN0KHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKLSAgICBhcHBlbmRJdGVtKENs
aXBQYXRoOjpjcmVhdGUocGF0aCwgd2luZFJ1bGUpKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBh
dGgsIHdpbmRSdWxlKTsKIH0KIAogSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpCkBAIC00
NDQsMTkgKzQ0NCwxOSBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjbwogCiAgICAgYXV0byByZWNv
cmRpbmdDb250ZXh0ID0gbWFrZVVuaXF1ZTxEcmF3aW5nQ29udGV4dD4oZGVzdGluYXRpb24uc2l6
ZSgpLCBpbml0aWFsQ1RNKTsKICAgICBkcmF3aW5nRnVuY3Rpb24ocmVjb3JkaW5nQ29udGV4dC0+
Y29udGV4dCgpKTsKLSAgICBhcHBlbmRJdGVtKENsaXBUb0RyYXdpbmdDb21tYW5kczo6Y3JlYXRl
KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCByZWNvcmRpbmdDb250ZXh0LT50YWtlRGlzcGxheUxp
c3QoKSkpOworICAgIGFwcGVuZDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBj
b2xvclNwYWNlLCByZWNvcmRpbmdDb250ZXh0LT50YWtlRGlzcGxheUxpc3QoKSk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIGFwcGVuZEl0ZW0oUGFpbnRGcmFtZUZv
ck1lZGlhOjpjcmVhdGUocGxheWVyLCBkZXN0aW5hdGlvbikpOworICAgIGFwcGVuZDxQYWludEZy
YW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQogCiB2b2lkIFJlY29yZGVyOjph
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIC8v
IEZJWE1FOiB0aGlzIGNoYW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBh
bGwgb2Ygb3VyIGNhY2hlZCBleHRlbnRzLgogICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBj
YWxsZWQgZWFybHkgb24/Ci0gICAgYXBwZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFjdG9yOjpj
cmVhdGUoZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcj4oZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCiBGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJv
dW5kaW5nTW9kZSkKQEAgLTQ2NSwyOSArNDY1LDYgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjoK
ICAgICByZXR1cm4gcmVjdDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYgaXRlbSkKLXsKLSAgICBEcmF3aW5nSXRlbSYgbmV3
SXRlbSA9IGl0ZW0uZ2V0KCk7Ci0gICAgYXBwZW5kSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLSAgICB1
cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjphcHBlbmRJdGVt
KFJlZjxJdGVtPiYmIGl0ZW0pCi17Ci0gICAgSXRlbSYgbmV3SXRlbSA9IGl0ZW0uZ2V0KCk7Ci0g
ICAgd2lsbEFwcGVuZEl0ZW0oaXRlbS5nZXQoKSk7Ci0gICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQo
V1RGTW92ZShpdGVtKSk7Ci0gICAgZGlkQXBwZW5kSXRlbShuZXdJdGVtKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYgaXRlbSkgY29uc3QKLXsKLSAg
ICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGlj
c0NvbnRleHQoKSkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5k
cyhyZWN0LnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Qg
PSBpdGVtLmdsb2JhbEJvdW5kcygpKQotICAgICAgICBpdGVtLnNldEV4dGVudChyZWN0LnZhbHVl
KCkpOwotfQotCiAvLyBGSVhNRTogc2hhcmUgd2l0aCBTaGFkb3dEYXRhCiBzdGF0aWMgaW5saW5l
IGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJSYWRpdXMpCiB7CkBAIC01MDcs
NyArNDg0LDcgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBD
b2xvciBzaGFkb3dDb2xvcjsKICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IHNoYWRvd0V4dGVudD0gYm91bmRzOworICAgICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50
ID0gYm91bmRzOwogICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShzaGFkb3dPZmZzZXQpOwogICAg
ICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRp
dXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCAzMWM4Yzg5NjM3OGMwY2FmYmIyMTEyODk1OTdj
ZWUyOGI0ZmE3NWQyLi5mZmUxNTkxYmFmZDQ5ZGIzM2U5NDNlOTljMWJhMTRjZGJjNGM2MDI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6
VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCkBAIC00OCw4ICs0OSw2IEBAIHN0cnVj
dCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xh
c3MgRHJhd2luZ0l0ZW07Ci0KIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dEltcGwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFJlY29yZGVyKTsKQEAgLTYwLDE0ICs1OSwxNCBAQCBwdWJsaWM6CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwog
Ci0gICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3QuaXRl
bUNvdW50KCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlM
aXN0LmlzRW1wdHkoKTsgfQogCiAgICAgY2xhc3MgRGVsZWdhdGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgdmlydHVhbCB+RGVsZWdhdGUoKSB7IH0KICAgICAgICAgdmlydHVhbCBib29sIGxvY2tS
ZW1vdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYpIHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJikgeyB9Owot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQXBwZW5kSXRlbShjb25zdCBJdGVtJikgeyB9OworICAg
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSkgeyB9CiAgICAg
fTsKIAogcHJpdmF0ZToKQEAgLTE0OCwxNSArMTQ3LDM0IEBAIHByaXZhdGU6CiAKICAgICBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFwcGVuZEl0ZW0oUmVmPEl0
ZW0+JiYpOwotICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpOwotICAgIHZvaWQg
ZGlkQXBwZW5kSXRlbShjb25zdCBJdGVtJik7Ci0gICAgdm9pZCBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xh
c3MuLi4gQXJncz4KKyAgICB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAg
ICAgIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgbV9kaXNwbGF5
TGlzdC5hcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgZGlk
QXBwZW5kSXRlbU9mVHlwZShUOjppdGVtVHlwZSk7CisKKyAgICAgICAgaWYgKCFUOjppc0RyYXdp
bmdJdGVtKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChMSUtFTFkoIW1fZGlz
cGxheUxpc3QudHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKCkpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICAgICAgaWYgKGF1dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0
KCkpKQorICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRl
bnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsKKyAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0g
aXRlbS5nbG9iYWxCb3VuZHMoKSkKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2lu
Z0l0ZW1FeHRlbnQoKnJlY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXlM
aXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KFdURjo6bnVsbG9wdCk7CisgICAgfQorCisgICAgdm9p
ZCB3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSk7CisgICAgdm9pZCBkaWRBcHBlbmRJdGVt
T2ZUeXBlKEl0ZW1UeXBlKTsKIAogICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpOwogCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25z
dCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0
ZW0mKSBjb25zdDsKICAgICAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0
OwogICAgIGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmluZGV4IGNmNGU3NDZlODJkZmQ0YjczM2MzYmJm
N2U4MjQ1ZTVhZjk3MzU0MGYuLmZlYmJiOTJjZjU2ZTYwNmNkYzkzMjUxZjRjYmQwN2MzMTk1ODEw
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTUyLDEz
ICs1Miw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gUmVwbGF5ZXI6OnJlcGxheShj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBib29sCiAgICAgaWYgKFVOTElLRUxZKHRyYWNr
UmVwbGF5TGlzdCkpCiAgICAgICAgIHJlcGxheUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0
PigpOwogCi0gICAgc2l6ZV90IG51bUl0ZW1zID0gbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKLSAgICAgICAgYXV0
byYgaXRlbSA9IG1fZGlzcGxheUxpc3QubGlzdCgpW2ldLmdldCgpOwotCi0gICAgICAgIGlmICgh
aW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8RHJhd2luZ0l0ZW0+KGl0ZW0pKSB7Ci0gICAgICAg
ICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJhd2luZ0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRl
bT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHJhd2luZ0l0ZW0uZXh0ZW50S25vd24oKSAmJiAh
ZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsKKyAgICBmb3Ig
KGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBtX2Rpc3BsYXlMaXN0KSB7CisgICAgICAgIGlmICghaW5p
dGlhbENsaXAuaXNaZXJvKCkgJiYgaXRlbS5pc0RyYXdpbmdJdGVtKCkpIHsKKyAgICAgICAgICAg
IGlmIChleHRlbnQgJiYgIWV4dGVudC0+aW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsKICAgICAg
ICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInNraXBw
aW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC02OCwxMCArNjQsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wK
ICAgICAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX2RlbGVnYXRlLT5hcHBseShpdGVtLCBtX2Nv
bnRleHQpKQogICAgICAgICAgICAgaXRlbS5hcHBseShtX2NvbnRleHQpOwogCi0gICAgICAgIGlm
IChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKQotICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBw
ZW5kSXRlbShjb25zdF9jYXN0PEl0ZW0mPihpdGVtKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSh0
cmFja1JlcGxheUxpc3QpKSB7CisgICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmQoaXRlbSk7
CisgICAgICAgICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICAgICAg
cmVwbGF5TGlzdC0+YWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGTW92ZShleHRlbnQpKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiByZXBsYXlMaXN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCA0MGNkMGZmMGQ0MTY4MGNmYzczZTUw
NGRlY2ZjM2RlZjg3NzUzMjMzLi4wNDVjYWNjZThhMDFjOGQ1ZGNiNjU4YzQwZDYzZTlhMzU4OWI1
YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTUwLDcgKzUw
LDcgQEAgcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkRlbGVnYXRlKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVt
JiwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBi
b29sIGFwcGx5KEl0ZW1IYW5kbGUsIEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgfTsKICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGNlZDFjYTkwZmNiOGUyYTg3
ZmU0MzRiYmI5NzdhZWE1MDZlOWM2NWIuLmE2ODBkOWM2MDM3ZTYyZjhhMTFkOTcyNThlNDQzN2Uy
MmI0NjdhNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0yNywxNCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXll
ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5
cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUlt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlciA9IFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVz
aW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25j
cmV0ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CkBAIC02NCwxNiArNjcsMTYgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVy
IHJlcGxheWVyKEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0
LCB0aGlzKTsKICAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgYm9vbCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBvdmVycmlkZQorICAgIGJvb2wgYXBwbHko
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSwgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKGl0ZW0udHlwZSgp
ID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBwdXRJbWFnZURhdGFJdGVtID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlB1dEltYWdlRGF0YSY+KGl0ZW0pOworICAgICAgICBpZiAoaXRlbS5pczxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpKSB7CisgICAgICAgICAgICBhdXRvJiBw
dXRJbWFnZURhdGFJdGVtID0gaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YT4oKTsKICAgICAgICAgICAgIHB1dEltYWdlRGF0YShwdXRJbWFnZURhdGFJdGVtLmlucHV0
Rm9ybWF0KCksIHB1dEltYWdlRGF0YUl0ZW0uaW1hZ2VEYXRhKCksIHB1dEltYWdlRGF0YUl0ZW0u
c3JjUmVjdCgpLCBwdXRJbWFnZURhdGFJdGVtLmRlc3RQb2ludCgpLCBwdXRJbWFnZURhdGFJdGVt
LmRlc3RGb3JtYXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
ODQsNiArODcsMTExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuYXBwbHlNZWRpYUl0ZW0oaXRlbSwgY29udGV4dCk7CiAgICAgfQogCisgICAgT3B0
aW9uYWw8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVS
TiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aD4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVj
b2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJ
bWFnZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0
aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdGg6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVh
clJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlT2Jq
ZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24g
KyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVt
KSk7CisgICAgICAgICAgICByZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKaW5kZXggZDViYjBmMmQwM2U2ZjM1YTk4ZTQxOWM0MTVkMDU2YjI5NGJlNTdiYS4u
NDY1YjZmNTkwMzg5YzBmMDI4MWU0NWFkNDY0MTYyZWNhMDA1ZjNmZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEwIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVt
JiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0
ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRl
bSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgewor
ICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VC
dWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KCkpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlS
ZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVt
KGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Citib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAo
aXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVk
aWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsK
LQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5
ICsxMzksNDkgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0IGZsdXNoQ29udGV4
dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5j
YWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICBp
bWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CisgICAgVmVjdG9yPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcj4gYnVmZmVySWRlbnRpZmll
cnM7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlzdChbJl0g
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSAt
PiB1aW50OF90KiB7CisgICAgICAgIGJ1ZmZlcklkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gc2hhcmVkSXRlbUJ1ZmZlcihpZGVu
dGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihz
aGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pOwor
CisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2Fn
ZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNo
ZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGlmICghaW1h
Z2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVy
bWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBkaXNwbGF5TGlzdC0+c2V0
SXRlbUJ1ZmZlckNsaWVudChkb3duY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihp
bWFnZUJ1ZmZlcikpOworICAgIGVsc2UKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZm
ZXJDbGllbnQoZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1
ZmZlcikpOworCisgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoKmRpc3BsYXlMaXN0
KTsKKworICAgIGlmIChmbHVzaENvbnRleHQgPT0gU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMpCisg
ICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKKworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFdU
Rk1vdmUoYnVmZmVySWRlbnRpZmllcnMpLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNw
bGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVm
ZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXIt
PmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOwotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1
c2hDb250ZXh0KCk7Ci0gICAgICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJ
ZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIH0KKyAgICBhcHBs
eURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRG
bHVzaENvbnRleHQ6Ok5vKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVz
aERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5k
bGUsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBh
cHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91
bGRGbHVzaENvbnRleHQ6Olllcyk7CisgICAgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChm
bHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCkBAIC0xNjgsNiArMTk3LDE3IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByCiAg
ICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRp
ZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxlKQoreworICAg
IGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRsZS5oYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICBtX3NoYXJlZEl0
ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkpOworfQorCitS
ZWZQdHI8U2hhcmVkTWVtb3J5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRJdGVtQnVm
ZmVyKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSBjb25zdAor
eworICAgIHJldHVybiBtX3NoYXJlZEl0ZW1CdWZmZXJzLmdldChpZGVudGlmaWVyKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaAppbmRleCAyODVlMmY3NGI0ZDRmZDZlNmE4YzVlOTEwMjVhMWM5MjZm
NWZmYjE1Li5mZGFhNjg2MzVhMjE3YTRmMmUzMjk0ZTAxYWEzZGZiNGYxNWI3NGIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjMsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0
OwogCiAgICAgLy8gUmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseVJlc291cmNl
SXRlbShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpOwotICAgIGJvb2wgYXBwbHlNZWRpYUl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5
UmVzb3VyY2VJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmKTsKKyAgICBib29sIGFwcGx5TWVkaWFJdGVtKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8v
IE1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVh
dGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKQEAgLTczLDYgKzc1LDEwIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91bGRGbHVzaENv
bnRleHQgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5TGlzdChjb25z
dCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0KTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
aGFyZWRJdGVtQnVmZmVyKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmll
cikgY29uc3Q7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0
aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04Mywx
NCArODksMTYgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgog
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAg
IHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29u
c3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRS
ZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9p
ZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUm
KTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAg
IFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCmluZGV4IGE4OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMu
LmJiOTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90
UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNp
emUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RB
bmRDb21taXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBX
ZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUs
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hE
aXNwbGF5TGlzdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWlu
dDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29y
ZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2Ug
aW1hZ2VEYXRhKSBTeW5jaHJvbm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJ
UENIYW5kbGUgaGFuZGxlKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9E
ZWNvZGVyLmNwcAppbmRleCA1Y2EyMTI3YTM0NmNkMmE0NjljYTI5N2Y0YWIxMzkwMmY2YTA2Zjhh
Li41MWI5ZmZkOTMwMzQwYmRmZjJmYjcxZDBlNDZjYWNmNDA5MzQ2NTMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcApAQCAtNzQsNiArNzQsMTYgQEAgRGVjb2Rlcjo6RGVj
b2Rlcihjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCB2b2lkICgqYnVm
ZmVyRGVhbGxvY2EKICAgICAgICAgcmV0dXJuOwogfQogCitEZWNvZGVyOjpEZWNvZGVyKGNvbnN0
IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnN0cnVjdFdpdGhvdXRIZWFk
ZXJUYWcpCisgICAgOiBtX2J1ZmZlciB7IGJ1ZmZlciB9CisgICAgLCBtX2J1ZmZlclBvcyB7IG1f
YnVmZmVyIH0KKyAgICAsIG1fYnVmZmVyRW5kIHsgbV9idWZmZXIgKyBidWZmZXJTaXplIH0KKyAg
ICAsIG1fYnVmZmVyRGVhbGxvY2F0b3IoW10gKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIHsgfSkK
K3sKKyAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fYnVmZmVyKSAlIGFsaWdu
b2YodWludDY0X3QpKQorICAgICAgICBtYXJrSW52YWxpZCgpOworfQorCiBEZWNvZGVyOjp+RGVj
b2RlcigpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuaAppbmRleCAzZGQyNDY5NmVmNmNhN2RjOTdkMDEzYTBmZTg3NWQ3YmQ0N2RlMzBhLi5h
MDNlYmIxYjI4MzdlZjZhMzg3M2ExMTVjNGRiZTBmYzU4Y2Q5OTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvRGVjb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZU5h
bWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE3
Myw3ICsxNzQsMjIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNv
ZGVyID0gdHJ1ZTsKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBPcHRp
b25hbDxUPiBkZWNvZGVPYmplY3QoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSkKKyAgICB7CisgICAgICAgIE9wdGlvbmFsPFQ+IHJlc3VsdDsKKyAgICAgICAgRGVjb2Rl
ciBkZWNvZGVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSwgQ29uc3RydWN0V2l0aG91dEhlYWRlcik7Cisg
ICAgICAgIGlmICghZGVjb2Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgICAgIGRlY29kZXIgPj4gcmVzdWx0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKwogcHJpdmF0ZToKKyAgICBlbnVtIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJU
YWcgeyBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyIH07CisgICAgRGVjb2Rlcihjb25zdCB1aW50OF90
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKTsK
KwogICAgIGJvb2wgYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwogICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplX3QgYWxpZ25tZW50
LCBzaXplX3QpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCmlu
ZGV4IDg3ZmU5NTU1MmFjNjA1MmRiY2Q3NmU0OTBkNGFiNmE2NjJlYzhhZDQuLmIwNTU2NjU3Y2Iw
NmYyNGE0Mzc5YmIzM2Q1ZDdmOTdlMTIwY2Q5Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0VuY29kZXIuY3BwCkBAIC03Miw2ICs3MiwxNiBAQCBFbmNvZGVyOjpFbmNvZGVyKE1lc3NhZ2VO
YW1lIG1lc3NhZ2VOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQogICAgIGVuY29kZUhlYWRl
cigpOwogfQogCitFbmNvZGVyOjpFbmNvZGVyKENvbnN0cnVjdFdpdGhvdXRIZWFkZXJUYWcpCisg
ICAgOiBtX21lc3NhZ2VOYW1lKHN0YXRpY19jYXN0PE1lc3NhZ2VOYW1lPigwKSkKKyAgICAsIG1f
ZGVzdGluYXRpb25JRCgwKQorICAgICwgbV9idWZmZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBt
X2J1ZmZlclBvaW50ZXIobV9pbmxpbmVCdWZmZXIpCisgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAg
ICAsIG1fYnVmZmVyQ2FwYWNpdHkoc2l6ZW9mKG1faW5saW5lQnVmZmVyKSkKK3sKK30KKwogRW5j
b2Rlcjo6fkVuY29kZXIoKQogewogICAgIGlmIChtX2J1ZmZlciAhPSBtX2lubGluZUJ1ZmZlcikK
QEAgLTIxOSw3ICsyMjksMTIgQEAgdm9pZCBFbmNvZGVyOjphZGRBdHRhY2htZW50KEF0dGFjaG1l
bnQmJiBhdHRhY2htZW50KQogCiBWZWN0b3I8QXR0YWNobWVudD4gRW5jb2Rlcjo6cmVsZWFzZUF0
dGFjaG1lbnRzKCkKIHsKLSAgICByZXR1cm4gV1RGTW92ZShtX2F0dGFjaG1lbnRzKTsKKyAgICBy
ZXR1cm4gc3RkOjpleGNoYW5nZShtX2F0dGFjaG1lbnRzLCB7IH0pOworfQorCitib29sIEVuY29k
ZXI6Omhhc0F0dGFjaG1lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fYXR0YWNobWVudHMu
aXNFbXB0eSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L0VuY29kZXIuaAppbmRleCAzNjc4ZDRmYWUyOTE1MmQ5OTBmNGQzYTRmMGI3ZTBhZjZjZjc0NzJi
Li5lZmM5NmQ3NDgyMjM5NTI5NWNiNTk5ZDZhZDZhOTU5NDEwOWZhYTk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRW5jb2Rlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiTWVzc2Fn
ZU5hbWVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db250ZXh0TWVudUl0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTk5LDcgKzEwMCwyNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc0lQQ0Vu
Y29kZXIgPSB0cnVlOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlT2JqZWN0KGNvbnN0IFQmIG9iamVjdCkK
KyAgICB7CisgICAgICAgIEVuY29kZXIgZW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyKTsK
KyAgICAgICAgZW5jb2RlciA8PCBvYmplY3Q7CisKKyAgICAgICAgaWYgKGVuY29kZXIuaGFzQXR0
YWNobWVudHMoKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisgICAgfQorCiBwcml2YXRlOgorICAgIGVudW0gQ29uc3RydWN0V2l0aG91dEhlYWRl
clRhZyB7IENvbnN0cnVjdFdpdGhvdXRIZWFkZXIgfTsKKyAgICBFbmNvZGVyKENvbnN0cnVjdFdp
dGhvdXRIZWFkZXJUYWcpOworCiAgICAgdWludDhfdCogZ3JvdyhzaXplX3QgYWxpZ25tZW50LCBz
aXplX3QpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRSwgc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2VudW08RT46OnZhbHVlPiogPSBudWxscHRyPgpAQCAtMTA5LDYgKzEyNyw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGVuY29kZShXVEY6OmVudW1Ub1VuZGVybHlpbmdUeXBlPEU+KGVudW1WYWx1
ZSkpOwogICAgIH0KIAorICAgIGJvb2wgaGFzQXR0YWNobWVudHMoKSBjb25zdDsKKwogICAgIHZv
aWQgZW5jb2RlSGVhZGVyKCk7CiAgICAgY29uc3QgT3B0aW9uU2V0PE1lc3NhZ2VGbGFncz4mIG1l
c3NhZ2VGbGFncygpIGNvbnN0OwogICAgIE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+JiBtZXNzYWdl
RmxhZ3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDk5
MTExYTc4OTBiNTc4NWY0ZTEwNjJkNjg4MjA2NTQ3ZDUyNTAzYmQuLjlmZjk0OGU4YmUxYWFlZGQw
OTNiNGJlMjk5MzQ2MGUyY2Q5OWIyNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQpAQCAtMjA4LDYgKzIwOCw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9m
b3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdTdHJpbmcnLAogICAgICAgICAnV2ViQ29yZTo6
Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEaWN0YXRpb25Db250ZXh0JywKKyAgICAg
ICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFncycsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1
bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRPcldvcmtlcklkZW50
aWZpZXInLApAQCAtNTg1LDYgKzU4Niw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgog
ICAgICAgICAnSlNDOjpNZXNzYWdlU291cmNlJzogWyc8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5
cGVzLmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6Okluc3BlY3RvclRhcmdldFR5cGUnOiBbJzxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JUYXJnZXQuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsOjpDb25uZWN0aW9uVHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPiddLAorICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJJZGVudGlmaWVyJzogWyc8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
aD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAg
ICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAn
U2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhNzRkNjE1YWJkM2Y0
YTMxODYyNTJmZjBmZGNiODcxZTcwZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcApAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShj
b25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3Bs
YXlMaXN0LmZvckVhY2hJdGVtQnVmZmVyKFsmXSAoYXV0byYgaGFuZGxlKSB7CisgICAgICAgIG1f
YnVmZmVycy5hcHBlbmQoeyBoYW5kbGUuaWRlbnRpZmllciwgaGFuZGxlLmNhcGFjaXR5IH0pOwor
ICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3Zp
ZGVyJiYgYnVmZmVyUHJvdmlkZXIpIGNvbnN0Cit7CisgICAgRGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJIYW5kbGVzIGhhbmRsZXM7CisgICAgaGFuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
YnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgW2lkZW50aWZpZXIsIGNhcGFjaXR5XSA6
IG1fYnVmZmVycykgeworICAgICAgICBhdXRvKiBkYXRhID0gYnVmZmVyUHJvdmlkZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGhhbmRsZXMudW5jaGVja2VkQXBwZW5kKHsgaWRlbnRpZmllciwgZGF0YSwgY2Fw
YWNpdHkgfSk7CisgICAgfQorICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdD4oV1RGTW92ZShoYW5kbGVzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDE3NWUxMTRmMjNiYzhmYjhlNTdjZDkwZjY0YTMzYmUyNjJlMWYzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUgeworcHVibGljOgorICAgIHVzaW5nIEl0ZW1CdWZmZXJQcm92
aWRlciA9IEZ1bmN0aW9uPHVpbnQ4X3QqKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllcik+OworCisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gY3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZl
clByb3ZpZGVyJiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gZGVjb2RlKERlY29kZXImKTsKKwor
cHJpdmF0ZToKKyAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShWZWN0b3I8c3RkOjpwYWlyPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4mJiBidWZm
ZXJzKQorICAgICAgICA6IG1fYnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAgIHsKKyAgICB9
CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgc2l6ZV90Pj4gbV9idWZmZXJzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2J1ZmZlcnM7Cit9CisKK3RlbXBsYXRlPGNs
YXNzIERlY29kZXI+IE9wdGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8
VmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXIsIHNpemVfdD4+PiBidWZmZXJzOworICAgIGRlY29kZXIgPj4gYnVmZmVyczsKKyAgICBpZiAo
IWJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sg
V1RGTW92ZSgqYnVmZmVycykgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKaW5kZXggZTBhYjc0MzZiYWRjMzQ2Mzc0OTQ2NjMzNDcxOWI0NWVkZmQyYjMwNi4uNTBlMTAy
NGNhZTBkYzA0MGNhYzMyM2NiY2Q3ZWM1ZTE0NzQ0OTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNzMs
NiArMTczLDcgQEAgU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBT
aGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVu
aWZ5CiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCitTaGFyZWQvU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUuY3BwCiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcAogU2hhcmVkL1No
YXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRPbmx5LmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hU
YWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDQ2NjVjY2I3YmM2YWY3YTdhMDg5MTVmZGU0NjcyNmQ5NjdmNWZjYjQuLmM4MWU0
OGFiMTg3NTg0N2MwZjU2ODA5YTU4MjcwZmFiNzE1MTk4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg3Myw2ICsxODczLDcgQEAK
IAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYw
MDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0Uw
MEM2NzUyQiAvKiBBcHBLaXRTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsg
fTsKIAkJRjQ5NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0
MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9Owor
CQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0
Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNENC
MDlFNTIyNUQ1QTA5MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAz
MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJCUY0RDVGNTFE
MjA2MDg3QTEwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1MTkyMDYwODdB
MDAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CiAJCUY0
RDVGNTFGMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTFC
MjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsg
fTsKQEAgLTU0NTksNiArNTQ2MCw4IEBACiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBB
cHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBh
dGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9u
U3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
bW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8q
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1
NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1
QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8q
IFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlTWVkaWFT
b3VyY2VQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNjYsNiArNjE2
OSw4IEBACiAJCQkJMUE2NDIwRTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5o
ICovLAogCQkJCTUxMjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5j
cHAgKi8sCiAJCQkJNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNl
LmggKi8sCisJCQkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmNwcCAqLywKKwkJCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGUuaCAqLywKIAkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hh
cmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKIAkJCQk4MzEzRjdFOTFGN0RBRTAzMDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCiAJCQkJODMxM0Y3RTgxRjdEQUUwMzAwQjk0
NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMTMxNSw2ICsxMTMyMCw3
IEBACiAJCQkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVm
ZmVyQ29weS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8q
IFNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkJD
MjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZm
ZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIg
LyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKaW5kZXggMjI2NGViY2I2NjY0ZDcxZmZmMGE0MDA0MmZiMjU0MmNhODA2NmVi
NC4uMDZkZDRmNTFjMzdhODQxZWEzYzRjYWRmOWEwZjE0ODZhMjIzMTU3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RSZWNvcmRlci5oPgpAQCAtMzYsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1Ymxp
YyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRl
bGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xp
ZW50IHsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZURpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsKQEAgLTc3LDYgKzgxLDggQEAgcHJvdGVjdGVk
OgogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3Bs
YXlMaXN0KCkuc2V0SXRlbUJ1ZmZlckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7CiAg
ICAgfQogCiAgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZs
dXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CkBAIC0xMDQsMTAg
KzExMCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmICghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBhdXRvJiBk
aXNwbGF5TGlzdCA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSo+KHRoaXMpLT5t
X2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlzdC5p
dGVtQ291bnQoKSkgewotICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Jj4oKnRoaXMpLmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOworICAgICAgICBhdXRv
JiBtdXRhYmxlVGhpcyA9IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSY+KCp0aGlz
KTsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtdXRhYmxlVGhpcy5tX2RyYXdpbmdDb250
ZXh0LmRpc3BsYXlMaXN0KCk7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtdXRhYmxlVGhpcy5mbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsK
ICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICBtdXRhYmxlVGhp
cy5tX2l0ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0ID0gMDsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIGdldEltYWdlRGF0YSBpcyBzeW5jaHJvbm91cywgd2hpY2ggbWVhbnMgd2UndmUgYWxy
ZWFkeSByZWNlaXZlZCB0aGUgQ29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQgbWVzc2FnZS4K
QEAgLTE0MSwxOCArMTQ5LDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KTsKLSAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKGRp
c3BsYXlMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBUcmFj
ZVNjb3BlIHRyYWNpbmdTY29wZShGbHVzaFJlbW90ZUltYWdlQnVmZmVyU3RhcnQsIEZsdXNoUmVt
b3RlSW1hZ2VCdWZmZXJFbmQsIDEpOwogICAgICAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChk
aXNwbGF5TGlzdCwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgICAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkudW5s
b2NrUmVtb3RlUmVzb3VyY2VzRm9yUmVtb3RlQ2xpZW50KG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICAgICAgbV9pdGVtQ291
bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA9IDA7CiAgICAgfQogCiAgICAgdm9pZCBmbHVzaERpc3Bs
YXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IHx8ICFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgaWYgKCFtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB8fCBkaXNwbGF5TGlzdC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoRmx1c2hSZW1v
dGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJlbW90ZUltYWdlQnVmZmVyRW5kKTsKQEAgLTE3MCwy
MCArMTc5LDEyNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0m
KSBvdmVycmlkZQorICAgIHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgY29uc3RleHByIHNpemVf
dCBEaXNwbGF5TGlzdEJhdGNoU2l6ZSA9IDUxMjsKICAgICAgICAgYXV0byYgZGlzcGxheUxpc3Qg
PSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7Ci0gICAgICAgIGlmIChkaXNwbGF5TGlz
dC5pdGVtQ291bnQoKSA8IERpc3BsYXlMaXN0QmF0Y2hTaXplKQorICAgICAgICBpZiAoKyttX2l0
ZW1Db3VudEluQ3VycmVudERpc3BsYXlMaXN0IDwgRGlzcGxheUxpc3RCYXRjaFNpemUpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgZmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7
CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNvdW50SW5DdXJy
ZW50RGlzcGxheUxpc3QgPSAwOwogICAgIH0KIAotICAgIHZvaWQgZGlkQXBwZW5kSXRlbShjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSkgb3ZlcnJpZGUKKyAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBj
YXBhY2l0eSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5cGUoKSA9PSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKKyAgICAgICAgaWYg
KG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgcmV0dXJuIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KTsKKwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6
RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRo
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdG
b2N1c1JpbmdSZWN0cz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdSZWN0cz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0dseXBocz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNv
ZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdJbWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFn
ZUJ1ZmZlcj4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdl
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAg
ICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdOYXRpdmVJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29k
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVu
Y29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
VGlsZWRJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29k
ZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZT4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmpl
Y3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xv
cjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhHcmFkaWVudD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29k
ZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQ
YXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXA6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0OgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxJbmxp
bmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxpcHNl
OgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
IHR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKICAgICB9CiAKQEAgLTE5MSw2ICszMDUsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsK
ICAgICBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgeyBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6Omdl
bmVyYXRlKCkgfTsKICAgICBXZWFrUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CisgICAgc2l6ZV90IG1faXRlbUNvdW50SW5DdXJy
ZW50RGlzcGxheUxpc3QgeyAwIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCA3YTAxOTMwYWI2NmM0NDcz
MDUxMDkzMDM0ZDRmMzZkMmMwZTY0OGEyLi45ZGYxMjE0OGIwYTQ1YzlhOWFmNDlkMTFmYzlhMzBh
MTllZTE2ZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBA
IC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMTYsMTMgKzExOCwx
MyBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3QoeyBkaXNwbGF5TGlzdCB9
LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKIH0KIAogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IERpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIgc2VudEZsdXNoSWRlbnRpZmllciA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNo
RGlzcGxheUxpc3RBbmRDb21taXQoZGlzcGxheUxpc3QsIHNlbnRGbHVzaElkZW50aWZpZXIsIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxh
eUxpc3RBbmRDb21taXQoeyBkaXNwbGF5TGlzdCB9LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
ICAgICByZXR1cm4gc2VudEZsdXNoSWRlbnRpZmllcjsKIH0KIApAQCAtMTU1LDYgKzE1NywzMSBA
QCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdFdhc0Nv
bW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSQogICAgICAgICBkb3duY2FzdDxVbmFjY2VsZXJhdGVk
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eT4oKmltYWdlQnVmZmVyKS5jb21taXRGbHVzaERpc3BsYXlM
aXN0KGZsdXNoSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpyZWxlYXNlU2hhcmVkSXRlbUJ1ZmZlcnMoVmVjdG9yPERpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllcj4mJiBpZGVudGlmaWVycywgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBmb3IgKGF1dG8gaWRlbnRpZmll
ciA6IGlkZW50aWZpZXJzKSB7CisgICAgICAgIGlmICghbV9zaGFyZWRJdGVtQnVmZmVycy5yZW1v
dmUoaWRlbnRpZmllcikpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKworRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkKK3sKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUgPSAx
IDw8IDE2OworCisgICAgYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRl
KHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2FwYWNpdHkpKTsKKyAgICBp
ZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gaWRlbnRp
ZmllciA9IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAg
ICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBzaGFyZWRNZW1vcnlIYW5kbGU7CisgICAgc2hhcmVkTWVt
b3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVkTWVtb3J5SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3Rl
Y3Rpb246OlJlYWRPbmx5KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpEaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShpZGVudGlmaWVyLCB7IFdURk1vdmUoc2hhcmVk
TWVtb3J5SGFuZGxlKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkgfSksIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMuc2V0KGlkZW50aWZpZXIsIHNo
YXJlZE1lbW9yeS5jb3B5UmVmKCkpOworCisgICAgcmV0dXJuIHsgaWRlbnRpZmllciwgcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBzaGFyZWRNZW1vcnkt
PnNpemUoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4
IDk5NTY1YjZmMTY2YmIyZDgwNjE0MTg0OTcyZTM0MzcwNmNlN2ZlYzkuLjEzMWU0OTE5NmRkOTVh
Mjc1YjgxNTFiODU2ZWJhNTNjNjk3ZjQ3MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
ICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGljOgogICAgIH5SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94
eSYgcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkgeyByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHk7IH0KKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBj
cmVhdGVJdGVtQnVmZmVyKHNpemVfdCk7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAg
ICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtNzIsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UpOwogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGdldEltYWdl
RGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsK
ICAgICBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2Uo
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIApAQCAtODQsNyArODcsOSBA
QCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgaW1h
Z2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBmbHVzaERp
c3BsYXlMaXN0V2FzQ29tbWl0dGVkKERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVNoYXJlZEl0
ZW1CdWZmZXJzKFZlY3RvcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXI+JiYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNo
YXJlZE1lbW9yeT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMgfTsKICAgICBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDhmMjQ1ODU2MzVm
NDcwODNkMWRiMjdhNWIzOTY2NjVmMzE1ZWJjYjAuLjc5YTk4NjY1MDZkMWMyNWEwOTZiYTUxNDY5
NmJkOWM4YmE5MjMxMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMyw4ICsyMyw5IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291
bnRlZCB7Ci0gICAgdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZs
b2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNo
RGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmll
ciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3Jl
YXRlZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xv
clNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CisgICAgRmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBSZWxlYXNlU2hhcmVk
SXRlbUJ1ZmZlcnMoVmVjdG9yPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRp
Zmllcj4gaWRlbnRpZmllcnMsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggM2Y1YTczYmVj
M2JmMjg2ZTUyOTgxZGU0OGI5MGMzMWQwMTlkOGMzZC4uMGY5YTZlOGYxOWUxZDk4NTY5ZmVkMWJi
YzQxZDA3NjgzZWFjZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApA
QCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZm
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA4MWZkOGU2NDQ0NTYzNjNhMjA3ZGI3YTAyYWE1ZTc4MjMwZjcxY2IwLi4yYmIxMTIwZmYy
NGRhOTgzY2U4OTNjYTc0ZmU4MDBiZjQyNGEwOWU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjAtMTAtMzAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0NvbmN1cnJlbnQgZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBk
aXJlY3RseSBpbnRvIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlYmFzZWxpbmUgc2V2ZXJhbCBleGlzdGluZyAobm9uLUdQVS1w
cm9jZXNzKSBkaXNwbGF5IGxpc3QgdGVzdHMgdG8gYWNjb3VudCBmb3IgYSBzbGlnaHQgdHdlYWsg
aW4gdGhlIGZvcm1hdCBpbgorICAgICAgICB3aGljaCBkaXNwbGF5IGxpc3RzIGFyZSBkdW1wZWQg
YXMgdGV4dC4gTW9yZSBzcGVjaWZpY2FsbHksIGRyYXdpbmcgaXRlbSBleHRlbnRzIGFyZSBub3cg
ZHVtcGVkIGFmdGVyIGVhY2gKKyAgICAgICAgZHJhd2luZyBpdGVtLCByYXRoZXIgdGhhbiBiZWZv
cmUuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNm
b3Jtcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1s
aXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xp
cHBlZC1yZWN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0xMC0zMCAgS2FybCBSYWNrbGVyICA8cmFj
a2xlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2OTA3MCk6IFsgQmlnIFN1
ciBdIGVkaXRpbmcvaW5wdXQvcmV2ZWFsLWNhcmV0LW9mLW11bHRpbGluZS1pbnB1dC5odG1sIGlz
IGEgY29uc3RhbnQgZmFpbHVyZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDMyODg0ODA2MjcwMTlk
NTQwMmQ5NDI1ZmM0YTEzMTM3NzBlY2IzMWEuLjE0NTFiMTkyNTNjMzIzODkyOGJiZDlmNWU1ZGVi
YjkyNzRjNTBkNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTAgKzYsOCBAQAogICAoZmls
bC1jb2xvciAjQzgwMDAwKQogICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxs
LXJlY3QKLSAgKGV4dGVudCBhdCAoMTAsMTQwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAoMTAs
MTApIHNpemUgNTV4NTApKQorICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApIGV4dGVudCBh
dCAoMTAsMTQwKSBzaXplIDU1eDUwKQogKHNldC1pbmxpbmUtZmlsbC1jb2xvcgogICAoY29sb3Ig
IzAwMDBDODgwKSkKIChmaWxsLXJlY3QKLSAgKGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUw
KQotICAocmVjdCBhdCAoMzAsMzApIHNpemUgNTV4NTApKQorICAocmVjdCBhdCAoMzAsMzApIHNp
emUgNTV4NTApIGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUwKQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0
ZWQudHh0CmluZGV4IGU5ZjU0MDQxN2JkNmU1ZGM3Nzg2MTVlNWYzNzk0OTc2ZTQxOTVmOGQuLjU5
MGI5M2Y1Yzg5MmNhZTM3ZjQyNDYwOWE4ZmU0ODAzM2U2NjgzNjggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBl
Y3RlZC50eHQKQEAgLTksOSArOSw4IEBACiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdo
dD0yMCkKICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3NpdGVk
LXJlY3QKLSAgKGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUw
LDUwKSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJh
dGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jt
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IGUwNDUyYTE3M2ExYWZlMjM3ZjcyOGQzMGJj
MjdlYzYwZWVjOTYyM2QuLjI4Y2NmNGMwMTg1OWRlMTkwYjBhOWEyN2ZhMmZlYzAwNjNlZDhlMWMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJh
bnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMTEsMTEgKzExLDEwIEBACiAg
IChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNy4xNCww
LjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkK
ICAgKGNvbG9yICMwMDAwRkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQot
ICAoYmxlbmQtbW9kZSBub3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAo
Ny4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVzdG9yZSkKIChzZXQtY3RtCiAgIChz
ZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBl
Y3RlZC50eHQKaW5kZXggYmQ4NzZkZjQwM2E0YWRkMGJjMzkxZjdjNjJhYzJiNGMzYmNmN2RhMC4u
YmMxN2I1MTE0OTlmODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjljYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0
CkBAIC0zLDI5ICszLDI0IEBACiAgICh4IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwtY29tcG9z
aXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogICAocmVjdCBhdCAo
MCwwKSBzaXplIDEwNHgxMDQpCiAgIChjb2xvciAjMDA4MDAwKQogICAoY29tcG9zaXRlLW9wZXJh
dGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUg
bm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogKHNldC1zdGF0ZQogICAoY2hh
bmdlLWZsYWdzIDMyOTYwKQogICAoZmlsbC1jb2xvciAjMDAwMEZGKQogICAoc3Ryb2tlLXN0eWxl
IDApCiAgIChzaG91bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgw
LDApIHNpemUgMTA0eDIpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDIpCi0gIChib3JkZXIt
dGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAs
MCkgc2l6ZSAxMDR4MikKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwxMDIpIHNpemUgMTA0
eDIpCiAgIChyZWN0IGF0ICgwLDEwMikgc2l6ZSAxMDR4MikKLSAgKGJvcmRlci10aGlja25lc3Mg
MS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMCwxMDIpIHNpemUg
MTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKICAgKHJl
Y3QgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChi
b3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDJ4MTA0KQogKGRyYXct
cmVjdAotICAoZXh0ZW50IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDEwMiww
KSBzaXplIDJ4MTA0KQotICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlj
a25lc3MgMS4wMCkgZXh0ZW50IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1l
eHBlY3RlZC50eHQKaW5kZXggYWRkZDJjYTQyNTBjMjRhMGM5ZWUyMjU1ZDQyNzVhNzZmNjA0M2Vl
ZC4uYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQt
cmVjdC1leHBlY3RlZC50eHQKQEAgLTMsMTEgKzMsMTAgQEAgcmVjb3JkZWQ6CiAgICh4IDAuMDAp
CiAgICh5IDAuMDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDQxMiww
KSBzaXplIDEwMHgxMDApCiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29s
b3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVu
ZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIsMCkg
c2l6ZSAxMDB4MTAwKQogCiByZXBsYXllZDoKICgK
</data>
<flag name="commit-queue"
          id="429528"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412993</attachid>
            <date>2020-11-02 17:37:45 -0800</date>
            <delta_ts>2020-11-03 16:04:25 -0800</delta_ts>
            <desc>More WIP</desc>
            <filename>bug-218406-20201102173744.patch</filename>
            <type>text/plain</type>
            <size>396805</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI3NWNmNjJmYzhiYmE5
NzMxMDQxZDU3ZTcwOTU0MTVhYWZiY2YwMy4uMGJlMDg5ODc4NDgwMTg3YTBiMjBlODRjNzA0YWYz
MWExYTY2MDhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyMCBAQAorMjAyMC0xMS0wMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBG
b3JGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHVtcERyYXdpbmdJdGVt
RXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNU
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6
ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRl
bUV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojph
cHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVhckN1cnJlbnRJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0
b3I6Om1vdmVUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnRyYWNrc0RyYXdpbmdJdGVtRXh0
ZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjp+aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJh
dG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVy
YXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjplbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVtQXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjppdGVtQ291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6bGlzdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmRE
cmF3SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnRha2VEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzRHJhd2lu
Z0l0ZW0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
Okl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
On5JdGVtQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX2FsbG9jYXRl
ZEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fcmVhZE9ubHlCdWZm
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3dyaXRhYmxlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpvcGVyYXRvcj0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1CdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmZvckVhY2hJ
dGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVyOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Om9wZXJhdG9yIGJvb2wg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Om9wZXJh
dG9yISBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6
aXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6Omdl
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQ6On5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQ6On5JdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6c2l6ZUlu
Qnl0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXI6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpy
ZWFkT25seUJ1ZmZlcnMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6c2l6ZU9mSXRlbUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OmlzSW5saW5lSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbVR5cGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6U2V0U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OkRyYXdHbHlwaHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZmZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmFwcGx5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OkRyYXdO
YXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46
OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNG
b3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OlB1dElt
YWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1l
ZGlhOjpQYWludEZyYW1lRm9yTWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06Okl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW06OnNpemVJbkJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNhdmU6OlNhdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlc3RvcmU6OlJlc3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OlNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRMaW5l
Q2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6U2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OkNsZWFyU2hhZG93KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpDbGlwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpDbGlwT3V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpDbGlw
T3V0VG9QYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
UGF0aDo6Q2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
OjpEcmF3SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZm
ZXI6OkRyYXdJbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdFbGxpcHNlOjpEcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg6OkRyYXdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OkZpbGxSZWN0V2l0aENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6
RmlsbFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxF
bGxpcHNlOjpGaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBh
dGg6OlN0cm9rZUlubGluZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpF
bmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6QXBwbHlTdHJv
a2VQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxl
RmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNh
dmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
YXZlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlc3RvcmU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXN0b3JlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlRyYW5zbGF0ZTo6VHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJvdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2NhbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldENUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmls
bEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6U2V0SW5saW5lRmls
bENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29s
b3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxp
bmVGaWxsQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OlNldElubGluZVN0
cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dElubGluZVN0cm9rZUNvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpTZXRT
dHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6dGhpY2tuZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpTZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNh
cDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6U2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldExpbmVEYXNoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OlNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVy
TGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRl
ckxpbWl0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyU2hhZG93Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Q2xpcE91dDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xp
cE91dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Q2xpcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBUb0RyYXdpbmdDb21tYW5kczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVk
U2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNj
YWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2VCdWZmZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6c291cmNlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRl
c3RpbmF0aW9uUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d05hdGl2ZUltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6RHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
RHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNl
OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBz
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0
czo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OkZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoQ29sb3I6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBv
c2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
b3VuZGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpG
aWxsSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGlu
ZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbElubGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQ
YXRoOjpTdHJva2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VJbmxpbmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9r
ZVBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3Vu
ZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdJdGVtOjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmVu
Y29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNjYWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldENUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZp
bGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxD
b2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNh
cDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05h
dGl2ZUltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0VsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRl
ZFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBh
dGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bEVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbEVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1l
Rm9yTWVkaWE6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZUlubGluZVBhdGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
ZWFyUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkFwcGx5RmlsbFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBl
bmRTdGF0ZUNoYW5nZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRpZEFwcGVuZEl0ZW1PZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpjbGVhclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xp
cFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZGlkQXBwZW5k
SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OkRlbGVnYXRlOjp3aWxsQXBwZW5kSXRlbU9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlOjpkaWRBcHBlbmRJdGVtT2ZUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6aXRlbUNvdW50IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGU6OndpbGxB
cHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6RGVsZWdhdGU6OmRpZEFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6cmVwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZTo6YXBwbHkpOgor
CiAyMDIwLTEwLTI5ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0NvY29hXSBbR1BVIFByb2Nlc3NdIFBlcmZvcm0gaW1hZ2UgZGVjb2Rpbmcgb2Yg
Y29sb3IgZm9udHMgaW4gdGhlIFdlYiBQcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkxNTdiNzA4NWU0MmE4
Yzk0N2Q1YTVlNmE5OWNhZDI2ZjMzMDkzYTkuLmViN2JlMWQ0YmJkMjg0NTFlMTcyZmVkZTQ1MWI1
ZWQ3YzU3NzVkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMjAtMTEtMDIgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbmN1cnJlbnQg
ZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbnRvIHNo
YXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkanVzdCBmb3IgY2hhbmdlcyB0byBkaXNwbGF5IGxpc3RzIGFuZCBkaXNwbGF5IGxpc3Qg
aXRlbXMgaW4gV2ViQ29yZSAoc2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZQor
ICAgICAgICBpbmZvcm1hdGlvbikuIEluIHBhcnRpY3VsYXIsIHdlIGltcGxlbWVudCB0aGUgcmVh
ZGluZyBhbmQgd3JpdGluZyBjbGllbnQgaG9va3MgY29uc3VsdGVkIGJ5IEl0ZW1CdWZmZXIsIGFu
ZCB3ZQorICAgICAgICBhbHNvIGFkZCBhIHRlbXBvcmFyeSBtZWNoYW5pc20gdGhhdCBhbGxvd3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IChpbiB0aGUgd2ViIHByb2Nlc3MpIHRvIHNlbmQg
ZGlzcGxheSBsaXN0CisgICAgICAgIGl0ZW0gZGF0YSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgdG8g
dGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgKGluIHRoZSBHUFUgcHJvY2VzcykuIFRoaXMgdGVt
cG9yYXJ5IG1lY2hhbmlzbQorICAgICAgICBkb2VzIG5vdCBhdHRlbXB0IHRvIG1ha2UgYW55IHJl
YWRpbmcgb3Igd3JpdGluZyBpbiBzaGFyZWQgbWVtb3J5IGNvbmN1cnJlbnQgYmV0d2VlbiB0aGUg
R1BVIGFuZCB3ZWIgcHJvY2Vzc2VzLAorICAgICAgICBhbmQgZXhpc3RzIG9ubHkgdG8gbWFrZSBz
dXJlIHRoYXQgcmVuZGVyaW5nIHdpdGggdGhlIEdQVSBwcm9jZXNzIHN0aWxsIHdvcmtzIHVzaW5n
IHRoZXNlIG5ldyBkaXNwbGF5IGxpc3QgaXRlbXMuCisKKyAgICAgICAgSW4gdGhlIG5leHQgcGF0
Y2gsIEkgd2lsbCBhZGQgYSBzaW1wbGUgY29uY3VycmVudCByZWFkZXIvd3JpdGVyIG1vZGVsIGZv
ciBkaXNwbGF5IGxpc3QgcHJvY2Vzc2luZyBiZXR3ZWVuIHRoZQorICAgICAgICB3ZWIgYW5kIEdQ
VSBwcm9jZXNzZXMsIGFuZCAoaW4gZG9pbmcgc28pIHJldmVydCBtb3N0IG9mIHRoZSBjaGFuZ2Vz
IGluIGBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kYCBhbmQKKyAgICAgICAgYFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eWAgYmVsb3cuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBt
b3JlIGRldGFpbC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXIuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENy
ZWF0ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlS
ZXNvdXJjZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjph
cHBseU1lZGlhSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkSXRlbUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6
CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcDoKKyAgICAgICAg
KElQQzo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChJUEM6Om1fYnVmZmVyRGVhbGxvY2F0
b3IpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9EZWNvZGVyLmg6CisgICAgICAgIChJUEM6OkRl
Y29kZXI6OmRlY29kZU9iamVjdCk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3Bw
OgorICAgICAgICAoSVBDOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKElQQzo6RW5jb2Rl
cjo6cmVsZWFzZUF0dGFjaG1lbnRzKToKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6aGFzQXR0YWNo
bWVudHMgY29uc3QpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNwbGF5TGlzdCBjb25zdCk6CisgICAg
ICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmRlY29kZSk6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4dEFuZENvbW1pdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpyZWxlYXNlU2hhcmVkSXRlbUJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwOgorCiAyMDIwLTEwLTMwICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSW5zcGVjdG9yRnJv
bnRlbmRBUElEaXNwYXRjaGVyIHRvIFdlYkNvcmUsIGNsZWFuIHVwIHVzZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDQwNmUwNGU5ZjU1MDEwNTBlOGJhN2VmMTFhYTQxYjBiYmJiZWMwYzMuLjVlMmI0
ZDNlNDZiYmY1NmIwZDdlMTI2ODAyYTM5ZjYyZjhhN2Y0MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTI0MSw2ICsxMjQxLDggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYzNzcxYjA0MDU4
N2E5NDg1ZjQ0NjA4ZjhjMTI4M2VmNzZjNjE1ZjkuLjQ5MTUwZDY3NTU0OTkxMjk4MzFkYTRlOTNj
YzY3NmY2OGMzOTc0Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYxLDYgKzE5NjEsOCBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY2YWY1MGQyMWVjMjc3NjQ2ZGMx
NDdlNDg2ODY1MmJhYzI1MDY3MmUuLjJiMDZhMzQ0OGQ5ZTkyNTAwZTZjYjcyNGNhNGIyOTFhYmE3
ZGEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTUxNjAsNiArNTE2MCw3IEBACiAJCUYzQUJGRTBDMTMwRTlEQTAwMEU3RjdE
MSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3RDEgLyogSW5zdHJ1bWVudGlu
Z0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhh
bmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYz
RDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovOyB9OwogCQlGNDAz
RTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIzNjNCNThDMDAwNDQ1NTAgLyog
RW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyMkI4
QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MjkyNjE4MjUyNjRENDQw
MDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRp
YVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2Fy
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQzM0U5
MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDQwRTc3QTIzM0Q5NEQ3MDA2M0Y5
QUIgLyogTmF2aWdhdG9yQ2xpcGJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDQwRTc2RjIzM0Q5NEQzMDA2M0Y5QUIgLyogTmF2aWdhdG9yQ2xp
cGJvYXJkLmggKi87IH07CkBAIC01MTg0LDYgKzUxODUsNyBAQAogCQlGNDhEMkE3RTIxNTcxODI2
MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2NzUyQiAvKiBGb250QXR0cmli
dXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFBMzIxNTk3NDBEMDBDNjc1MkIg
LyogQ29sb3JDb2NvYS5oICovOyB9OwogCQlGNDk3ODY4ODFGRjQ1RkE1MDBFMDYwQUIgLyogUGFz
dGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1JbmZvLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjRBNkQ2
QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkEzMjU0QzUxMkMwMEI2NUZB
QSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAwOUUxRTdEIC8qIERPTVBhc3Rl
QWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEJGQjk4NTFFMURERjlCMDA4
NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURERjJCMDA3NkI3RUEgLyogRHVt
cEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwogCQlGNEJGQjk4NjFFMURERjlCMDA4NjJDMjQgLyog
RWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4NDFFMURERjJCMDA3NkI3RUEgLyogRWRpdGluZ0hpc3Rv
cnlVdGlsLmpzICovOyB9OwpAQCAtMTYzMTEsNiArMTYzMTMsOCBAQAogCQlGM0Q0NjE0NzExNjFE
NTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODYy
MzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
bnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDIyQjhCNTI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
NDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250
QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udEF0dHJp
YnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQzM0U5
MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTYzNjQsNiArMTYzNjgsOCBAQAogCQlGNDhEMkFBNDIxNTk3NDBEMDBDNjc1
MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbG9yQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3MUZGNDVGQTUwMEUwNjBBQiAv
KiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEl0ZW1JbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5OEU0MjFERUU2QzEwMDlBRTU1
RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRBY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEgLyog
RGlzcGxheUxpc3RJdGVtVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEl0ZW1UeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZB
QSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlM
aXN0SXRlbVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEI0MjJDMjIy
MEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUGFz
dGVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDNUYyMDUyNDc5RTdF
RTAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBi
b2FyZEltYWdlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QzVGMjA4
MjQ3OUU5QzgwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzYxOCw4ICsxNzYyNCwxMiBAQAogCQkJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5
MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3MkVBMDlGOTIzRkND
QzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTcyRUEw
OUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCisJCQkJ
RjQyMkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8s
CisJCQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5o
ICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNw
cCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5o
ICovLAorCQkJCUY0QTZENkE2MjU0QzUxRTkwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBl
LmNwcCAqLywKKwkJCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEgLyogRGlzcGxheUxpc3RJdGVt
VHlwZS5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCAqLywKIAkJCQkwRkU1RkJDRjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3RSZWNvcmRlci5oICovLAogCQkJCTBGRTVGQkQwMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlcGxheWVyLmNwcCAqLywKQEAgLTMxNDQyLDcgKzMxNDUyLDkgQEAKIAkJCQkxQ0FGNTZE
QjI1MzAxQUM4MDAxN0I0NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NUFEMDkzRTI0MDg5NjM1MDBERTRE
MkYgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQyMkI4
QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUY0QTZENkE0MjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlz
dEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA2YTgwYjg0NjAwZTBhMmJiMDU1
NTIzOTU1ZmU5Y2M2MGE5YWVjM2NiLi5mNDdkYmQyZDlmOGJlMmU4NTU1YWI2ZDk2NzhhOTVlNjY1
ZGEyODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMjAyMSw3ICsyMDIxLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpCiAgICAgQVNTRVJUKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiAKICAgICBhdXRv
JiBkaXNwbGF5TGlzdCA9IG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlzcGxheUxpc3QoKTsKLSAgICBp
ZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICBpZiAoIWRpc3BsYXlMaXN0LmlzRW1w
dHkoKSkgewogICAgICAgICBEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoKmNhbnZhc0Jh
c2UoKS5kcmF3aW5nQ29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CiAgICAgICAgIHJlcGxheWVyLnJl
cGxheSh7IEZsb2F0UG9pbnQ6Onplcm8oKSwgY2FudmFzQmFzZSgpLnNpemUoKSB9KTsKICAgICAg
ICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggMGQxY2E5MmQ2MDQ1ZWIzN2E3OGQzZTE4
OTdjMjZmNDJiOWM3NmYzYS4uNTlkMzIzMGUwZThmNDM2MGQ3M2ViMzM2ODI1MzRhM2U0OTBhNjgz
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250
ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9w
ZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIGVudW0gQ2hhbmdlIDogdWlu
dDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBmZmQ5ZDZkZGZiNjBhYzFh
MDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi5lYTBhZjk4NmVmZDUyMDhhNDkzN2VlYmI0NWVhMmQ5
MzNmMzljZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKIAorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcCgpIGNvbnN0
CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYgb3Ro
ZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0cikp
CisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJhd2lu
Z0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoSXRl
bUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVtcyhtYWtlVW5pcXVlPEl0ZW1C
dWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlMaXN0KCkgPSBkZWZhdWx0Owor
CitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShEaXNwbGF5TGlzdCYmIG90aGVy
KQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIp
OworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdp
bmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgRGlzcGxh
eUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9pdGVtcykK
KyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0ZW50cy5jbGVh
cigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0Rmxh
Z3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKICAgICBzd2l0
Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAg
IGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBkb3duY2FzdDxTZXRTdGF0ZT4o
aXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRT
dGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0
ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4K
ICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODAsMTMgKzEwNSwyNiBAQCBib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0m
IGl0ZW0pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGR1bXBEcmF3aW5nSXRl
bUV4dGVudChUZXh0U3RyZWFtJiBzdHJlYW0sIE9wdGlvbmFsPEZsb2F0UmVjdD4mJiBleHRlbnQp
Cit7CisgICAgc3RyZWFtIDw8ICIgZXh0ZW50ICI7CisgICAgaWYgKGV4dGVudCkKKyAgICAgICAg
c3RyZWFtIDw8ICpleHRlbnQ7CisgICAgZWxzZQorICAgICAgICBzdHJlYW0gPDwgInVua25vd24i
OworfQorCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1RleHRGbGFncyBmbGFncykgY29u
c3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFtOjpMaW5lTW9kZTo6TXVsdGlw
bGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHlsZVJlY3QpOwotICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0
aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdzKGZsYWdzLCBpdGVtKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3Jv
dXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07CisgICAgICAgIGlmIChpdGVtLmlz
RHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIGR1bXBEcmF3aW5nSXRlbUV4dGVudChzdHJlYW0s
IFdURk1vdmUoZXh0ZW50KSk7CiAgICAgfQogICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOwog
fQpAQCAtOTYsMTAgKzEzNCwxMSBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwogICAgIHRz
IDw8ICJkaXNwbGF5IGxpc3QiOwogCi0gICAgc2l6ZV90IG51bUl0ZW1zID0gbV9saXN0LnNpemUo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKLSAgICAgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7Ci0gICAgICAgIHRzIDw8IGkgPDwgIiAi
IDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhp
cykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICAgICAg
dHMgPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAg
ICAgZHVtcERyYXdpbmdJdGVtRXh0ZW50KHRzLCBXVEZNb3ZlKGV4dGVudCkpOwogICAgIH0KICAg
ICB0cy5zdGFydEdyb3VwKCk7CiAgICAgdHMgPDwgInNpemUgaW4gYnl0ZXM6ICIgPDwgc2l6ZUlu
Qnl0ZXMoKTsKQEAgLTEwOCwxMyArMTQ3LDI3NiBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAogCiBzaXplX3QgRGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzKCkg
Y29uc3QKIHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8mIHJlZiA6IG1f
bGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5dGVzKHJlZik7CisgICAgcmV0
dXJuIG1faXRlbXMgPyBtX2l0ZW1zLT5zaXplSW5CeXRlcygpIDogMDsKK30KKworYm9vbCBEaXNw
bGF5TGlzdDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2l0ZW1zIHx8IG1faXRl
bXMtPmlzRW1wdHkoKTsKK30KKworSXRlbUJ1ZmZlciYgRGlzcGxheUxpc3Q6Oml0ZW1CdWZmZXIo
KQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgbV9pdGVtcyA9IG1ha2VVbmlxdWU8SXRl
bUJ1ZmZlcj4oKTsKKyAgICByZXR1cm4gKm1faXRlbXM7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6
OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNsaWVudCkKK3sK
KyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgRGlzcGxheUxp
c3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQgRGlzcGxh
eUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhh
bmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGlmIChtX2l0ZW1zKQorICAgICAg
ICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3ZlKG1hcEZ1bmN0aW9uKSk7Cit9CiAK
LSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBEaXNwbGF5TGlzdDo6c2V0VHJhY2tzRHJhd2luZ0l0
ZW1FeHRlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXRlbXMgfHwg
bV9pdGVtcy0+aXNFbXB0eSgpKTsKKyAgICBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyA9IHZh
bHVlOwogfQogCit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBpdGVtKQorewor
ICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UmVzdG9yZT4oaXRlbS5nZXQ8
UmVzdG9yZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICByZXR1
cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRlPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Um90YXRlPihpdGVtLmdldDxS
b3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KGl0ZW0uZ2V0
PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxHcmFkaWVudD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29s
b3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0cm9rZVRoaWNr
bmVzcz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+KGl0ZW0uZ2V0
PFNldExpbmVDYXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFzaD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0
TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGltaXQ+KGl0ZW0u
Z2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93Ogor
ICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVhclNoYWRvdz4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlw
PihpdGVtLmdldDxDbGlwPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXBPdXQ+KGl0ZW0uZ2V0PENsaXBPdXQ+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcE91dFRv
UGF0aD4oaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcFBhdGg+KGl0ZW0uZ2V0PENsaXBQYXRo
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAg
IHJldHVybjsgLy8gRklYTUU6IFN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gY2xvbmUgZGlzcGxheSBs
aXN0cyAodGhpcyBpcyBjdXJyZW50bHkgb25seSB1c2VkIGZvciBkaXNwbGF5IGxpc3QgdHJhY2tp
bmcpLgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RHJhd0dseXBocz4oaXRlbS5nZXQ8RHJhd0dseXBocz4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZT4oaXRlbS5nZXQ8
RHJhd0ltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaXRlbS5nZXQ8RHJhd1RpbGVkSW1hZ2U+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVy
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpdGVtLmdldDxEcmF3TmF0aXZlSW1hZ2U+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdQYXR0ZXJuPihpdGVtLmdldDxEcmF3UGF0dGVybj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdS
ZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxEcmF3TGluZT4oaXRlbS5nZXQ8RHJhd0xpbmU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4
dD4oaXRlbS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyPihpdGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxE
cmF3RWxsaXBzZT4oaXRlbS5nZXQ8RHJhd0VsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQYXRoPihpdGVtLmdldDxEcmF3
UGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQ
YXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtLmdldDxEcmF3Rm9jdXNSaW5n
UmVjdHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICByZXR1cm4g
YXBwZW5kPEZpbGxSZWN0PihpdGVtLmdldDxGaWxsUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxS
b3VuZGVkUmVjdD4oaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkp
OworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxJbmxpbmVQYXRoPihpdGVtLmdl
dDxGaWxsSW5saW5lUGF0aD4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0
aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUGF0aD4oaXRlbS5nZXQ8RmlsbFBhdGg+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5k
PEZpbGxFbGxpcHNlPihpdGVtLmdldDxGaWxsRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICByZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRl
bS5nZXQ8UHV0SW1hZ2VEYXRhPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtLmdl
dDxQYWludEZyYW1lRm9yTWVkaWE+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUmVjdD4oaXRlbS5nZXQ8U3Ryb2tlUmVjdD4o
KSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihp
dGVtLmdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8
U3Ryb2tlUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTdHJva2VFbGxpcHNlPihpdGVtLmdldDxTdHJva2VFbGxpcHNlPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Q2xlYXJSZWN0PihpdGVtLmdldDxDbGVhclJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcj4oaXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsK
KyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbS5nZXQ8QXBwbHlTdHJv
a2VQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5RmlsbFBh
dHRlcm4+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVt
LmdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpKTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxh
eUxpc3Q6Oml0ZXJhdG9yOjphdEVuZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZGlzcGxheUxpc3Qu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1f
ZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBhdXRvIGVuZEN1cnNvciA9IGl0ZW1zLm1fd3JpdGFi
bGVCdWZmZXIuZGF0YSArIGl0ZW1zLm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJu
IG1fY3Vyc29yID09IGVuZEN1cnNvcjsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6
OnVwZGF0ZUN1cnJlbnRJdGVtKCkKK3sKKyAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisKKyAgICBp
ZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgaXRlbXMgPSAqbV9kaXNw
bGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gaXRlbVR5cGUgPSBzdGF0aWNfY2FzdDxJdGVtVHlw
ZT4obV9jdXJzb3JbMF0pOworICAgIGlmIChpc0RyYXdpbmdJdGVtKGl0ZW1UeXBlKSAmJiAhbV9k
aXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9j
dXJyZW50RXh0ZW50ID0gbV9kaXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50c1ttX2RyYXdp
bmdJdGVtSW5kZXhdOworICAgICAgICBtX2RyYXdpbmdJdGVtSW5kZXgrKzsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gV1RGOjpudWxsb3B0OworCisgICAgYXV0byogY2xp
ZW50ID0gaXRlbXMubV9yZWFkaW5nQ2xpZW50OworICAgIGlmICghaXNJbmxpbmVJdGVtKGl0ZW1U
eXBlKSAmJiBjbGllbnQpIHsKKyAgICAgICAgYXV0byBzaXplT2ZUeXBlQW5kSXRlbSA9IHNpemVP
Zkl0ZW1JbkJ5dGVzKGl0ZW1UeXBlKSArIHNpemVvZihJdGVtVHlwZSk7CisgICAgICAgIG1fY3Vy
cmVudEJ1ZmZlckZvckRlY29kZWRJdGVtID0gc2l6ZU9mVHlwZUFuZEl0ZW0gPD0gc2l6ZU9mRml4
ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgPyBtX2ZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zIDog
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhzaXplT2ZUeXBlQW5kSXRlbSkp
OworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbVswXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKKworICAgICAgICBhdXRvIHNpemVPZkRhdGEgPSByZWludGVy
cHJldF9jYXN0PHNpemVfdCo+KG1fY3Vyc29yICsgc2l6ZW9mKEl0ZW1UeXBlKSlbMF07CisgICAg
ICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gbV9jdXJzb3IgKyBzaXplb2YoSXRlbVR5cGUpICsg
c2l6ZW9mKHNpemVfdCk7CisgICAgICAgIHNpemVfdCBwYWRkaW5nID0gKGFsaWdub2YodWludDY0
X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0T2ZQYWRkaW5nKSAlIGFsaWdu
b2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0X3QpOworICAgICAgICBhdXRvIGRlY29kZWRJ
dGVtSGFuZGxlID0gY2xpZW50LT5kZWNvZGVJdGVtKHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZywg
c2l6ZU9mRGF0YSwgaXRlbVR5cGUsIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKTsKKyAg
ICAgICAgaWYgKCFkZWNvZGVkSXRlbUhhbmRsZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElu
c3RlYWQgb2YgY3Jhc2hpbmcsIHRoaXMgbmVlZHMgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBpbmZv
cm0gdGhlIGNhbGxlci4KKyAgICAgICAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgdGhpcyBh
c3NlcnRpb24gbWFrZXMgYnVncyBpbiBpdGVtIGJ1ZmZlciBlbmNvZGluZyBsb2dpYyBlYXNpZXIK
KyAgICAgICAgICAgIC8vIHRvIGNhdGNoIGJ5IGF2b2lkaW5nIG15c3RlcmlvdXMgb3V0LW9mLWJv
dW5kcyByZWFkcyBhbmQgaW5jb3JyZWN0bHkgYWxpZ25lZCBpdGVtcworICAgICAgICAgICAgLy8g
ZG93biB0aGUgbGluZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICAgICAgbV9jdXJyZW50SXRlbSA9ICpkZWNvZGVkSXRlbUhhbmRsZTsK
KyAgICAgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IHNpemVvZihJdGVtVHlwZSkgKyBz
aXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBzaXplT2ZEYXRhOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fY3VycmVudEl0ZW0gPSBJdGVtSGFuZGxlIHsgbV9jdXJzb3IgfTsKKyAgICAgICAgbV9j
dXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IG1fY3VycmVudEl0ZW0uc2l6ZSgpOworICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2UoKQoreworICAgIGlmIChhdEVu
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnNvciArPSBtX2N1cnJlbnRJdGVtU2l6
ZUluQnVmZmVyOworCisgICAgaWYgKG1fY3Vyc29yID09IG1fY3VycmVudEVuZE9mQnVmZmVyICYm
IG1fcmVhZE9ubHlCdWZmZXJJbmRleCA8IG1fZGlzcGxheUxpc3QubV9pdGVtcy0+bV9yZWFkT25s
eUJ1ZmZlcnMuc2l6ZSgpKSB7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCsrOworICAg
ICAgICBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgIH0KKworICAgIHVw
ZGF0ZUN1cnJlbnRJdGVtKCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVh
ckN1cnJlbnRJdGVtKCkKK3sKKyAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKwor
ICAgIGlmIChhdXRvIGl0ZW0gPSBzdGQ6OmV4Y2hhbmdlKG1fY3VycmVudEl0ZW0sIHsgfSkpCisg
ICAgICAgIGl0ZW0uZGVzdHJveSgpOworCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZl
ckZvckRlY29kZWRJdGVtICE9IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMpKSB7CisgICAg
ICAgIGZhc3RGcmVlKG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKTsKKyAgICAgICAgbV9j
dXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBE
aXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1vdmVUb0VuZCgpCit7CisgICAgaWYgKGF1dG8mIGl0ZW1z
ID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zKSB7CisgICAgICAgIG1fY3Vyc29yID0gaXRlbXMtPm1f
d3JpdGFibGVCdWZmZXIuZGF0YSArIGl0ZW1zLT5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAg
ICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yOworICAgICAgICBtX3JlYWRPbmx5
QnVmZmVySW5kZXggPSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIH0KK30K
Kwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50
QnVmZmVyKCkKK3sKKyAgICBhdXRvJiBpdGVtcyA9IG1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAg
ICBpZiAoIWl0ZW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG51bWJlck9mUmVhZE9u
bHlCdWZmZXJzID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKTsKKyAgICBpZiAobV9y
ZWFkT25seUJ1ZmZlckluZGV4IDwgbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMpIHsKKyAgICAgICAg
YXV0byYgbmV4dEJ1ZmZlckhhbmRsZSA9IGl0ZW1zLT5tX3JlYWRPbmx5QnVmZmVyc1ttX3JlYWRP
bmx5QnVmZmVySW5kZXhdOworICAgICAgICBtX2N1cnNvciA9IG5leHRCdWZmZXJIYW5kbGUuZGF0
YTsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvciArIG5leHRCdWZmZXJI
YW5kbGUuY2FwYWNpdHk7CisgICAgfSBlbHNlIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXggPT0g
bnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMpIHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93
cml0YWJsZUJ1ZmZlci5kYXRhOworICAgICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vy
c29yICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgfQorfQorCisKIH0gLy8g
bmFtZXNwYWNlIERpc3BsYXlMaXN0CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCmluZGV4IGQ2YmUyNzRjNjhkZWVmYjRjMGQ1MzYxYmU2NDgxNTI0MDMy
YzlmNDEuLjg4MThkNWI1ZDJmYjI2YWRhNzc1ZTk5MGQwNGQ5OTFmN2ExZWVhNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCkBAIC0yNSwxMCArMjUsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTM5LDEwMSArNDIsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWVudW0gY2xhc3MgSXRl
bVR5cGUgOiB1aW50OF90IHsKLSAgICBTYXZlLAotICAgIFJlc3RvcmUsCi0gICAgVHJhbnNsYXRl
LAotICAgIFJvdGF0ZSwKLSAgICBTY2FsZSwKLSAgICBDb25jYXRlbmF0ZUNUTSwKLSAgICBTZXRD
VE0sCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50LAotICAgIFNldElubGluZUZpbGxDb2xvciwK
LSAgICBTZXRJbmxpbmVTdHJva2VDb2xvciwKLSAgICBTZXRTdHJva2VUaGlja25lc3MsCi0gICAg
U2V0U3RhdGUsCi0gICAgU2V0TGluZUNhcCwKLSAgICBTZXRMaW5lRGFzaCwKLSAgICBTZXRMaW5l
Sm9pbiwKLSAgICBTZXRNaXRlckxpbWl0LAotICAgIENsZWFyU2hhZG93LAotICAgIENsaXAsCi0g
ICAgQ2xpcE91dCwKLSAgICBDbGlwT3V0VG9QYXRoLAotICAgIENsaXBQYXRoLAotICAgIENsaXBU
b0RyYXdpbmdDb21tYW5kcywKLSAgICBEcmF3R2x5cGhzLAotICAgIERyYXdJbWFnZSwKLSAgICBE
cmF3VGlsZWRJbWFnZSwKLSAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZSwKLSAgICBEcmF3SW1hZ2VC
dWZmZXIsCi0gICAgRHJhd05hdGl2ZUltYWdlLAotICAgIERyYXdQYXR0ZXJuLAotICAgIERyYXdS
ZWN0LAotICAgIERyYXdMaW5lLAotICAgIERyYXdMaW5lc0ZvclRleHQsCi0gICAgRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlciwKLSAgICBEcmF3RWxsaXBzZSwKLSAgICBEcmF3UGF0aCwKLSAgICBE
cmF3Rm9jdXNSaW5nUGF0aCwKLSAgICBEcmF3Rm9jdXNSaW5nUmVjdHMsCi0gICAgRmlsbFJlY3Qs
Ci0gICAgRmlsbFJlY3RXaXRoQ29sb3IsCi0gICAgRmlsbFJlY3RXaXRoR3JhZGllbnQsCi0gICAg
RmlsbENvbXBvc2l0ZWRSZWN0LAotICAgIEZpbGxSb3VuZGVkUmVjdCwKLSAgICBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSwKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBGaWxsSW5s
aW5lUGF0aCwKLSNlbmRpZgotICAgIEZpbGxQYXRoLAotICAgIEZpbGxFbGxpcHNlLAotICAgIFB1
dEltYWdlRGF0YSwKLSAgICBQYWludEZyYW1lRm9yTWVkaWEsCi0gICAgU3Ryb2tlUmVjdCwKLSNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBTdHJva2VJbmxpbmVQYXRoLAotI2VuZGlm
Ci0gICAgU3Ryb2tlUGF0aCwKLSAgICBTdHJva2VFbGxpcHNlLAotICAgIENsZWFyUmVjdCwKLSAg
ICBCZWdpblRyYW5zcGFyZW5jeUxheWVyLAotICAgIEVuZFRyYW5zcGFyZW5jeUxheWVyLAotI2lm
IFVTRShDRykKLSAgICBBcHBseVN0cm9rZVBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJl
IGEgcmVjb3JkZWQgaXRlbS4KLSAgICBBcHBseUZpbGxQYXR0ZXJuLCAvLyBGSVhNRTogc2hvdWxk
IG5vdCBiZSBhIHJlY29yZGVkIGl0ZW0uCi0jZW5kaWYKLSAgICBBcHBseURldmljZVNjYWxlRmFj
dG9yLAotfTsKLQotY2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKLXB1Ymxp
YzoKLSAgICBJdGVtKCkgPSBkZWxldGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBJdGVtKEl0ZW1U
eXBlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JdGVtKCk7Ci0KLSAgICBJdGVtVHlw
ZSB0eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKLQotICAg
IHZpcnR1YWwgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
I2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBk
ZXNjcmlwdGlvbigpIGNvbnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRl
cyhjb25zdCBJdGVtJik7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxJdGVtPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBJdGVt
VHlwZSBtX3R5cGU7Ci19OwotCiBlbnVtIEFzVGV4dEZsYWcgewogICAgIE5vbmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAwLAogICAgIEluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAg
ICAgPSAxIDw8IDAsCkBAIC0xNDYsODYgKzU0LDEwOSBAQCBjbGFzcyBEaXNwbGF5TGlzdCB7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlY29yZGVyOwogICAgIGZyaWVuZCBjbGFzcyBSZXBsYXllcjsKIHB1
YmxpYzoKLSAgICBEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKLSAgICBEaXNwbGF5TGlzdChEaXNw
bGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBEaXNwbGF5TGlzdChJdGVtQnVmZmVySGFuZGxlcyYmKTsKIAotICAgIERpc3Bs
YXlMaXN0JiBvcGVyYXRvcj0oRGlzcGxheUxpc3QmJikgPSBkZWZhdWx0OworICAgIFdFQkNPUkVf
RVhQT1JUIH5EaXNwbGF5TGlzdCgpOwogCi0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0JiBvcGVyYXRvcj0oRGlzcGxh
eUxpc3QmJik7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdDsgfQotICAgIEl0ZW0mIGl0ZW1BdChzaXplX3QgaW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaW5kZXggPCBtX2xpc3Quc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
bGlzdFtpbmRleF0uZ2V0KCk7Ci0gICAgfQorICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0m
KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3Qg
c2l6ZUluQnl0ZXMoKSBjb25zdDsKIAotICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2xpc3Quc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0g
ICAgCiAgICAgU3RyaW5nIGFzVGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQq
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZl
cldyaXRpbmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxF
RAogICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYpOwotCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNv
bnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9p
ZCBhcHBlbmQoSXRlbUhhbmRsZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CisKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIGNsYXNzIEltbWVk
aWF0ZWx5TW92ZVRvRW5kIHsgTm8sIFllcyB9OworICAgICAgICBpdGVyYXRvcihjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIEltbWVkaWF0ZWx5TW92ZVRvRW5kIGltbWVkaWF0ZWx5TW92
ZVRvRW5kID0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6Ok5vKQorICAgICAgICAgICAgOiBtX2Rpc3Bs
YXlMaXN0KGRpc3BsYXlMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW1tZWRpYXRl
bHlNb3ZlVG9FbmQgPT0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcykKKyAgICAgICAgICAgICAg
ICBtb3ZlVG9FbmQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmVD
dXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ3Vy
cmVudEl0ZW0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5pdGVyYXRv
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0
dXJuICZtX2Rpc3BsYXlMaXN0ID09ICZvdGhlci5tX2Rpc3BsYXlMaXN0ICYmIG1fY3Vyc29yID09
IG90aGVyLm1fY3Vyc29yOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIHZvaWQgb3Bl
cmF0b3IrKygpIHsgYWR2YW5jZSgpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxJdGVtSGFuZGxlLCBP
cHRpb25hbDxGbG9hdFJlY3Q+PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiB7IG1fY3VycmVu
dEl0ZW0sIG1fY3VycmVudEV4dGVudCB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA9IDI1
NjsKKworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJy
ZW50QnVmZmVyKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvRW5kKCk7Cisg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYWR2YW5jZSgpOworICAgICAgICBib29sIGF0RW5kKCkgY29uc3Q7CisKKyAg
ICAgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgICAgIHVpbnQ4X3Qq
IG1fY3Vyc29yIHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgbV9yZWFkT25seUJ1ZmZlcklu
ZGV4IHsgMCB9OworICAgICAgICBzaXplX3QgbV9kcmF3aW5nSXRlbUluZGV4IHsgMCB9OworICAg
ICAgICB1aW50OF90KiBtX2N1cnJlbnRFbmRPZkJ1ZmZlciB7IG51bGxwdHIgfTsKKworICAgICAg
ICB1aW50OF90IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXNbc2l6ZU9mRml4ZWRCdWZmZXJG
b3JEZWNvZGVkSXRlbXNdIHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRCdWZmZXJG
b3JEZWNvZGVkSXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgSXRlbUhhbmRsZSBtX2N1cnJlbnRJ
dGVtOworICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fY3VycmVudEV4dGVudDsKKyAgICAg
ICAgc2l6ZV90IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgeyAwIH07CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkltbWVkaWF0ZWx5TW92
ZVRvRW5kOjpZZXMgfTsgfQogCiBwcml2YXRlOgotICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4m
JiBpdGVtKQotICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAg
ICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAgfQorICAgIEl0ZW1CdWZmZXIq
IGl0ZW1CdWZmZXJJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuZ2V0KCk7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVyKCk7CiAKLSAgICAvLyBMZXNz
IGVmZmljaWVudCBhcHBlbmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tpbmcgcmVwbGF5LgotICAgIHZv
aWQgYXBwZW5kSXRlbShJdGVtJiBpdGVtKQorICAgIHZvaWQgYWRkRHJhd2luZ0l0ZW1FeHRlbnQo
T3B0aW9uYWw8RmxvYXRSZWN0PiYmIGV4dGVudCkKICAgICB7Ci0gICAgICAgIG1fbGlzdC5hcHBl
bmQoaXRlbSk7CisgICAgICAgIEFTU0VSVChtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk7Cisg
ICAgICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZNb3ZlKGV4dGVudCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgY29u
c3QgSXRlbSYpOwotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSB7IHJldHVybiBtX2xp
c3Q7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MsIEl0
ZW1IYW5kbGUpOwogCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJdGVtQnVmZmVyPiBtX2l0ZW1zOworICAgIFZlY3RvcjxPcHRpb25hbDxGbG9hdFJl
Y3Q+PiBtX2RyYXdpbmdJdGVtRXh0ZW50czsKKyAgICBib29sIG1fdHJhY2tzRHJhd2luZ0l0ZW1F
eHRlbnRzIHsgdHJ1ZSB9OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBE
aXNwbGF5TGlzdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBjbGFzcy4uLiBBcmdzPgordm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3MmJi4u
LiBhcmdzKQogewotICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fbGlzdC5z
aXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9saXN0KQotICAgICAgICBlbmNvZGVy
IDw8IGl0ZW0uZ2V0KCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxE
aXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPHVpbnQ2NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBpdGVtQ291bnQ7
Ci0gICAgaWYgKCFpdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkg
PCAqaXRlbUNvdW50OyBpKyspIHsKLSAgICAgICAgYXV0byBpdGVtID0gSXRlbTo6ZGVjb2RlKGRl
Y29kZXIpOwotICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gZGVjb2RlIGFsbCB0eXBlcywg
ZmFpbGluZyB0byBkZWNvZGUgYW4gaXRlbSBzaG91bGQgdHVybiBpbnRvIGEgZGVjb2RlIGZhaWx1
cmUuCi0gICAgICAgIC8vIEZvciBub3csIHdlIGp1c3QgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAg
ICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXNwbGF5TGlz
dC5hcHBlbmQoV1RGTW92ZSgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5TGlz
dDsKKyAgICBpdGVtQnVmZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CiB9CiAKIH0gLy8gRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBmN2Nh
NmJiZmZkOThmYTBkZjY4YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4wODFjZWM3OWUzYzlhZTJhMjgw
NGMwMTUxZWVhZjNjNWIyOWI5Njc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3Jl
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zMzMsNyAr
MzMzLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5k
ZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1cGRhdGVTdHJva2VDb2xvcihD
R0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0
ZUdldFN0eWxlKGdzdGF0ZSkpOwogCi0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KERyYXdHbHlwaHM6OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFk
dmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oKm1fb3Jp
Z2luYWxGb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25z
LCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0
cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CiAKICAgICBtX293
bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKIAogICAgIGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAg
IG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFn
ZSwgcmVjdCwge3sgfSwgaW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2lu
VG9wTGVmdCB9KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgRmxvYXRS
ZWN0KHJlY3QpLCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdP
cHRpb25zIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKIAogICAgIC8vIFVu
ZG8gdGhlIGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgogICAgIG1fb3duZXIu
c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJI
YXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggMjNhYzMy
NGI3YjAwYTllMTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNi
YmNhOWE4NTg0ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1
enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtNDMsNyArNDMs
NyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3du
ZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApp
bmRleCBkNDYxN2QzNTE2ZjRmM2U1MWQ3NWQ2NDQzNGE2YTM5NDU3YTAwMDFmLi5mOWIzMjNjNzQy
NjZlZDFmNjFkNDRiMDQ3MmVmNTUxODUzZThjN2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC01NSw3ICs1NSw3IEBAIFJlY29yZGVy
JiBEcmF3aW5nQ29udGV4dDo6cmVjb3JkZXIoKQogCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewotICAgIGlmICgh
bV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0
LCBtX2Rpc3BsYXlMaXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdjYzAu
Ljk2ZTRiMWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBAQCBw
dWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdFQkNP
UkVfRVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VEaXNw
bGF5TGlzdCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNwbGF5
TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxp
c3QsIHsgfSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rp
c3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXll
ZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgp
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAppbmRleCAzMjU5
OWUwNjJkN2NmNTlkMWRjMmVhZDAxZTc2MGQ2NmUzZjdlYzNjLi5mZmQ5NGI1MjljMDZhN2UyY2Rl
MDBlYzk0YjM1NWM4NWRkYWZiNGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdDb250
ZXh0LmRpc3BsYXlMaXN0KCkuaXRlbUNvdW50KCkpCisgICAgICAgIGlmICghbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQucmVwbGF5RGlzcGxheUxpc3QoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJjY2RjOWM0ZGNhOTUzYTVhYTVhNzVmNGU0MmZhMTk2MWNlZThlOGEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDYwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
aCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3Qgewor
Cit2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAg
Z2V0PFNhdmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAgICBnZXQ8UmVzdG9yZT4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6IHsKKyAgICAgICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAg
Z2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06IHsKKyAgICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogewor
ICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAg
ICBnZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogewor
ICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlj
a25lc3M6IHsKKyAgICAgICAgZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTog
eworICAgICAgICBnZXQ8U2V0U3RhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBnZXQ8
U2V0TGluZUNhcD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8U2V0TGluZURhc2g+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6IHsKKyAgICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6
IHsKKyAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHsKKyAgICAgICAgZ2V0PENs
aXA+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDogeworICAgICAgICBnZXQ8Q2xpcE91dD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoOiB7CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAg
ICAgIGdldDxDbGlwUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsKKyAgICAgICAg
Z2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIGdl
dDxEcmF3R2x5cGhzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogeworICAgICAgICBnZXQ8RHJhd0ltYWdlPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOiB7CisgICAgICAgIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7
CisgICAgICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogeworICAgICAgICBnZXQ8RHJh
d0xpbmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAgICBnZXQ8RHJhd0xpbmVzRm9y
VGV4dD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIGdldDxEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAgIGdldDxE
cmF3RWxsaXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBnZXQ8RHJhd1BhdGg+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUmVjdD4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDogewor
ICAgICAgICBnZXQ8RmlsbElubGluZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAg
ICAgICBnZXQ8RmlsbFBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAgICAgICAgZ2V0PEZpbGxF
bGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlBhaW50RnJhbWVGb3JNZWRpYTogeworICAgICAgICBnZXQ8UGFpbnRGcmFtZUZvck1lZGlh
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVJlY3Q+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBnZXQ8
U3Ryb2tlSW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0
PFN0cm9rZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogeworICAgICAgICBnZXQ8U3Ryb2tlRWxs
aXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHsKKyAgICAgICAgZ2V0PENsZWFyUmVjdD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdldDxFbmRUcmFuc3BhcmVu
Y3lMYXllcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBV
U0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOiB7CisgICAgICAg
IGdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogeworICAgICAg
ICBnZXQ8QXBwbHlGaWxsUGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6IHsKKyAgICAgICAgZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgfQorfQorCit2b2lkIEl0ZW1IYW5kbGU6
OmRlc3Ryb3koKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dFRvUGF0aDogeworICAgICAgICBnZXQ8Q2xpcE91dFRvUGF0aD4oKS5+Q2xpcE91dFRv
UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQ
YXRoOiB7CisgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsK
KyAgICAgICAgZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKS5+Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9j
dXNSaW5nUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigp
Ln5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIGdldDxEcmF3R2x5cGhzPigpLn5EcmF3
R2x5cGhzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkufkRyYXdJbWFnZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjogewor
ICAgICAgICBnZXQ8RHJhd0ltYWdlQnVmZmVyPigpLn5EcmF3SW1hZ2VCdWZmZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7
CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLn5EcmF3TGluZXNGb3JUZXh0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdl
OiB7CisgICAgICAgIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCkufkRyYXdOYXRpdmVJbWFnZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7Cisg
ICAgICAgIGdldDxEcmF3UGF0aD4oKS5+RHJhd1BhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8RHJhd1Bh
dHRlcm4+KCkufkRyYXdQYXR0ZXJuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdl
PigpLn5EcmF3VGlsZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4oKS5+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHsKKyAgICAgICAg
Z2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsKKyAgICAgICAg
Z2V0PEZpbGxQYXRoPigpLn5GaWxsUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVj
dFdpdGhDb2xvcj4oKS5+RmlsbFJlY3RXaXRoQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBn
ZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkufkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLn5GaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0Pigp
Ln5GaWxsUm91bmRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpQdXRJbWFnZURhdGE6IHsKKyAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5+UHV0
SW1hZ2VEYXRhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6IHsKKyAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLn5TZXRMaW5lRGFzaCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7
CisgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIGdldDxTdHJv
a2VQYXRoPigpLn5TdHJva2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBseURldmljZVNjYWxlRmFjdG9y
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEFwcGx5RmlsbFBhdHRlcm4+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPEFwcGx5U3Ryb2tlUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QmVnaW5U
cmFuc3BhcmVuY3lMYXllcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
Q2xpcD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPENsaXBPdXQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdFbGxpcHNl
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPERyYXdMaW5lPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEVuZFRyYW5z
cGFyZW5jeUxheWVyPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxJbmxpbmVQYXRoPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbFJlY3Q+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVGb3JNZWRpYT46OnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3RvcmU+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJvdGF0
ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFNhdmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U2NhbGU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldENUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmls
bENvbG9yPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lQ2FwPjo6dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2lu
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNldExpbmVKb2luPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
U3Ryb2tlVGhpY2tuZXNzPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlRWxsaXBzZT46OnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUlubGluZVBhdGg+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VS
ZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFN0cm9rZVJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgSXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKHR5
cGUoKSk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJiBo
YW5kbGVzKQorICAgIDogbV9yZWFkT25seUJ1ZmZlcnMoV1RGTW92ZShoYW5kbGVzKSkKK3sKK30K
KworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcigpID0gZGVmYXVsdDsKKworSXRlbUJ1ZmZlcjo6fkl0
ZW1CdWZmZXIoKQoreworICAgIGNsZWFyKCk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIo
SXRlbUJ1ZmZlciYmIG90aGVyKQorICAgIDogbV9yZWFkaW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fd3JpdGluZ0NsaWVudChz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX25v
bklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fYWxsb2NhdGVkQnVm
ZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAs
IG1fcmVhZE9ubHlCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMs
IHsgfSkpCisgICAgLCBtX3dyaXRhYmxlQnVmZmVyKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
YWJsZUJ1ZmZlciwgeyB9KSkKKyAgICAsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMoc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKSkKK3sKK30KKworSXRlbUJ1ZmZl
ciYgSXRlbUJ1ZmZlcjo6b3BlcmF0b3I9KEl0ZW1CdWZmZXImJiBvdGhlcikKK3sKKyAgICBtX3Jl
YWRpbmdDbGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0
cik7CisgICAgbV93cml0aW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdD
bGllbnQsIG51bGxwdHIpOworICAgIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMs
IHsgfSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2Fs
bG9jYXRlZEJ1ZmZlcnMsIHsgfSk7CisgICAgbV9yZWFkT25seUJ1ZmZlcnMgPSBzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pOworICAgIG1fd3JpdGFibGVCdWZmZXIg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZC
eXRlcywgMCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJdGVtQnVmZmVySGFuZGxlIEl0ZW1C
dWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIGlmIChtX3dy
aXRpbmdDbGllbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gbV93cml0aW5nQ2xpZW50
LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgfQorCisgICAgY29uc3RleHByIHNpemVfdCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5
ID0gMSA8PCAxMDsKKworICAgIGF1dG8gbmV3QnVmZmVyQ2FwYWNpdHkgPSBzdGQ6Om1heChjYXBh
Y2l0eSwgZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSk7CisgICAgYXV0byogYnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhuZXdCdWZmZXJDYXBhY2l0eSkpOwor
ICAgIG1fYWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKKyAgICByZXR1cm4geyBJdGVt
QnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSwgYnVmZmVyLCBuZXdCdWZmZXJDYXBhY2l0eSB9
OworfQorCit2b2lkIEl0ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgaGFuZGxlIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgIG1hcEZ1bmN0aW9u
KGhhbmRsZSk7CisKKyAgICBpZiAobV93cml0YWJsZUJ1ZmZlciAmJiBtX3dyaXR0ZW5OdW1iZXJP
ZkJ5dGVzKQorICAgICAgICBtYXBGdW5jdGlvbih7IG1fd3JpdGFibGVCdWZmZXIuaWRlbnRpZmll
ciwgbV93cml0YWJsZUJ1ZmZlci5kYXRhLCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIH0pOworfQor
Cit2b2lkIEl0ZW1CdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHN0ZDo6
ZXhjaGFuZ2UobV9ub25JbmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAg
ICAgaXRlbS5kZXN0cm95KCk7CisKKyAgICBmb3IgKGF1dG8qIGJ1ZmZlciA6IHN0ZDo6ZXhjaGFu
Z2UobV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBmYXN0RnJlZShidWZmZXIpOwor
CisgICAgbV9yZWFkT25seUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0g
eyB9OworICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxMWIzOTc2M2EzZjhjMGZhZThhMDM0
NTM4NjM4YTFlOGUyMmNiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAgLTAs
MCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CisKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2VudW0gSXRlbUJ1ZmZl
cklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEl0ZW1CdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxJdGVtQnVmZmVySWRlbnRpZmllclR5cGU+OworCisvLyBBbiBJdGVtQnVmZmVy
SGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyIHRoYXQgY29udGFpbnMgZGlz
cGxheSBsaXN0IGl0ZW0gZGF0YS4KK3N0cnVjdCBJdGVtQnVmZmVySGFuZGxlIHsKKyAgICBJdGVt
QnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyOworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRy
IH07CisgICAgc2l6ZV90IGNhcGFjaXR5IHsgMCB9OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhKCp0aGlzKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWRhdGE7IH0KK307CisKK3VzaW5nIEl0ZW1CdWZmZXJIYW5kbGVzID0gVmVjdG9yPEl0
ZW1CdWZmZXJIYW5kbGUsIDI+OworCisvLyBBbiBJdGVtSGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0
byBhbiBJdGVtVHlwZSwgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYW4gaXRlbSBvZiB0aGF0IHR5
cGUuCitzdHJ1Y3QgSXRlbUhhbmRsZSB7CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsK
KworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkZXN0cm95KCk7
CisgICAgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3Q7CisKKyAgICBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFkYXRhOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhZGF0YTsgfQorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEl0ZW1UeXBlPihkYXRhWzBdKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKHR5cGUoKSk7IH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGlzKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFQ6Oml0ZW1UeXBlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCYgZ2V0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpczxUPigpKTsKKyAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFQqPigmZGF0YVtzaXplb2YoSXRlbVR5cGUpXSk7CisgICAgfQorfTsKKworY2xh
c3MgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50KCkgeyB9OworCisgICAgdmlydHVhbCBJdGVtQnVmZmVySGFuZGxl
IGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBlbmNvZGVJdGVtKEl0ZW1IYW5kbGUpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIEl0
ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVy
UmVhZGluZ0NsaWVudCgpIHsgfTsKKworICAgIHZpcnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRsZT4g
V0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgPSAwOworfTsK
KworLy8gQW4gSXRlbUJ1ZmZlciBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCBhbmQg
Y29uc2lzdHMgb2YgYSByZWFkd3JpdGUgSXRlbUJ1ZmZlckhhbmRsZSAodG8gd2hpY2ggZGlzcGxh
eQorLy8gbGlzdCBpdGVtcyBhcmUgYXBwZW5kZWQpIGFzIHdlbGwgYXMgYSBudW1iZXIgb2YgcmVh
ZG9ubHkgSXRlbUJ1ZmZlckhhbmRsZXMuIEl0ZW1zIGFyZSBhcHBlbmRlZCB0byB0aGUgcmVhZHdy
aXRlCisvLyBidWZmZXIgdW50aWwgYWxsIGF2YWlsYWJsZSBjYXBhY2l0eSBpcyBleGhhdXN0ZWQs
IGF0IHdoaWNoIHBvaW50IHdlIHdpbGwgbW92ZSB0aGlzIHdyaXRhYmxlIGhhbmRsZSB0byB0aGUg
bGlzdAorLy8gb2YgcmVhZG9ubHkgaGFuZGxlcy4KK2NsYXNzIEl0ZW1CdWZmZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEl0ZW1CdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGxheUxpc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBJdGVtQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkl0ZW1CdWZmZXIoKTsKKyAg
ICBJdGVtQnVmZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
SXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIm
IG9wZXJhdG9yPShJdGVtQnVmZmVyJiYpOworCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGF1dG8g
YnVmZmVyIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgICAgICByZXN1bHQgKz0gYnVmZmVy
LmNhcGFjaXR5OworICAgICAgICByZXN1bHQgKz0gbV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzICYmIG1fcmVhZE9ubHlCdWZmZXJzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KTsK
KworICAgIC8vIEl0ZW1CdWZmZXI6OmFwcGVuZDxUPiguLi4pIGFwcGVuZHMgYSBkaXNwbGF5IGxp
c3QgaXRlbSBvZiB0eXBlIFQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudAorICAgIC8vIHdyaXRh
YmxlIGJ1ZmZlciBoYW5kbGU7IGlmIHJlbWFpbmluZyBidWZmZXIgY2FwYWNpdHkgaXMgaW5zdWZm
aWNpZW50IHRvIHN0b3JlIHRoZSBpdGVtLCBhCisgICAgLy8gbmV3IGJ1ZmZlciB3aWxsIGJlIGFs
bG9jYXRlZCAoZWl0aGVyIGJ5IHRoZSBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCwgaWYgc2V0LCBv
ciBieSB0aGUgaXRlbQorICAgIC8vIGJ1ZmZlciBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gY2xpZW50
KS4gSXRlbXMgYXJlIHBsYWNlZCBiYWNrLXRvLWJhY2sgaW4gdGhlc2UgaXRlbSBidWZmZXJzLAor
ICAgIC8vIHdpdGggYW4gSXRlbVR5cGUgc2VwYXJhdGluZyBlYWNoIGl0ZW0uCisgICAgLy8KKyAg
ICAvLyBJZiBhIHdyaXRpbmcgY2xpZW50IGlzIHByZXNlbnQgYW5kIHJlcXVpcmVzIGN1c3RvbSBl
bmNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSBULCB0aGUKKyAgICAvLyBpdGVtIGJ1ZmZl
ciB3aWxsIGFzayB0aGUgY2xpZW50IGZvciBhbiBvcGFxdWUgU2hhcmVkQnVmZmVyIGNvbnRhaW5p
bmcgZW5jb2RlZCBkYXRhIGZvciB0aGUKKyAgICAvLyBpdGVtLiBUaGlzIGVuY29kZWQgZGF0YSBp
cyB0aGVuIGFwcGVuZGVkIHRvIHRoZSBpdGVtIGJ1ZmZlciwgd2l0aCBwYWRkaW5nIHRvIGVuc3Vy
ZSB0aGF0CisgICAgLy8gdGhlIHN0YXJ0IG9mIHRoaXMgZGF0YSBpcyBhbGlnbmVkIHRvIDggYnl0
ZXMsIGlmIG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1pbmcgZW5jb2RlZCBpdGVtCisgICAgLy8gZGF0
YSwgYSBjb3JyZXNwb25kaW5nIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHdpbGwgYmUgcmVxdWly
ZWQgdG8gY29udmVydCB0aGlzIGVuY29kZWQgZGF0YQorICAgIC8vIGJhY2sgaW50byBhbiBpdGVt
IG9mIHR5cGUgVC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lk
IGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSB8fCAhVDo6aXNJbmxpbmVJdGVt
KTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplb2YoSXRl
bVR5cGUpICsgc2l6ZW9mKFQpOworCisgICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVtICYmIG1f
d3JpdGluZ0NsaWVudCkgeworICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgaXRlbUJ1ZmZlcltz
aXplT2ZUeXBlQW5kSXRlbV07CisgICAgICAgICAgICBpdGVtQnVmZmVyWzBdID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgbmV3IChpdGVtQnVmZmVyICsg
c2l6ZW9mKEl0ZW1UeXBlKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAg
ICAgICAgaWYgKGF1dG8gc2hhcmVkQnVmZmVyID0gbV93cml0aW5nQ2xpZW50LT5lbmNvZGVJdGVt
KHsgaXRlbUJ1ZmZlciB9KSkgeworICAgICAgICAgICAgICAgIGF1dG8gbWF4QWRkaXRpb25hbENh
cGFjaXR5Rm9ySXRlbSA9IHNoYXJlZEJ1ZmZlci0+c2l6ZSgpICsgc2l6ZW9mKEl0ZW1UeXBlKSAr
IHNpemVvZihzaXplX3QpICsgYWxpZ25vZih1aW50NjRfdCk7CisgICAgICAgICAgICAgICAgaWYg
KG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBtYXhBZGRpdGlvbmFsQ2FwYWNpdHlGb3JJdGVtID4g
bV93cml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxh
c3RXcml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0YWJsZUJ1ZmZlciwgeyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgbGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5ID0gc3RkOjpl
eGNoYW5nZShtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGxhc3RXcml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGxhc3RXcml0YWJsZUJ1ZmZlcikpOwor
ICAgICAgICAgICAgICAgICAgICBtX3dyaXRhYmxlQnVmZmVyID0gY3JlYXRlSXRlbUJ1ZmZlciht
YXhBZGRpdGlvbmFsQ2FwYWNpdHlGb3JJdGVtKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10g
PSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgYXV0
byogc3RhcnRPZkRhdGFMZW5ndGggPSBtX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBtX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzICsgc2l6ZW9mKEl0ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHNpemVfdCo+KHN0YXJ0T2ZEYXRhTGVuZ3RoKVswXSA9IHNoYXJlZEJ1ZmZlci0+
c2l6ZSgpOworCisgICAgICAgICAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBzdGFydE9m
RGF0YUxlbmd0aCArIHNpemVvZihzaXplX3QpOworICAgICAgICAgICAgICAgIHNpemVfdCBwYWRk
aW5nID0gKGFsaWdub2YodWludDY0X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0
YXJ0T2ZQYWRkaW5nKSAlIGFsaWdub2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0X3QpOwor
ICAgICAgICAgICAgICAgIGF1dG8qIHN0YXJ0T2ZEYXRhID0gc3RhcnRPZkRhdGFMZW5ndGggKyBz
aXplb2Yoc2l6ZV90KSArIHBhZGRpbmc7CisgICAgICAgICAgICAgICAgbWVtY3B5KHN0YXJ0T2ZE
YXRhLCBzaGFyZWRCdWZmZXItPmRhdGFBc1VJbnQ4UHRyKCksIHNoYXJlZEJ1ZmZlci0+c2l6ZSgp
KTsKKworICAgICAgICAgICAgICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0
ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIHNoYXJlZEJ1ZmZlci0+c2l6ZSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBzaXplT2ZUeXBlQW5kSXRlbSA+IG1fd3Jp
dGFibGVCdWZmZXIuY2FwYWNpdHkpIHsKKyAgICAgICAgICAgIGF1dG8gbGFzdFdyaXRhYmxlQnVm
ZmVyID0gc3RkOjpleGNoYW5nZShtX3dyaXRhYmxlQnVmZmVyLCB7IH0pOworICAgICAgICAgICAg
bGFzdFdyaXRhYmxlQnVmZmVyLmNhcGFjaXR5ID0gc3RkOjpleGNoYW5nZShtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzLCAwKTsKKyAgICAgICAgICAgIGlmIChsYXN0V3JpdGFibGVCdWZmZXIuY2FwYWNp
dHkpCisgICAgICAgICAgICAgICAgbV9yZWFkT25seUJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUobGFz
dFdyaXRhYmxlQnVmZmVyKSk7CisgICAgICAgICAgICBtX3dyaXRhYmxlQnVmZmVyID0gY3JlYXRl
SXRlbUJ1ZmZlcihzaXplT2ZUeXBlQW5kSXRlbSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRv
KiBzdGFydE9mSXRlbSA9ICZtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZC
eXRlc107CisgICAgICAgIHN0YXJ0T2ZJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVDo6
aXRlbVR5cGUpOworICAgICAgICBuZXcgKHN0YXJ0T2ZJdGVtICsgc2l6ZW9mKEl0ZW1UeXBlKSkg
VChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBtX3dyaXR0ZW5OdW1iZXJP
ZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVtSW5CeXRlcyhUOjppdGVtVHlw
ZSk7CisKKyAgICAgICAgaWYgKCFUOjppc0lubGluZUl0ZW0pCisgICAgICAgICAgICBtX25vbklu
bGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzLmFwcGVuZCh7IHN0YXJ0T2ZJdGVtIH0pOworICAg
IH0KKworICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQp
IHsgbV93cml0aW5nQ2xpZW50ID0gY2xpZW50OyB9CisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1
ZmZlclJlYWRpbmdDbGllbnQqIGNsaWVudCkgeyBtX3JlYWRpbmdDbGllbnQgPSBjbGllbnQ7IH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBJdGVtQnVmZmVySGFuZGxlcyYgcmVhZE9ubHlCdWZmZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9yZWFkT25seUJ1ZmZlcnM7IH0KKyAgICB2b2lkIGZvckVhY2hJ
dGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmKSBjb25z
dDsKKworICAgIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KiBtX3JlYWRpbmdDbGllbnQgeyBudWxs
cHRyIH07CisgICAgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIG1fd3JpdGluZ0NsaWVudCB7IG51
bGxwdHIgfTsKKyAgICBWZWN0b3I8SXRlbUhhbmRsZT4gbV9ub25JbmxpbmVJdGVtc0luQWxsb2Nh
dGVkQnVmZmVyczsKKyAgICBWZWN0b3I8dWludDhfdCo+IG1fYWxsb2NhdGVkQnVmZmVyczsKKyAg
ICBJdGVtQnVmZmVySGFuZGxlcyBtX3JlYWRPbmx5QnVmZmVyczsKKyAgICBJdGVtQnVmZmVySGFu
ZGxlIG1fd3JpdGFibGVCdWZmZXI7CisgICAgc2l6ZV90IG1fd3JpdHRlbk51bWJlck9mQnl0ZXMg
eyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZlZTYxZjc0M2Q2MmYxMDg4MzZjNmVmMDAwNDE3OGU1MDFlYTQ4MTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAKQEAgLTAsMCArMSwzMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgorCisjaW5j
bHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworCitzaXplX3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKFNhdmUpOworICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoUmVzdG9yZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNs
YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFRyYW5zbGF0ZSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6Um90YXRlOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFJvdGF0ZSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBzaXplb2YoU2NhbGUpOworICAgIGNhc2UgSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICByZXR1cm4gc2l6ZW9mKENvbmNhdGVuYXRl
Q1RNKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAgIHJldHVybiBzaXplb2Yo
U2V0Q1RNKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAg
ICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5lRmlsbEdyYWRpZW50KTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0SW5saW5l
RmlsbENvbG9yKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihTZXRJbmxpbmVTdHJva2VDb2xvcik7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldFN0cm9r
ZVRoaWNrbmVzcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgIHJldHVy
biBzaXplb2YoU2V0U3RhdGUpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAg
ICAgIHJldHVybiBzaXplb2YoU2V0TGluZUNhcCk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6CisgICAgICAgIHJldHVybiBzaXplb2YoU2V0TGluZURhc2gpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICByZXR1cm4gc2l6ZW9mKFNldExpbmVKb2luKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gc2l6ZW9m
KFNldE1pdGVyTGltaXQpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKENsZWFyU2hhZG93KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgor
ICAgICAgICByZXR1cm4gc2l6ZW9mKENsaXApOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6
CisgICAgICAgIHJldHVybiBzaXplb2YoQ2xpcE91dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cE91dFRvUGF0aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwT3V0VG9QYXRoKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihDbGlwUGF0aCk7
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICByZXR1
cm4gc2l6ZW9mKENsaXBUb0RyYXdpbmdDb21tYW5kcyk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0dseXBoczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3R2x5cGhzKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0ltYWdlKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihE
cmF3VGlsZWRJbWFnZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6
CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd1RpbGVkU2NhbGVkSW1hZ2UpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3SW1h
Z2VCdWZmZXIpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAg
cmV0dXJuIHNpemVvZihEcmF3TmF0aXZlSW1hZ2UpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQ
YXR0ZXJuOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdQYXR0ZXJuKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3UmVjdCk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIHJldHVybiBzaXplb2YoRHJhd0xpbmUp
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgIHJldHVybiBz
aXplb2YoRHJhd0xpbmVzRm9yVGV4dCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgcmV0dXJu
IHNpemVvZihEcmF3RWxsaXBzZSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAg
ICAgIHJldHVybiBzaXplb2YoRHJhd1BhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKERyYXdGb2N1c1JpbmdQYXRoKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHJldHVybiBzaXpl
b2YoRHJhd0ZvY3VzUmluZ1JlY3RzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdCk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6CisgICAgICAgIHJldHVybiBzaXplb2YoRmlsbFJlY3RXaXRoQ29sb3IpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxSZWN0V2l0aEdyYWRpZW50KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29t
cG9zaXRlZFJlY3Q6CisgICAgICAgIHJldHVybiBzaXplb2YoRmlsbENvbXBvc2l0ZWRSZWN0KTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgIHJldHVybiBzaXpl
b2YoRmlsbFJvdW5kZWRSZWN0KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKKyAgICAgICAgcmV0dXJuIHNpemVvZihGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk7
CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElu
bGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoRmlsbElubGluZVBhdGgpOworI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoRmls
bFBhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4g
c2l6ZW9mKEZpbGxFbGxpcHNlKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoUHV0SW1hZ2VEYXRhKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIHJldHVybiBzaXplb2YoUGFpbnRGcmFtZUZvck1l
ZGlhKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICByZXR1cm4gc2l6
ZW9mKFN0cm9rZVJlY3QpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tl
SW5saW5lUGF0aCk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKFN0cm9rZVBhdGgpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUVsbGlwc2U6CisgICAgICAgIHJldHVybiBzaXplb2YoU3Ryb2tlRWxsaXBzZSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICByZXR1cm4gc2l6ZW9mKENsZWFyUmVjdCk7
CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0
dXJuIHNpemVvZihCZWdpblRyYW5zcGFyZW5jeUxheWVyKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpF
bmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihFbmRUcmFuc3BhcmVu
Y3lMYXllcik7CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0
dGVybjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihBcHBseVN0cm9rZVBhdHRlcm4pOworICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBzaXplb2YoQXBw
bHlGaWxsUGF0dGVybik7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNj
YWxlRmFjdG9yOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ip
OworICAgIH0KK30KKworYm9vbCBpc0RyYXdpbmdJdGVtKEl0ZW1UeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjoKKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgY2Fz
ZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRDVE06CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVKb2luOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
OgorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICBjYXNlIEl0ZW1UeXBl
OjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisjZW5kaWYK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAg
Y2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgIGNhc2UgSXRlbVR5cGU6OlB1
dEltYWdlRGF0YToKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6
CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworYm9vbCBp
c0lubGluZUl0ZW0oSXRlbVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRo
OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3SW1hZ2U6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d05hdGl2ZUltYWdlOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgY2FzZSBJ
dGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXA6CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAg
IGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2U0Zjg1NzlhYzg3N2JiODgzYjQ5NjMzMzI3ZmE3OGMyMzE3MWNjNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKKworZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgeworICAgIFNhdmUsCisg
ICAgUmVzdG9yZSwKKyAgICBUcmFuc2xhdGUsCisgICAgUm90YXRlLAorICAgIFNjYWxlLAorICAg
IENvbmNhdGVuYXRlQ1RNLAorICAgIFNldENUTSwKKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQs
CisgICAgU2V0SW5saW5lRmlsbENvbG9yLAorICAgIFNldElubGluZVN0cm9rZUNvbG9yLAorICAg
IFNldFN0cm9rZVRoaWNrbmVzcywKKyAgICBTZXRTdGF0ZSwKKyAgICBTZXRMaW5lQ2FwLAorICAg
IFNldExpbmVEYXNoLAorICAgIFNldExpbmVKb2luLAorICAgIFNldE1pdGVyTGltaXQsCisgICAg
Q2xlYXJTaGFkb3csCisgICAgQ2xpcCwKKyAgICBDbGlwT3V0LAorICAgIENsaXBPdXRUb1BhdGgs
CisgICAgQ2xpcFBhdGgsCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzLAorICAgIERyYXdHbHlw
aHMsCisgICAgRHJhd0ltYWdlLAorICAgIERyYXdUaWxlZEltYWdlLAorICAgIERyYXdUaWxlZFNj
YWxlZEltYWdlLAorICAgIERyYXdJbWFnZUJ1ZmZlciwKKyAgICBEcmF3TmF0aXZlSW1hZ2UsCisg
ICAgRHJhd1BhdHRlcm4sCisgICAgRHJhd1JlY3QsCisgICAgRHJhd0xpbmUsCisgICAgRHJhd0xp
bmVzRm9yVGV4dCwKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyLAorICAgIERyYXdFbGxp
cHNlLAorICAgIERyYXdQYXRoLAorICAgIERyYXdGb2N1c1JpbmdQYXRoLAorICAgIERyYXdGb2N1
c1JpbmdSZWN0cywKKyAgICBGaWxsUmVjdCwKKyAgICBGaWxsUmVjdFdpdGhDb2xvciwKKyAgICBG
aWxsUmVjdFdpdGhHcmFkaWVudCwKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCisgICAgRmlsbFJv
dW5kZWRSZWN0LAorICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQorICAgIEZpbGxJbmxpbmVQYXRoLAorI2VuZGlmCisgICAgRmlsbFBhdGgs
CisgICAgRmlsbEVsbGlwc2UsCisgICAgUHV0SW1hZ2VEYXRhLAorICAgIFBhaW50RnJhbWVGb3JN
ZWRpYSwKKyAgICBTdHJva2VSZWN0LAorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAg
IFN0cm9rZUlubGluZVBhdGgsCisjZW5kaWYKKyAgICBTdHJva2VQYXRoLAorICAgIFN0cm9rZUVs
bGlwc2UsCisgICAgQ2xlYXJSZWN0LAorICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIsCisgICAg
RW5kVHJhbnNwYXJlbmN5TGF5ZXIsCisjaWYgVVNFKENHKQorICAgIEFwcGx5U3Ryb2tlUGF0dGVy
biwgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgYSByZWNvcmRlZCBpdGVtLgorICAgIEFwcGx5Rmls
bFBhdHRlcm4sIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIGEgcmVjb3JkZWQgaXRlbS4KKyNlbmRp
ZgorICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IsCit9OworCitXRUJDT1JFX0VYUE9SVCBzaXpl
X3Qgc2l6ZU9mSXRlbUluQnl0ZXMoSXRlbVR5cGUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0lu
bGluZUl0ZW0oSXRlbVR5cGUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RyYXdpbmdJdGVtKEl0
ZW1UeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA0N2M3NjJlMWE2
MTk3ZDZjOGI4YzQ1ZmE5Y2ZkYzA1YTAzZGVlNTFiLi42MGFlNjI2ODEzM2YzN2VlZWVkY2IxYjU0
ZjUxMzQ2YzUzNGEzOTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBA
IC01MiwxOTUgKzUyLDE2IEBAIFdURjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0
CiB9CiAjZW5kaWYKIAotSXRlbTo6SXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogbV90eXBlKHR5
cGUpCi17Ci19Ci0KLUl0ZW06On5JdGVtKCkgPSBkZWZhdWx0OwotCi1zaXplX3QgSXRlbTo6c2l6
ZUluQnl0ZXMoY29uc3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTYXZlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxSb3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRDVE0+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmls
bENvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0
U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5l
RGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRN
aXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXA+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdp
bmdDb21tYW5kczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwVG9EcmF3aW5n
Q29tbWFuZHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0lt
YWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1h
Z2VCdWZmZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1
c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RmlsbFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQ
dXRJbWFnZURhdGE+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVk
aWE6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTdHJva2VSZWN0PihpdGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFN0cm9rZVBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxCZWdpblRyYW5zcGFy
ZW5jeUxheWVyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+
KGl0ZW0pKTsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oaXRlbSkpOwotI2VuZGlmCi0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKSk7Ci0gICAgfQot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0ZW0mIGl0ZW0pCi17Ci0gICAgdHMuc3RhcnRHcm91cCgp
OwotICAgIHRzIDw8ICJleHRlbnQgIjsKLSAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQotICAg
ICAgICB0cyA8PCBpdGVtLmV4dGVudCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgInVua25v
d24iOwotICAgIAotICAgIHRzLmVuZEdyb3VwKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3
aW5nSXRlbTo6RHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICA6IEl0ZW0odHlwZSkKLXsK
LX0KLQotRHJhd2luZ0l0ZW06On5EcmF3aW5nSXRlbSgpID0gZGVmYXVsdDsKLQotU2F2ZTo6U2F2
ZSgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQotewotfQotCi1TYXZlOjp+U2F2ZSgpID0g
ZGVmYXVsdDsKLQogdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5zYXZlKCk7CiB9CiAKLVJlc3RvcmU6OlJlc3RvcmUoKQotICAg
IDogSXRlbShJdGVtVHlwZTo6UmVzdG9yZSkKLXsKLX0KLQotUmVzdG9yZTo6flJlc3RvcmUoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi1UcmFuc2xhdGU6OlRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQot
ICAgICwgbV94KHgpCi0gICAgLCBtX3koeSkKLXsKLX0KLQotVHJhbnNsYXRlOjp+VHJhbnNsYXRl
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKQEAgLTI1
NCwxNCArNzUsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotUm90YXRlOjpS
b3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCi0gICAgLCBt
X2FuZ2xlKGFuZ2xlKQotewotfQotCi1Sb3RhdGU6On5Sb3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgUm90YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5yb3RhdGUobV9hbmdsZSk7CkBAIC0yNzQsMTQgKzg3LDYgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVNjYWxlOjpTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKLSAgICAsIG1fc2l6ZShzaXplKQotewotfQotCi1T
Y2FsZTo6flNjYWxlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNjYWxlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zY2FsZShtX3NpemUpOwpAQCAt
Mjk0LDE0ICs5OSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBTY2FsZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldENUTTo6U2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0Q1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1TZXRDVE06
On5TZXRDVE0oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zvcm0pOwpA
QCAtMzE0LDE0ICsxMTEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0Q1RNJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ29uY2F0
ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9y
bSh0cmFuc2Zvcm0pCi17Ci19Ci0KLUNvbmNhdGVuYXRlQ1RNOjp+Q29uY2F0ZW5hdGVDVE0oKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7CkBA
IC0zMzUsOCArMTI0LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQogfQogCiBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEo
Z3JhZGllbnQuZGF0YSgpKQorICAgIDogbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKICAgICAsIG1f
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKGdyYWRpZW50LmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0oKSkKICAgICAsIG1fc3ByZWFkTWV0aG9kKGdyYWRpZW50LnNwcmVhZE1ldGhvZCgpKQogICAg
ICwgbV9jb2xvclN0b3BDb3VudChzdGF0aWNfY2FzdDx1aW50OF90PihncmFkaWVudC5zdG9wcygp
LnNpemUoKSkpCkBAIC0zNTgsMTQgKzE0Niw4IEBAIFJlZjxHcmFkaWVudD4gU2V0SW5saW5lRmls
bEdyYWRpZW50OjpncmFkaWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCi1S
ZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShj
b25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0
SW5saW5lRmlsbEdyYWRpZW50KGdyYWRpZW50KSk7Ci19Ci0KIFNldElubGluZUZpbGxHcmFkaWVu
dDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRd
LCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVu
dDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNm
b3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xv
clN0b3BDb3VudCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkK
LSAgICAsIG1fZGF0YShkYXRhKQorICAgIDogbV9kYXRhKGRhdGEpCiAgICAgLCBtX2dyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAgLCBt
X3NwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpCiAgICAgLCBtX2NvbG9yU3RvcENvdW50KGNvbG9y
U3RvcENvdW50KQpAQCAtMzc3LDggKzE1OSw2IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0
SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTCiAg
ICAgfQogfQogCi1TZXRJbmxpbmVGaWxsR3JhZGllbnQ6On5TZXRJbmxpbmVGaWxsR3JhZGllbnQo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKG1fY29sb3JTdG9wQ291bnQgPD0g
bWF4Q29sb3JTdG9wQ291bnQpCkBAIC00MDQsMTMgKzE4NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsR3JhZGllbnQm
KQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldElubGluZUZpbGxDb2xvcj4gU2V0SW5saW5l
RmlsbENvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxDb2xvcihjb2xvckRhdGEpKTsKLX0KLQotU2V0
SW5saW5lRmlsbENvbG9yOjp+U2V0SW5saW5lRmlsbENvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtNDIyLDEzICsxOTUs
NiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
U2V0SW5saW5lRmlsbENvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50
OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lU3Ry
b2tlQ29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZVN0cm9rZUNvbG9yOjp+U2V0SW5s
aW5lU3Ryb2tlQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lU3Ryb2tlQ29sb3I6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKGNvbG9yKCkpOwpAQCAtNDQwLDEzICsyMDYsNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lU3Ryb2tlQ29s
b3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4g
U2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpKTsKLX0KLQotU2V0
U3Ryb2tlVGhpY2tuZXNzOjp+U2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNldFN0cm9rZVRoaWNrbmVzczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fdGhpY2tuZXNzKTsKQEAgLTQ1
OSwxOSArMjE4LDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogfQogCiBTZXRTdGF0ZTo6U2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0
YXRlKQotICAgICwgbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgOiBtX3N0YXRlKHN0YXRlLCBm
bGFncykKIHsKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQot
ICAgICwgbV9zdGF0ZShzdGF0ZUNoYW5nZSkKKyAgICA6IG1fc3RhdGUoc3RhdGVDaGFuZ2UpCiB7
CiB9CiAKLVNldFN0YXRlOjp+U2V0U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0U3RhdGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBtX3N0YXRlLmFw
cGx5KGNvbnRleHQpOwpAQCAtNDgzLDE0ICsyMzgsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQogICAgIHJldHVy
biB0czsKIH0KIAotU2V0TGluZUNhcDo6U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAg
OiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQotICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCi17
Ci19Ci0KLVNldExpbmVDYXA6On5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldExp
bmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKQEAgLTUwMiwxNSArMjQ5LDYgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxp
bmVDYXApCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRMaW5lRGFzaDo6U2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaCkKLSAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAs
IG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotewotfQotCi1TZXRMaW5lRGFzaDo6flNldExpbmVE
YXNoKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hBcnJh
eSwgbV9kYXNoT2Zmc2V0KTsKQEAgLTUyMywxNCArMjYxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVKb2luOjpTZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVKb2luKQotICAgICwgbV9saW5l
Sm9pbihsaW5lSm9pbikKLXsKLX0KLQotU2V0TGluZUpvaW46On5TZXRMaW5lSm9pbigpID0gZGVm
YXVsdDsKLQogdm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7CkBAIC01NDIs
MTQgKzI3Miw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRN
aXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0KQotICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi17
Ci19Ci0KLVNldE1pdGVyTGltaXQ6On5TZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNldE1pdGVyTGltaXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKQEAgLTU2MSwyNiArMjgz
LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRNaXRlckxpbWl0JiBtaXRlckxpbWl0KQogICAgIHJldHVybiB0czsKIH0KIAotQ2xlYXJT
aGFkb3c6OkNsZWFyU2hhZG93KCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQot
ewotfQotCi1DbGVhclNoYWRvdzo6fkNsZWFyU2hhZG93KCkgPSBkZWZhdWx0OwotCiB2b2lkIENs
ZWFyU2hhZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5jbGVhclNoYWRvdygpOwogfQogCi1DbGlwOjpDbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCi0gICAgLCBtX3JlY3QocmVjdCkKLXsK
LX0KLQotQ2xpcDo6fkNsaXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpA
QCAtNTkyLDE0ICsyOTksNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBPdXQ6
OkNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xp
cE91dCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGlwT3V0Ojp+Q2xpcE91dCgpID0g
ZGVmYXVsdDsKLQogdm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7CkBAIC02MTEsMTQgKzMxMCw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
bGlwT3V0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91dFRvUGF0aDo6Q2xpcE91
dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRv
UGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1DbGlwT3V0VG9QYXRoOjp+Q2xpcE91
dFRvUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7
CkBAIC02MzAsMTUgKzMyMSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0K
IAotQ2xpcFBhdGg6OkNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcFBhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAg
ICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi17Ci19Ci0KLUNsaXBQYXRoOjp+Q2xpcFBhdGgoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7CkBA
IC02NTEsMTYgKzMzMyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDbGlwUGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBU
b0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5n
Q29tbWFuZHMpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMpCi0g
ICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9jb2xvclNwYWNlKGNvbG9y
U3BhY2UpCi0gICAgLCBtX2RyYXdpbmdDb21tYW5kcyhXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykp
Ci17Ci19Ci0KLUNsaXBUb0RyYXdpbmdDb21tYW5kczo6fkNsaXBUb0RyYXdpbmdDb21tYW5kcygp
ID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBUb0RyYXdpbmdDb21t
YW5kcyhtX2Rlc3RpbmF0aW9uLCBtX2NvbG9yU3BhY2UsIFsmXSAoR3JhcGhpY3NDb250ZXh0JiBj
bGlwcGluZ0NvbnRleHQpIHsKQEAgLTY3MywxMyArMzQ1LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMm
IGl0ZW0pCiB7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0aW5hdGlvbiIsIGl0ZW0uZGVzdGlu
YXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvci1zcGFjZSIsIGl0ZW0uY29sb3JT
cGFjZSgpKTsKLSAgICB0cy5kdW1wUHJvcGVydHkoImRyYXdpbmctY29tbWFuZHMtY291bnQiLCBp
dGVtLmRyYXdpbmdDb21tYW5kcygpLml0ZW1Db3VudCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
IERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVm
ZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4m
JiBhZHZhbmNlcywgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0dseXBo
cykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250KSkKKyAgICA6IG1fZm9udCht
YWtlUmVmUHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAgICAsIG1fZ2x5cGhzKFdURk1v
dmUoZ2x5cGhzKSkKICAgICAsIG1fYWR2YW5jZXMoV1RGTW92ZShhZHZhbmNlcykpCiAgICAgLCBt
X2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQpAQCAtNjg5LDggKzM1OSw3IEBAIERyYXdHbHlwaHM6
OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEy
OD4mJiBnbHlwaHMsCiB9CiAKIERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0dseXBocykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250
KSkKKyAgICA6IG1fZm9udChtYWtlUmVmUHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAg
ICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgLCBtX3Ntb290aGluZ01vZGUoc21v
b3RoaW5nTW9kZSkKIHsKQEAgLTcwMywxOSArMzcyLDE3IEBAIERyYXdHbHlwaHM6OkRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHCiAgICAgY29tcHV0ZUJvdW5kcygpOwogfQogCi1EcmF3R2x5cGhzOjp+RHJhd0dseXBocygp
ID0gZGVmYXVsdDsKLQogaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5
cGhCdWZmZXIoKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRk
KG1fZ2x5cGhzW2ldLCBtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0sIEdseXBoQnVmZmVyOjpu
b09mZnNldCk7CisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICptX2ZvbnQsIG1fYWR2
YW5jZXNbaV0sIEdseXBoQnVmZmVyOjpub09mZnNldCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBEcmF3R2x5cGhzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgY29udGV4dC5kcmF3R2x5cGhzKG1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigp
LCAwLCBtX2dseXBocy5zaXplKCksIGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7Cisg
ICAgY29udGV4dC5kcmF3R2x5cGhzKCptX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwg
bV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB2
b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQpAQCAtNzM1LDE0ICs0MDIsOCBAQCB2b2lk
IERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQogICAgIH0KIH0KIAotT3B0aW9uYWw8RmxvYXRS
ZWN0PiBEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAotewotICAgIHJldHVybiBtX2JvdW5kczsKLX0KLQogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiB7Ci0gICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTog
ZHVtcCBtb3JlIHN0dWZmLgogICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRl
bS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFuY2hvci1wb2ludCIsIGl0
ZW0uYW5jaG9yUG9pbnQoKSk7CkBAIC03NTEsMTcgKzQxMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJh
d0ltYWdlOjp+RHJhd0ltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdJbWFnZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ltYWdl
KG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zKTsKQEAgLTc2OSwyNiArNDE5LDEyIEBAIHZvaWQgRHJhd0ltYWdlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1y
ZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBp
dGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1RpbGVkSW1hZ2U6
OkRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJ
bWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0
aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkK
LSAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhp
bWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd1RpbGVkSW1hZ2U6On5EcmF3VGlsZWRJ
bWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9p
bWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2lu
ZywgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03OTYsNyArNDMyLDYgQEAgdm9pZCBEcmF3
VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVk
SW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1wb2ludCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKQEAgLTgwNSwy
MCArNDQwLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdl
KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
Ci0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTY2FsZUZhY3Rvcih0aWxlU2Nh
bGVGYWN0b3IpCi0gICAgLCBtX2hSdWxlKGhSdWxlKQotICAgICwgbV92UnVsZSh2UnVsZSkKLSAg
ICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0K
LURyYXdUaWxlZFNjYWxlZEltYWdlOjp+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTY2FsZUZhY3RvciwgbV9oUnVsZSwgbV92
UnVsZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC04MjYsMjQgKzQ0NywxMiBAQCB2b2lk
IERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3VGlsZWRTY2FsZWRJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBp
dGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNv
dXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRp
b24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1
ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKLSAgICAsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICAsIG1fZGVzdGluYXRpb25S
ZWN0KGRlc3RSZWN0KQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCi0gICAgLCBtX29wdGlvbnMo
b3B0aW9ucykKLXsKLX0KLQotRHJhd0ltYWdlQnVmZmVyOjp+RHJhd0ltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdhdGUuCkBAIC04
NTIsNyArNDYxLDYgQEAgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3SW1hZ2VCdWZmZXImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlbW90ZS1y
ZXNvdXJjZS1pZGVudGlmaWVyIiwgaXRlbS5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBA
IC04NjAsOCArNDY4LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdJbWFnZUJ1ZmZlciYgaXRlbSkKIH0KIAogRHJhd05hdGl2ZUltYWdl
OjpEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGlt
YWdlKQorICAgIDogbV9pbWFnZShpbWFnZSkKICAgICAsIG1faW1hZ2VTaXplKGltYWdlU2l6ZSkK
ICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRlc3RSZWN0KQogICAgICwgbV9zcmNSZWN0KHNyY1Jl
Y3QpCkBAIC04NjksOCArNDc2LDYgQEAgRHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2Uo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGkKIHsKIH0KIAot
RHJhd05hdGl2ZUltYWdlOjp+RHJhd05hdGl2ZUltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERy
YXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIG1faW1hZ2VTaXplLCBtX2Rlc3Rp
bmF0aW9uUmVjdCwgbV9zcmNSZWN0LCBtX29wdGlvbnMpOwpAQCAtODc4LDcgKzQ4Myw2IEBAIHZv
aWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTogZHVtcCBtb3JlIHN0dWZmLgogICAgIHRz
LmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODg2LDgg
KzQ5MCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3TmF0aXZlSW1hZ2UmIGl0ZW0pCiB9CiAKIERyYXdQYXR0ZXJuOjpEcmF3UGF0dGVy
bihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd1BhdHRlcm4pCi0gICAgLCBtX2ltYWdlKGltYWdlKQorICAgIDogbV9pbWFnZShpbWFnZSkK
ICAgICAsIG1fcGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtKQogICAgICwgbV90aWxl
UmVjdCh0aWxlUmVjdCkKICAgICAsIG1fZGVzdGluYXRpb24oZGVzdFJlY3QpCkBAIC04OTcsOCAr
NTAwLDYgQEAgRHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWMKIHsKIH0KIAotRHJhd1BhdHRlcm46On5E
cmF3UGF0dGVybigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0dGVybjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1BhdHRlcm4obV9p
bWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV90aWxlUmVjdCwgbV9wYXR0ZXJuVHJhbnNmb3Jt
LCBtX3BoYXNlLCBtX3NwYWNpbmcsIG1fb3B0aW9ucyk7CkBAIC05MDYsNyArNTA3LDYgQEAgdm9p
ZCBEcmF3UGF0dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1Bh
dHRlcm4mIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdHRlcm4tdHJhbnNmb3JtIiwgaXRlbS5wYXR0ZXJuVHJhbnNm
b3JtKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgidGlsZS1yZWN0IiwgaXRlbS50aWxlUmVjdCgp
KTsKQEAgLTkxNiwxNSArNTE2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0K
IAotRHJhd1JlY3Q6OkRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdSZWN0KQotICAgICwg
bV9yZWN0KHJlY3QpCi0gICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCi17
Ci19Ci0KLURyYXdSZWN0Ojp+RHJhd1JlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1JlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRy
YXdSZWN0KG1fcmVjdCwgbV9ib3JkZXJUaGlja25lc3MpOwpAQCAtOTMyLDIxICs1MjMsMTEgQEAg
dm9pZCBEcmF3UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1Jl
Y3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJib3JkZXItdGhpY2tuZXNzIiwgaXRlbS5ib3JkZXJUaGlja25lc3MoKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3TGluZTo6RHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0xpbmUpCi0gICAgLCBtX3BvaW50MShwb2ludDEpCi0gICAgLCBtX3BvaW50
Mihwb2ludDIpCi17Ci19Ci0KLURyYXdMaW5lOjp+RHJhd0xpbmUoKSA9IGRlZmF1bHQ7Ci0KIE9w
dGlvbmFsPEZsb2F0UmVjdD4gRHJhd0xpbmU6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kczsKQEAgLTk2MSwxNSArNTQyLDEz
IEBAIHZvaWQgRHJhd0xpbmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdMaW5lJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0xIiwgaXRlbS5wb2ludDEoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwb2ludC0yIiwgaXRlbS5wb2ludDIoKSk7CiAgICAgcmV0
dXJuIHRzOwogfQogCiBEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0xpbmVzRm9y
VGV4dCkKLSAgICAsIG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQorICAgIDogbV9ibG9j
a0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCiAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9y
KQogICAgICwgbV93aWR0aHMod2lkdGhzKQogICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQpA
QCAtOTc4LDggKzU1Nyw2IEBAIERyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTCiB7CiB9CiAKLURyYXdM
aW5lc0ZvclRleHQ6On5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdM
aW5lc0ZvclRleHQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdMaW5lc0ZvclRleHQocG9pbnQoKSwgbV90aGlja25lc3MsIG1fd2lkdGhz
LCBtX3ByaW50aW5nLCBtX2RvdWJsZUxpbmVzKTsKQEAgLTk5OSw3ICs1NzYsNiBAQCBPcHRpb25h
bDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JUZXh0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJi
bG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7CkBAIC0xMDExLDE1ICs1ODcsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9y
VGV4dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX3N0
eWxlKHN0eWxlKQotewotfQotCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjp+RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcmVjdCwgbV9zdHlsZSk7CkBAIC0xMDMy
LDE5ICs1OTksMTAgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAg
cmV0dXJuIHRzOwogfQogCi1EcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdFbGxpcHNlKQotICAgICwg
bV9yZWN0KHJlY3QpCi17Ci19Ci0KLURyYXdFbGxpcHNlOjp+RHJhd0VsbGlwc2UoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1fcmVjdCk7CkBAIC0xMDU2LDE0ICs2
MTQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3UGF0aDo6RHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
UGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1EcmF3UGF0aDo6fkRyYXdQYXRoKCkg
PSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAjaWYgVVNFKENHKQpAQCAtMTA3MywyNCArNjIzLDEyIEBAIHZvaWQgRHJh
d1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICNlbmRpZgogfQog
Ci1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d1BhdGgmIGl0ZW0pCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd1BhdGgmKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgo
KSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgLy8gRklYTUU6IGFkZCBs
b2dnaW5nIGZvciBwYXRocy4KICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdGb2N1c1JpbmdQYXRo
OjpEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1fd2lkdGgod2lk
dGgpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQotewotfQot
Ci1EcmF3Rm9jdXNSaW5nUGF0aDo6fkRyYXdGb2N1c1JpbmdQYXRoKCkgPSBkZWZhdWx0OwotCiB2
b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwgbV9vZmZz
ZXQsIG1fY29sb3IpOwpAQCAtMTEwNSw3ICs2NDMsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERy
YXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKIC8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0u
cGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KICAgICB0cy5kdW1wUHJv
cGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNl
dCIsIGl0ZW0ub2Zmc2V0KCkpOwpAQCAtMTExNCwxNiArNjUxLDEzIEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUGF0aCYg
aXRlbSkKIH0KIAogRHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ZvY3VzUmlu
Z1JlY3RzKQotICAgICwgbV9yZWN0cyhyZWN0cykKKyAgICA6IG1fcmVjdHMocmVjdHMpCiAgICAg
LCBtX3dpZHRoKHdpZHRoKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jb2xvcihj
b2xvcikKIHsKIH0KIAotRHJhd0ZvY3VzUmluZ1JlY3RzOjp+RHJhd0ZvY3VzUmluZ1JlY3RzKCkg
PSBkZWZhdWx0OwotCiB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3JlY3Rz
LCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7CkBAIC0xMTQwLDcgKzY3NCw2IEBAIE9wdGlv
bmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zCiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIndpZHRoIiwg
aXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0
KCkpOwpAQCAtMTE0OCwxNCArNjgxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKICAgICByZXR1
cm4gdHM7CiB9CiAKLUZpbGxSZWN0OjpGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkK
LXsKLX0KLQotRmlsbFJlY3Q6On5GaWxsUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
ZmlsbFJlY3QobV9yZWN0KTsKQEAgLTExNjMsMjAgKzY4OCwxMCBAQCB2b2lkIEZpbGxSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZp
bGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcikKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsK
LX0KLQotRmlsbFJlY3RXaXRoQ29sb3I6On5GaWxsUmVjdFdpdGhDb2xvcigpID0gZGVmYXVsdDsK
LQogdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsKQEAgLTEx
ODQsMjEgKzY5OSwxNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhDb2xvciYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwg
aXRlbS5jb2xvcigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIEZpbGxSZWN0V2l0aEdyYWRpZW50
OjpGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBn
cmFkaWVudCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVu
dCkKLSAgICAsIG1fcmVjdChyZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCiAgICAgLCBtX2dyYWRp
ZW50KGdyYWRpZW50KQogewogfQogCi1GaWxsUmVjdFdpdGhHcmFkaWVudDo6fkZpbGxSZWN0V2l0
aEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUmVj
dChtX3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOwpAQCAtMTIwNiwyMyArNzE3LDExIEBAIHZvaWQg
RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEZpbGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGxvZyBncmFkaWVudC4KICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwog
fQogCi1GaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQotICAgICwg
bV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQotRmlsbENvbXBv
c2l0ZWRSZWN0Ojp+RmlsbENvbXBvc2l0ZWRSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxD
b21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5kTW9kZSk7
CkBAIC0xMjMwLDcgKzcyOSw2IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCiB7Ci0g
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3NpdGUtb3Bl
cmF0aW9uIiwgaXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKQEAgLTEyMzgsMTYgKzczNiw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxs
Q29tcG9zaXRlZFJlY3QmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUm91bmRlZFJl
Y3Q6OkZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9y
KGNvbG9yKQotICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1GaWxsUm91bmRl
ZFJlY3Q6On5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7CkBAIC0xMjU1
LDIzICs3NDMsMTIgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIs
IGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwgaXRlbS5i
bGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKLSAgICAs
IG1fcmVjdChyZWN0KQotICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQot
ICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6On5G
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRIb2xlUmVj
dCwgbV9jb2xvcik7CkBAIC0xMjc5LDcgKzc1Niw2IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJvdW5kZWRIb2xl
UmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKQEAg
LTEyODgsMTQgKzc2NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlCiAKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKIAotRmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQYXRoKGNvbnN0
IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpG
aWxsSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLUZpbGxJ
bmxpbmVQYXRoOjp+RmlsbElubGluZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbElubGlu
ZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmZpbGxQYXRoKHBhdGgoKSk7CkBAIC0xMzAzLDIxICs3NzEsMTIgQEAgdm9pZCBGaWxsSW5s
aW5lUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbElubGluZVBh
dGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0
dXJuIHRzOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxQ
YXRoOjpGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUZpbGxQYXRoOjp+Rmls
bFBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7CkBAIC0x
MzI1LDE5ICs3ODQsMTAgQEAgdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRmlsbFBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVt
LnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxF
bGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxFbGxpcHNlOjp+RmlsbEVs
bGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxFbGxpcHNlKG1fcmVjdCk7
CkBAIC0xMzQ1LDE0ICs3OTUsMTIgQEAgdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBQdXRJbWFnZURhdGE6
OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3JjUmVjdChzcmNS
ZWN0KQorICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9p
bnQpCiAgICAgLCBtX2ltYWdlRGF0YShpbWFnZURhdGEuZGVlcENsb25lKCkpIC8vIFRoaXMgY29w
eSBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9mIHB1dElt
YWdlRGF0YSgpLgogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNjEsOCAr
ODA5LDcgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJgogfQogCiBQdXRJbWFnZURhdGE6OlB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRh
PiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQor
ICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9pbnQpCiAg
ICAgLCBtX2ltYWdlRGF0YShXVEZNb3ZlKGltYWdlRGF0YSkpCiAgICAgLCBtX2lucHV0Rm9ybWF0
KGlucHV0Rm9ybWF0KQpAQCAtMTM3MCw4ICs4MTcsNiBAQCBQdXRJbWFnZURhdGE6OlB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYm
CiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6flB1dEltYWdlRGF0YSgpID0gZGVmYXVsdDsKLQogdm9p
ZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8g
U2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMTM4MCw3ICs4MjUsNiBAQCB2
b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1dEltYWdlRGF0
YSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW5wdXRGb3JtYXQiLCBpdGVtLmlucHV0Rm9ybWF0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2VEYXRhU2l6ZSIsIGl0ZW0uaW1hZ2VEYXRh
KCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVtLnNyY1JlY3Qo
KSk7CkBAIC0xMzg5LDMyICs4MzMsMTIgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1dEltYWdlRGF0YSYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRl
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pKTsKLX0KLQotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFtZUZvck1lZGlh
OjpjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFpbnRGcmFtZUZv
ck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KIFBhaW50RnJhbWVGb3JNZWRp
YTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6UGFpbnRGcmFtZUZv
ck1lZGlhKQotICAgICwgbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCisgICAgOiBt
X2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKICAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCiB7CiB9CiAKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkK
LSAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0
aW5hdGlvbikKLXsKLX0KLQotUGFpbnRGcmFtZUZvck1lZGlhOjp+UGFpbnRGcmFtZUZvck1lZGlh
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdh
dGUuCkBAIC0xNDIzLDIwICs4NDcsMTAgQEAgdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQYWludEZyYW1lRm9yTWVkaWEmIGl0ZW0pCiB7Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoImRlc3RpbmF0aW9uIiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKLVN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUmVjdCkK
LSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQotewotfQot
Ci1TdHJva2VSZWN0Ojp+U3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKLQogT3B0aW9uYWw8RmxvYXRS
ZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAogewogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7CkBAIC0xNDUxLDcgKzg2NSw2IEBA
IHZvaWQgU3Ryb2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ry
b2tlUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgpKTsKICAgICBy
ZXR1cm4gdHM7CkBAIC0xNDc0LDE5ICs4ODcsMTAgQEAgdm9pZCBTdHJva2VQYXRoOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VQYXRoJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tl
RWxsaXBzZTo6U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewot
fQotCi1TdHJva2VFbGxpcHNlOjp+U3Ryb2tlRWxsaXBzZSgpID0gZGVmYXVsdDsKLQogT3B0aW9u
YWw8RmxvYXRSZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzID0gY29u
dGV4dC5zdHJva2VUaGlja25lc3MoKTsKQEAgLTE1MDMsNyArOTA3LDYgQEAgdm9pZCBTdHJva2VF
bGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VFbGxpcHNl
JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVy
biB0czsKIH0KQEAgLTE1MjcsMzcgKzkzMCwxMiBAQCB2b2lkIFN0cm9rZUlubGluZVBhdGg6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUlubGluZVBhdGgmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwog
fQogCi1TdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhE
YXRhJiBwYXRoRGF0YSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQ
YXRoKQotICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKLXsKLX0KLQotU3Ryb2tlSW5saW5lUGF0
aDo6flN0cm9rZUlubGluZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKIAotU3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVBhdGgpCi0gICAgLCBtX3BhdGgo
cGF0aCkKLXsKLX0KLQotU3Ryb2tlUGF0aDo6flN0cm9rZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KLUNs
ZWFyUmVjdDo6Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpDbGVhclJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotQ2xl
YXJSZWN0Ojp+Q2xlYXJSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIENsZWFyUmVjdDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJSZWN0
KG1fcmVjdCk7CkBAIC0xNTY1LDE5ICs5NDMsMTAgQEAgdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsZWFyUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotICAgICwg
bV9vcGFjaXR5KG9wYWNpdHkpCi17Ci19Ci0KLUJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6On5CZWdp
blRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCiB2b2lkIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9vcGFjaXR5KTsKQEAgLTE1ODUsNTcgKzk1NCwy
OCBAQCB2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoIm9wYWNpdHkiLCBpdGVtLm9wYWNpdHkoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1FbmRU
cmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQotewotfQotCi1FbmRUcmFuc3BhcmVu
Y3lMYXllcjo6fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCiB2b2lkIEVuZFRy
YW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCiAjaWYgVVNFKENHKQot
QXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIDogSXRlbShJdGVt
VHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQotewotfQotCi1BcHBseVN0cm9rZVBhdHRlcm46On5B
cHBseVN0cm9rZVBhdHRlcm4oKSA9IGRlZmF1bHQ7CiAKIHZvaWQgQXBwbHlTdHJva2VQYXR0ZXJu
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5h
cHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAotQXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0
dGVybigpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuKQotewotfQotCi1B
cHBseUZpbGxQYXR0ZXJuOjp+QXBwbHlGaWxsUGF0dGVybigpID0gZGVmYXVsdDsKLQogdm9pZCBB
cHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7CiB9CiAjZW5kaWYKIAotQXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi0gICAgLCBtX3Nj
YWxlRmFjdG9yKHNjYWxlRmFjdG9yKQotewotfQotCi1BcHBseURldmljZVNjYWxlRmFjdG9yOjp+
QXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpID0gZGVmYXVsdDsKLQogdm9pZCBBcHBseURldmljZVNj
YWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2NhbGVGYWN0b3IpOwpAQCAtMTY0Nyw3
ICs5ODcsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbQogICAgIHJldHVybiB0czsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1U
eXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKQEAgLTE3MTgsMTcyICsxMDU4LDE3MCBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5
cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogewotICAgIFRleHRTdHJlYW06Okdyb3Vw
U2NvcGUgZ3JvdXAodHMpOwogICAgIHRzIDw8IGl0ZW0udHlwZSgpOwogCi0gICAgLy8gRklYTUU6
IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBhbGwgdGhlc2UgZW51bWVyYXRp
b24gc3dpdGNoZXMKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Um90YXRlPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2NhbGU+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRD
VE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRDVE0+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENv
bmNhdGVuYXRlQ1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxH
cmFkaWVudD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxHcmFk
aWVudD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dFN0cm9rZVRoaWNrbmVzcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0YXRlPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVDYXA+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5l
RGFzaD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldE1pdGVyTGlt
aXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxDbGlwPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXBPdXQ+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxDbGlwT3V0VG9QYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3R2x5cGhzPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PERyYXdJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdJbWFnZT4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RHJhd1RpbGVkSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdUaWxl
ZFNjYWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
SW1hZ2VCdWZmZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxEcmF3TmF0aXZlSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d1JlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UmVjdD4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0xpbmU+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxEcmF3TGluZXNGb3JUZXh0PigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PERyYXdFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0VsbGlwc2U+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0PigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxGaWxsUmVjdFdpdGhDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21w
b3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0Pihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUGF0aD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxQYXRoPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsRWxsaXBz
ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxQdXRJbWFnZURhdGE+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxQdXRJbWFnZURhdGE+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8UGFpbnRG
cmFtZUZvck1lZGlhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UGFpbnRGcmFtZUZv
ck1lZGlhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0PihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U3Ryb2tlUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFN0cm9rZUlubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9rZVBhdGg+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxTdHJva2VFbGxpcHNlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsZWFyUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpOwogICAgICAgICBicmVhazsKIAogICAgIC8vIEl0
ZW1zIHdpdGggbm8gYWRkaXRpb25hbCBkYXRhLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKaW5kZXggZjAxNWJlNWU4NjYwNmVjYzJmNmNlODU3YzFmNzExNjc2OTRmZThlMy4uMmE0NjI2
ZThlYjMxNTBkODE4NTRjZmIyYWUyYWI2M2UzMmMwYTc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCkBAIC01MSwzMjAgKzUxLDE2MyBAQCBzdHJ1Y3QgSW1hZ2VQYWludGluZ09w
dGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdpbmdJdGVtIDog
cHVibGljIEl0ZW0geworY2xhc3MgU2F2ZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
ZXhwbGljaXQgRHJhd2luZ0l0ZW0oSXRlbVR5cGUpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2F2ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd2luZ0l0
ZW0oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBzZXRFeHRlbnQoY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fZXh0ZW50ID0gcjsgfQotICAgIGNv
bnN0IEZsb2F0UmVjdCYgZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQudmFsdWUoKTsg
fQotCi0gICAgYm9vbCBleHRlbnRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KG1fZXh0ZW50KTsgfQotCi0gICAgLy8gUmV0dXJuIGJvdW5kcyBvZiB0aGlzIGRyYXdpbmcg
b3BlcmF0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIERvZXMgbm90IGluY2x1ZGUg
ZWZmZXRzIG9mIHRyYW5zZm9ybSwgc2hhZG93IGV0YyBpbiB0aGUgc3RhdGUuCi0gICAgdmlydHVh
bCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQotCi0gICAgLy8gU29tZSBvcGVyYXRpb25z
IChlLmcuIHB1dEltYWdlRGF0YSkgb3BlcmF0ZSBpbiBnbG9iYWwgYm91bmRzLiBGb3IgdGhlc2Ug
b3BlcmF0aW9ucywgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0gICAgLy8gSWYgYXBwbGljYWJsZSwg
dGhlIHJldHVybiB2YWx1ZSBuZWVkcyB0byBpbmNsdWRlIHRoZSBlZmZlY3RzIG9mIHNoYWRvd3Ms
IGNsaXBwaW5nLCBldGMuCi0gICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQotCi1wcml2YXRlOgotICAgIGJv
b2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRpbmF0ZXMsIHRh
a2luZyBzaGFkb3dzIGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi1jbGFzcyBTYXZlIDogcHVi
bGljIEl0ZW0geworY2xhc3MgUmVzdG9yZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTYXZl
PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2F2ZSk7Ci0g
ICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
UmVzdG9yZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2F2ZSgpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxTYXZlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBTYXZlKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNhdmU6OmVuY29kZShF
bmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxTYXZlPj4gU2F2ZTo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBTYXZlOjpj
cmVhdGUoKTsKLX0KLQotY2xhc3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFRyYW5z
bGF0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZXN0b3JlPiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzdG9yZSk7Ci0gICAgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UmVzdG9yZSgpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UmVzdG9yZT4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVzdG9yZSgpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIFJlc3RvcmU6OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxSZXN0b3JlPj4gUmVzdG9yZTo6
ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBSZXN0b3JlOjpjcmVhdGUoKTsKLX0KKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlRyYW5zbGF0
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1jbGFzcyBUcmFu
c2xhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxUcmFuc2xhdGU+
IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQorICAgIFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQorICAgICAgICA6IG1feCh4KQorICAgICAgICAsIG1feSh5KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5UcmFuc2xhdGUoKTsKLQogICAgIGZsb2F0IHgoKSBjb25zdCB7IHJl
dHVybiBtX3g7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxUcmFuc2xhdGU+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBm
bG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95OworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3ggeyAwIH07
CisgICAgZmxvYXQgbV95IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgVHJhbnNsYXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1feDsKLSAgICBlbmNvZGVyIDw8IG1feTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxUcmFuc2xhdGU+PiBUcmFuc2xhdGU6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAgIGRlY29kZXIgPj4geDsK
LSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25h
bDxmbG9hdD4geTsKLSAgICBkZWNvZGVyID4+IHk7Ci0gICAgaWYgKCF5KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFRyYW5zbGF0ZTo6Y3JlYXRlKCp4LCAqeSk7
Ci19Ci0KLWNsYXNzIFJvdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFJvdGF0ZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJvdGF0
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgUm90YXRl
KGZsb2F0IGFuZ2xlKQorICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Sb3RhdGUoKTsKLQogICAgIGZsb2F0IGFuZ2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8Um90YXRlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSb3RhdGUoZmxvYXQgYW5nbGUpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAotICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJhZGlhbnMuCitwcml2
YXRlOgorICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCiB9OwogCi10ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBSb3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9hbmdsZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxSb3RhdGU+PiBSb3RhdGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBhbmdsZTsKLSAgICBkZWNvZGVyID4+IGFu
Z2xlOwotICAgIGlmICghYW5nbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICByZXR1cm4gUm90YXRlOjpjcmVhdGUoKmFuZ2xlKTsKLX0KLQotY2xhc3MgU2NhbGUgOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBTY2FsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTY2FsZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CisKKyAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAg
ICAgIDogbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
Y2FsZShzaXplKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2NhbGUo
KTsKLQogICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxT
Y2FsZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitw
cml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX3NpemU7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBTY2FsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX3NpemU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U2NhbGU+PiBTY2FsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8RmxvYXRTaXplPiBzY2FsZTsKLSAgICBkZWNvZGVyID4+IHNjYWxlOwotICAgIGlmICgh
c2NhbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2NhbGU6
OmNyZWF0ZSgqc2NhbGUpOwotfQotCi1jbGFzcyBTZXRDVE0gOiBwdWJsaWMgSXRlbSB7CitjbGFz
cyBTZXRDVE0gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0Q1RNPiBjcmVhdGUoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKKworICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKKyAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTZXRDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2V0Q1RNKCk7Ci0KICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRDVE0+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0Q1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fdHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPFNldENUTT4+IFNldENUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0
cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gU2V0Q1RNOjpjcmVhdGUoKnRyYW5zZm9ybSk7Ci19Ci0KLWNsYXNz
IENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgQ29uY2F0ZW5hdGVDVE0gewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CisKKyAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKKyAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRyaXgpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Db25jYXRlbmF0ZUNUTSgpOwotCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8Q29uY2F0ZW5hdGVDVE0+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDb25j
YXRlbmF0ZUNUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxDb25jYXRlbmF0ZUNUTT4+IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKLSAgICBk
ZWNvZGVyID4+IHRyYW5zZm9ybTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKCp0cmFu
c2Zvcm0pOwotfQotCi1jbGFzcyBTZXRJbmxpbmVGaWxsR3JhZGllbnQgOiBwdWJsaWMgSXRlbSB7
CitjbGFzcyBTZXRJbmxpbmVGaWxsR3JhZGllbnQgewogcHVibGljOgorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50OF90IG1heENvbG9yU3RvcENvdW50ID0gNDsKIAotICAgIHN0YXRpYyBSZWY8
U2V0SW5saW5lRmlsbEdyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhZGllbnQmKTsKLSAgICBzdGF0
aWMgYm9vbCBpc0lubGluZShjb25zdCBHcmFkaWVudCYpOwotCi0gICAgdmlydHVhbCB+U2V0SW5s
aW5lRmlsbEdyYWRpZW50KCk7Ci0KLSAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIHN0
YXRpYyBSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBjcmVhdGUoZmxvYXQgb2Zmc2V0c1ttYXhD
b2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0s
Ci0gICAgICAgIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3By
ZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRpZW50KG9mZnNldHMsIGNvbG9ycywgZGF0
YSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBzcHJlYWRNZXRob2QsIGNvbG9yU3RvcENv
dW50KSk7Ci0gICAgfQotCisgICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNl
dHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9w
Q291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYsCiAgICAgICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCwg
dWludDhfdCBjb2xvclN0b3BDb3VudCk7CiAKLSAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29u
c3QgR3JhZGllbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0lubGluZShjb25zdCBHcmFkaWVudCYp
OworICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKworcHJpdmF0ZToKICAgICBmbG9hdCBtX29mZnNldHNbbWF4Q29sb3JTdG9w
Q291bnRdOwogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JzW21heENvbG9yU3RvcENvdW50XTsK
ICAgICBHcmFkaWVudDo6RGF0YSBtX2RhdGE7CkBAIC0zNzMsMTk4ICsyMTYsNzkgQEAgcHJpdmF0
ZToKICAgICB1aW50OF90IG1fY29sb3JTdG9wQ291bnQgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9jb2xvclN0b3BDb3VudDsKLSAg
ICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAg
ICAgZW5jb2RlciA8PCBtX29mZnNldHNbaV07Ci0gICAgICAgIGVuY29kZXIgPDwgUGFja2VkQ29s
b3I6OlJHQkEgeyBtX2NvbG9yc1tpXSB9LnZhbHVlOwotICAgIH0KLSAgICBlbmNvZGVyIDw8IG1f
ZGF0YTsKLSAgICBlbmNvZGVyIDw8IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwotICAg
IGVuY29kZXIgPDwgbV9zcHJlYWRNZXRob2Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50Pj4gU2V0SW5saW5lRmlsbEdyYWRp
ZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50OF90PiBj
b2xvclN0b3BDb3VudDsKLSAgICBkZWNvZGVyID4+IGNvbG9yU3RvcENvdW50OwotICAgIGlmICgh
Y29sb3JTdG9wQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAo
KmNvbG9yU3RvcENvdW50ID4gbWF4Q29sb3JTdG9wQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICBmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBT
UkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAgIGZvciAodWludDhf
dCBpID0gMDsgaSA8ICpjb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIE9wdGlvbmFsPGZs
b2F0PiBvZmZzZXQ7Ci0gICAgICAgIGRlY29kZXIgPj4gb2Zmc2V0OwotICAgICAgICBpZiAoIW9m
ZnNldCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgT3B0aW9u
YWw8dWludDMyX3Q+IGNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgICAgICBp
ZiAoIWNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBj
b2xvcnNbaV0gPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKmNvbG9yIH0pOwotICAgICAg
ICBvZmZzZXRzW2ldID0gKm9mZnNldDsKLSAgICB9Ci0KLSAgICBPcHRpb25hbDxHcmFkaWVudDo6
RGF0YT4gZGF0YTsKLSAgICBkZWNvZGVyID4+IGRhdGE7Ci0gICAgaWYgKCFkYXRhKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiBn
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgZGVjb2RlciA+PiBncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb247Ci0gICAgaWYgKCFncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxHcmFkaWVudFNwcmVh
ZE1ldGhvZD4gc3ByZWFkTWV0aG9kOwotICAgIGRlY29kZXIgPj4gc3ByZWFkTWV0aG9kOwotICAg
IGlmICghc3ByZWFkTWV0aG9kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIHsgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUob2Zmc2V0cywgY29sb3JzLCAq
ZGF0YSwgKmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgKnNwcmVhZE1ldGhvZCwgKmNvbG9y
U3RvcENvdW50KSB9OwotfQotCi1jbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgOiBwdWJsaWMgSXRl
bSB7CitjbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8U2V0SW5saW5lRmlsbENvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4p
OworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRJbmxpbmVGaWxsQ29sb3IoKTsKLQot
ICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVG
aWxsQ29sb3I+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgogICAgIFNldElubGluZUZp
bGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0SW5saW5lRmlsbENvbG9yKQotICAgICAgICAsIG1fY29sb3JEYXRhKGNvbG9yRGF0YSkK
KyAgICAgICAgOiBtX2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3IgY29s
b3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OworCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JE
YXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0SW5saW5lRmlsbENv
bG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBh
Y2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+PiBTZXRJbmxpbmVG
aWxsQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQz
Ml90PiB2YWx1ZTsKLSAgICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0SW5saW5lRmlsbENvbG9y
OjpjcmVhdGUoYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Ci0KLWNs
YXNzIFNldElubGluZVN0cm9rZUNvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5l
U3Ryb2tlQ29sb3IgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2V0
SW5saW5lU3Ryb2tlQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5TZXRJbmxpbmVTdHJva2VDb2xvcigpOwotCi0gICAgQ29sb3IgY29s
b3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLQotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZVN0cm9rZUNvbG9yPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6CiAgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3Io
U1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElu
bGluZVN0cm9rZUNvbG9yKQotICAgICAgICAsIG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKKyAgICAg
ICAgOiBtX2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBTUkdCQTx1aW50OF90
PiBtX2NvbG9yRGF0YTsKLX07CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1f
Y29sb3JEYXRhIH07IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0SW5saW5l
U3Ryb2tlQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgUGFja2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwotfQorICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+PiBTZXRJbmxpbmVTdHJva2VD
b2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDMyX3Q+
IHZhbHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKLSAgICByZXR1cm4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShh
c1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKLX0KK3ByaXZhdGU6CisgICAg
U1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7Cit9OwogCi1jbGFzcyBTZXRTdHJva2VUaGlja25l
c3MgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRTdHJva2VUaGlja25lc3MgewogcHVibGljOgot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBjcmVhdGUo
ZmxvYXQgdGhpY2tuZXNzKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldFN0cm9r
ZVRoaWNrbmVzcygpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7CiAKLSAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3Ro
aWNrbmVzczsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
ICAgICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotICAgICAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgLCBtX3RoaWNrbmVzcyh0aGlj
a25lc3MpCisgICAgICAgIDogbV90aGlja25lc3ModGhpY2tuZXNzKQogICAgIHsKICAgICB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
ZmxvYXQgbV90aGlja25lc3MgeyAwIH07Ci19OworICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fdGhpY2tuZXNzOyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFNldFN0cm9rZVRoaWNrbmVzczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX3RoaWNrbmVzczsKLX0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNl
dFN0cm9rZVRoaWNrbmVzcz4+IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHRoaWNrbmVzczsKLSAgICBkZWNvZGVyID4+
IHRoaWNrbmVzczsKLSAgICBpZiAoIXRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAK
LSAgICByZXR1cm4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoKnRoaWNrbmVzcyk7Ci19Citw
cml2YXRlOgorICAgIGZsb2F0IG1fdGhpY2tuZXNzIHsgMCB9OworfTsKIAotY2xhc3MgU2V0U3Rh
dGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRTdGF0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZSwgZmxhZ3MpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0U3RhdGUoc3RhdGVDaGFuZ2UpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRTdGF0ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
flNldFN0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmKTsKICAgICAKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKQEAgLTU3MywxNCArMjk3LDE0IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8U2V0U3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZUNoYW5nZSBtX3N0YXRlOwogfTsKIApAQCAtNjY5LDcgKzM5Myw3IEBAIHZvaWQgU2V0
U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3RhdGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7CiAgICAgZGVjb2RlciA+PiBjaGFuZ2VGbGFnczsKQEAg
LTg5Niw2OCArNjIwLDU1IEBAIE9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICB9CiAKLSAg
ICByZXR1cm4gU2V0U3RhdGU6OmNyZWF0ZShzdGF0ZUNoYW5nZSk7CisgICAgcmV0dXJuIHsgc3Rh
dGVDaGFuZ2UgfTsKIH0KIAotY2xhc3MgU2V0TGluZUNhcCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNldExpbmVDYXAgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUNhcD4gY3JlYXRl
KExpbmVDYXAgbGluZUNhcCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldExpbmVDYXA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKKworICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAgICAgICA6IG1f
bGluZUNhcChsaW5lQ2FwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0
TGluZUNhcChsaW5lQ2FwKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0TGluZUNhcCgpOwotICAgIAogICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGluZUNhcDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8U2V0TGluZUNhcD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGluZUNhcCBtX2xpbmVDYXA7CiB9OwogCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lQ2FwOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fbGluZUNhcDsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRMaW5lQ2FwPj4gU2V0TGluZUNhcDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TGluZUNhcD4gbGluZUNhcDsKLSAg
ICBkZWNvZGVyID4+IGxpbmVDYXA7Ci0gICAgaWYgKCFsaW5lQ2FwKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldExpbmVDYXA6OmNyZWF0ZSgqbGluZUNhcCk7
Ci19Ci0KLWNsYXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TGluZURh
c2ggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0ZShjb25zdCBE
YXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgICAgIDogbV9kYXNo
QXJyYXkoZGFzaEFycmF5KQorICAgICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURhc2goZGFzaEFycmF5LCBk
YXNoT2Zmc2V0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TGlu
ZURhc2goKTsKLQogICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29uc3QgeyByZXR1
cm4gbV9kYXNoQXJyYXk7IH0KICAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9kYXNoT2Zmc2V0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShEZWNvZGVyJik7
CiAKK3ByaXZhdGU6CiAgICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwogICAgIGZsb2F0IG1fZGFz
aE9mZnNldDsKIH07CkBAIC05NzAsNyArNjgxLDcgQEAgdm9pZCBTZXRMaW5lRGFzaDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8U2V0TGluZURhc2g+PiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitPcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5OwogICAgIGRl
Y29kZXIgPj4gZGFzaEFycmF5OwpAQCAtOTgyLDIxNSArNjkzLDEzOCBAQCBPcHRpb25hbDxSZWY8
U2V0TGluZURhc2g+PiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
aWYgKCFkYXNoT2Zmc2V0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIFNldExpbmVEYXNoOjpjcmVhdGUoKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQpOworICAgIHJl
dHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9mZnNldCB9fTsKIH0KIAotY2xhc3MgU2V0TGluZUpv
aW4gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lSm9pbiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxTZXRMaW5lSm9pbj4gY3JlYXRlKExpbmVKb2luIGxpbmVKb2luKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUpvaW47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVKb2lu
KExpbmVKb2luIGxpbmVKb2luKQorICAgICAgICA6IG1fbGluZUpvaW4obGluZUpvaW4pCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5lSm9pbikpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVKb2luKCk7Ci0gICAg
CiAgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVKb2luOyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRMaW5l
Sm9pbj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2V0TGluZUpvaW4oTGluZUpvaW4pOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJp
dmF0ZToKICAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZUpvaW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9saW5lSm9pbjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTZXRMaW5lSm9pbj4+IFNldExpbmVKb2luOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lSm9pbj4gbGluZUpvaW47Ci0gICAgZGVj
b2RlciA+PiBsaW5lSm9pbjsKLSAgICBpZiAoIWxpbmVKb2luKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldExpbmVKb2luOjpjcmVhdGUoKmxpbmVKb2luKTsK
LX0KLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldE1pdGVy
TGltaXQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4gY3JlYXRlKGZs
b2F0IGxpbWl0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAgICAgICA6IG1f
bWl0ZXJMaW1pdChtaXRlckxpbWl0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0TWl0ZXJMaW1pdChsaW1pdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflNldE1pdGVyTGltaXQoKTsKLQogICAgIGZsb2F0IG1pdGVyTGltaXQoKSBjb25zdCB7
IHJldHVybiBtX21pdGVyTGltaXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFNldE1pdGVyTGltaXQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldE1pdGVyTGltaXQoZmxvYXQpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBmbG9hdCBtX21pdGVyTGltaXQ7
CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRNaXRlckxpbWl0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fbWl0ZXJMaW1p
dDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRNaXRlckxp
bWl0Pj4gU2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8ZmxvYXQ+IG1pdGVyTGltaXQ7Ci0gICAgZGVjb2RlciA+PiBtaXRlckxpbWl0OwotICAg
IGlmICghbWl0ZXJMaW1pdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBTZXRNaXRlckxpbWl0OjpjcmVhdGUoKm1pdGVyTGltaXQpOwotfQotCi1jbGFzcyBDbGVh
clNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsZWFyU2hhZG93IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENsZWFyU2hhZG93PiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xlYXJTaGFkb3cpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkNsZWFyU2hhZG93KCk7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxDbGVhclNoYWRvdz4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclNoYWRv
dzsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIENsZWFyU2hhZG93KCk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xlYXJTaGFkb3c6OmVu
Y29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxDbGVhclNoYWRvdz4+IENsZWFyU2hhZG93OjpkZWNvZGUoRGVjb2RlciYpCi17
Ci0gICAgcmV0dXJuIENsZWFyU2hhZG93OjpjcmVhdGUoKTsKLX0KLQotLy8gRklYTUU6IHRyZWF0
IGFzIERyYXdpbmdJdGVtPwotY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKKy8vIEZJWE1FOiB0
cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CitjbGFzcyBDbGlwIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENsaXA+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsaXAocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkNsaXAoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXA+PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAogcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQogICAgIEZsb2F0
UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGlwOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwPj4gQ2xpcDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xh
c3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBPdXQgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBPdXQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcE91dCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
Q2xpcE91dD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIENsaXBPdXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBDbGlwT3V0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiBy
ZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBDbGlwT3V0OjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGlwT3V0VG9QYXRo
IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dFRvUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0
VG9QYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChwYXRoKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcE91dFRvUGF0aCgpOworICAg
IENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkK
KyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8Q2xpcE91dFRvUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBPdXRUb1BhdGg+IGRlY29kZShEZWNvZGVyJik7
CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRo
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7
Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KQEAgLTEyMDAsMzcgKzgzNCw0NyBAQCB2b2lkIENsaXBPdXRUb1BhdGg6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPENsaXBPdXRUb1BhdGg+PiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPENsaXBPdXRUb1BhdGg+IENsaXBPdXRUb1BhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+
PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBDbGlwT3V0VG9QYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBX
VEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMgSXRlbSB7Citj
bGFzcyBDbGlwUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcFBhdGg7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwUGF0aChQYXRoJiYgcGF0aCwg
V2luZFJ1bGUgd2luZFJ1bGUpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCisgICAg
ICAgICwgbV93aW5kUnVsZSh3aW5kUnVsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgfkNsaXBQYXRoKCk7CisgICAgQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgd2luZFJ1bGUpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aW5kUnVs
ZSh3aW5kUnVsZSkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV93aW5kUnVsZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Q2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8Q2xpcFBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBjb25zdCBQYXRoIG1f
cGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiAgICAgV2luZFJ1bGUgbV93aW5kUnVs
ZTsKIH07CiAKQEAgLTEyNDIsNyArODg2LDcgQEAgdm9pZCBDbGlwUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxDbGlwUGF0aD4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwpAQCAtMTI1NCwzMCAr
ODk4LDM1IEBAIE9wdGlvbmFsPFJlZjxDbGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICBpZiAoIXdpbmRSdWxlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIENsaXBQYXRoOjpjcmVhdGUoKnBhdGgsICp3aW5kUnVsZSk7Cisg
ICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpLCAqd2luZFJ1bGUgfX07CiB9CiAKLWNsYXNzIENs
aXBUb0RyYXdpbmdDb21tYW5kcyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBUb0RyYXdpbmdD
b21tYW5kcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgICAgIDogbV9kZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKKyAg
ICAgICAgLCBtX2RyYXdpbmdDb21tYW5kcyhXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoZGVz
dGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsKLQogICAgIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRyYXdpbmdDb21tYW5kcygpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd2luZ0NvbW1hbmRzOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDbGlw
VG9EcmF3aW5nQ29tbWFuZHM+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIENvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fZGVzdGlu
YXRpb247CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiAgICAgRGlzcGxheUxpc3QgbV9k
cmF3aW5nQ29tbWFuZHM7CkBAIC0xMjg4LDExICs5MzcsMTEgQEAgdm9pZCBDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIg
PDwgbV9kZXN0aW5hdGlvbjsKICAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsKLSAgICBlbmNv
ZGVyIDw8IG1fZHJhd2luZ0NvbW1hbmRzOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB3YXkg
dG8gZW5jb2RlIGluLW1lbW9yeSBkaXNwbGF5IGxpc3RzLgogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IENsaXBUb0RyYXdp
bmdDb21tYW5kczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxDbGlwVG9EcmF3
aW5nQ29tbWFuZHM+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsKICAgICBkZWNvZGVy
ID4+IGRlc3RpbmF0aW9uOwpAQCAtMTMwNCwyNyArOTUzLDE2IEBAIE9wdGlvbmFsPFJlZjxDbGlw
VG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVy
JiBkZWNvCiAgICAgaWYgKCFjb2xvclNwYWNlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IGRyYXdpbmdDb21tYW5kczsKLSAgICBkZWNv
ZGVyID4+IGRyYXdpbmdDb21tYW5kczsKLSAgICBpZiAoIWRyYXdpbmdDb21tYW5kcykKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6OmNyZWF0ZSgqZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKCpkcmF3aW5nQ29t
bWFuZHMpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGRlY29kZSBpbi1tZW1v
cnkgZGlzcGxheSBsaXN0cy4KKyAgICBEaXNwbGF5TGlzdCBkcmF3aW5nQ29tbWFuZHM7CisgICAg
cmV0dXJuIHt7ICpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2luZ0NvbW1h
bmRzKSB9fTsKIH0KIAotY2xhc3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3R2x5cGhzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNy
ZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgZ2x5
cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwg
VmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZlY3RvcjxHbHlwaEJ1ZmZl
ckFkdmFuY2UsIDEyOD4mJiBhZHZhbmNlcywgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIFdURk1vdmUoZ2x5cGhzKSwgV1RGTW92ZShh
ZHZhbmNlcyksIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSk7Ci0gICAgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0dseXBocygpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0dseXBoczsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxB
bmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CiAKQEAgLTEzMzMsMjEgKzk3
MSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4m
IGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ds
eXBocz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKICAgICBEcmF3R2x5cGhzKGNvbnN0
IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25zdCBGb250Jiwg
VmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiwgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5j
ZSwgMTI4PiYmLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUpOwogCi0gICAgdm9pZCBjb21wdXRlQm91bmRzKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kczsgfQogCitwcml2YXRlOgorICAgIHZvaWQgY29tcHV0ZUJvdW5k
cygpOwogICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSBjb25zdDsKIAotICAg
IFJlZjxGb250PiBtX2ZvbnQ7CisgICAgUmVmUHRyPEZvbnQ+IG1fZm9udDsKICAgICBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsKICAgICBWZWN0b3I8R2x5cGhCdWZmZXJB
ZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7CiAgICAgRmxvYXRSZWN0IG1fYm91bmRzOwpAQCAtMTM1
OCw3ICs5OTYsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgRHJh
d0dseXBoczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8
PCBtX2ZvbnQ7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ZvbnQpOwogICAgIGVuY29kZXIg
PDwgbV9nbHlwaHM7CiAgICAgZW5jb2RlciA8PCBtX2FkdmFuY2VzOwogICAgIGVuY29kZXIgPDwg
bV9sb2NhbEFuY2hvcjsKQEAgLTEzNjYsNyArMTAwNCw3IEBAIHZvaWQgRHJhd0dseXBoczo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8RHJhd0dseXBocz4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVmPEZvbnQ+PiBmb250OwogICAgIGRlY29kZXIg
Pj4gZm9udDsKQEAgLTEzOTYsMzIgKzEwMzQsMzUgQEAgT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+
PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIXNtb290aGlu
Z01vZGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ds
eXBoczo6Y3JlYXRlKGZvbnQtPmdldCgpLCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZh
bmNlcyksICpsb2NhbEFuY2hvciwgKnNtb290aGluZ01vZGUpOworICAgIHJldHVybiB7eyBmb250
LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAqbG9jYWxBbmNo
b3IsICpzbW9vdGhpbmdNb2RlIH19OwogfQotCi1jbGFzcyBEcmF3SW1hZ2UgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERy
YXdJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBp
bWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkRyYXdJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2ltYWdlKGltYWdl
KQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAgICwgbV9zb3Vy
Y2Uoc291cmNlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGlu
Z09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ltYWdlKCk7Ci0KICAgICBjb25z
dCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgRmxv
YXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgRmxvYXRSZWN0
IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCiAgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RHJhd0ltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFn
ZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRv
IHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxvYXRS
ZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAtMTQ0MSw3ICsx
MDgyLDcgQEAgdm9pZCBEcmF3SW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERy
YXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3SW1hZ2U+IERy
YXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VI
YW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xNDYz
LDE3ICsxMTA0LDE0IEBAIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ltYWdlOjpjcmVhdGUo
KmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1hZ2VQYWludGlu
Z09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRp
b24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd1Rp
bGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1RpbGVkSW1hZ2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3VGlsZWRJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7
Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkSW1hZ2UoKTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdU
aWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKICAg
ICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAg
ICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQpAQCAtMTQ4
MiwxNiArMTEyMCwyNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHRpbGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV90aWxlU2l6ZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgRHJh
d1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwgbV9kZXN0
aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAg
ICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAgICAgLCBtX3NwYWNpbmcoc3BhY2luZykKKyAg
ICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAg
IHsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRJbWFnZT4g
ZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9p
bWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25z
IHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxv
YXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRQb2ludCBtX3NvdXJjZTsKQEAgLTE1MTQs
NyArMTE2MSw3IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdU
aWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVj
b2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE1NDYsMzIgKzExOTMsMzkgQEAgT3B0aW9uYWw8UmVm
PERyYXdUaWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUt
PmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNpbmcsICppbWFn
ZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpk
ZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdlUGFpbnRpbmdP
cHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwgbV9kZXN0aW5hdGlv
bihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV90
aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQorICAgICAgICAsIG1faFJ1bGUoaFJ1bGUp
CisgICAgICAgICwgbV92UnVsZSh2UnVsZSkKKyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZFNjYWxlZEltYWdlKCk7
Ci0KICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgp
OyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAg
ICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJh
d1RpbGVkU2NhbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IGRlY29kZShEZWNv
ZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPElt
YWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFu
aW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4K
ICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBA
IC0xNTk2LDcgKzEyNTAsNyBAQCB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4+IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBEcmF3
VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7
CkBAIC0xNjMxLDMzICsxMjg1LDM3IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4+IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgaWYg
KCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1h
Z2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxl
LCAqaW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmlt
YWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVs
ZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3SW1hZ2VCdWZmZXIg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlQnVmZmVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZUJ1ZmZlcj4gY3JlYXRlKFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCisgICAgICAgIDogbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIocmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgICAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRl
c3RSZWN0KQorICAgICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdl
QnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZGVzdGluYXRpb24sIHNvdXJjZSwg
b3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdJbWFn
ZUJ1ZmZlcigpOwotCiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyOyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVj
dDsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uUmVjdDsgfQogICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX29wdGlvbnM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3SW1hZ2VCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
OwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKICAgICBGbG9hdFJlY3QgbV9zcmNS
ZWN0OwpAQCAtMTY3NCw3ICsxMzMyLDcgQEAgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3SW1hZ2VCdWZmZXI+IERyYXdJbWFnZUJ1ZmZlcjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyPiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAgZGVjb2RlciA+
PiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CkBAIC0xNjk2LDMxICsxMzU0LDI5IEBAIE9w
dGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSgqcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpvcHRpb25zKTsKKyAgICBy
ZXR1cm4ge3sgKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKmRlc3RpbmF0aW9uLCAqc291
cmNlLCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK2NsYXNzIERyYXdOYXRpdmVJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05hdGl2ZUltYWdl
KGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TmF0aXZlSW1hZ2UoKTsKLQotICAgIEZsb2F0
UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBGbG9hdFJlY3Qg
ZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KKyAg
ICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBj
b25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CiAKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3TmF0aXZl
SW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0
ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJp
dmF0ZToKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ltYWdl
U2l6ZTsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CkBAIC0xNzM5LDcgKzEzOTUs
NyBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd05hdGl2ZUlt
YWdlPj4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PERyYXdOYXRpdmVJbWFnZT4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxOYXRpdmVJbWFnZVB0cj4gaW1hZ2U7CiAgICAgZGVjb2RlciA+
PiBpbWFnZTsKQEAgLTE3NjYsMTcgKzE0MjIsMTYgQEAgT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJ
bWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERy
YXdOYXRpdmVJbWFnZTo6Y3JlYXRlKCppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVj
dCwgKnNyY1JlY3QsICpvcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlLCAqaW1hZ2VTaXpl
LCAqZGVzdGluYXRpb25SZWN0LCAqc3JjUmVjdCwgKm9wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERy
YXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXR0ZXJuIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdHRl
cm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1BhdHRl
cm4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIGNvbnN0IEltYWdl
JiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm5U
cmFuc2Zvcm07IH0KQEAgLTE3ODUsMTYgKzE0NDAsMTUgQEAgcHVibGljOgogICAgIEZsb2F0UG9p
bnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9CiAgICAgRmxvYXRTaXplIHNwYWNp
bmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxE
cmF3UGF0dGVybj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJl
ZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVp
ciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFi
bGUuCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAgICBGbG9hdFJl
Y3QgbV90aWxlUmVjdDsKQEAgLTE4MTksNyArMTQ3Myw3IEBAIHZvaWQgRHJhd1BhdHRlcm46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1BhdHRlcm4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7
CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE4NTYsMTgyICsxNTEwLDEwMCBAQCBP
cHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdQYXR0ZXJuOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRl
c3RpbmF0aW9uLCAqdGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2UsICpzcGFjaW5n
LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5h
dGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywgKm9w
dGlvbnMgfX07CiB9CiAKLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhl
IHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KLWNsYXNz
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgQmVn
aW5UcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPiBjcmVhdGUoZmxvYXQgb3BhY2l0eSkKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOyAvLyBJcyBkcmF3aW5nIGl0ZW0g
YmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkg
dGhlIGNsaXAgYm91bmRzLgorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQorICAgICAgICA6IG1fb3BhY2l0eShvcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lMYXllcigpOwot
CiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5OwogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX29wYWNpdHk7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcj4+IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBvcGFjaXR5OwotICAgIGRlY29kZXIgPj4gb3Bh
Y2l0eTsKLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCpvcGFjaXR5KTsKLX0K
LQotY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RW5kVHJh
bnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUoRW5jb2RlciYp
IGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RW5k
VHJhbnNwYXJlbmN5TGF5ZXI+PiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKERlY29kZXIm
KQotewotICAgIHJldHVybiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCk7Ci19Ci0KLWNs
YXNzIERyYXdSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdSZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3UmVjdChGbG9hdFJlY3QgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fYm9yZGVy
VGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGJvcmRlclRoaWNrbmVzcygpIGNv
bnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNzOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UmVjdD4+IGRlY29kZShEZWNvZGVyJik7
Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9yZWN0OwogICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOwogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgRHJhd1JlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9ib3JkZXJUaGlj
a25lc3M7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1Jl
Y3Q+PiBEcmF3UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9hdD4gYm9yZGVy
VGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4gYm9yZGVyVGhpY2tuZXNzOwotICAgIGlmICghYm9y
ZGVyVGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IERyYXdSZWN0OjpjcmVhdGUoKnJlY3QsICpib3JkZXJUaGlja25lc3MpOwotfQotCi1jbGFzcyBE
cmF3TGluZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3TGluZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0xpbmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0xpbmUoRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0
UG9pbnQgcG9pbnQyKQorICAgICAgICA6IG1fcG9pbnQxKHBvaW50MSkKKyAgICAgICAgLCBtX3Bv
aW50Mihwb2ludDIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TGlu
ZShwb2ludDEsIHBvaW50MikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkRyYXdMaW5lKCk7Ci0KICAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsgcmV0dXJuIG1f
cG9pbnQxOyB9CiAgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVybiBtX3BvaW50
MjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RHJhd0xpbmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3BvaW50MTsK
ICAgICBGbG9hdFBvaW50IG1fcG9pbnQyOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgRHJhd0xpbmU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9wb2ludDE7Ci0gICAgZW5jb2RlciA8PCBtX3BvaW50MjsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZT4+IERyYXdMaW5lOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDE7
Ci0gICAgZGVjb2RlciA+PiBwb2ludDE7Ci0gICAgaWYgKCFwb2ludDEpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2ludDI7Ci0gICAg
ZGVjb2RlciA+PiBwb2ludDI7Ci0gICAgaWYgKCFwb2ludDIpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQxLCAqcG9pbnQy
KTsKLX0KLQotY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3TGluZXNGb3JUZXh0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdMaW5l
c0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0aW9uLCBsb2Nh
bEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcykpOwotICAg
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRy
YXdMaW5lc0ZvclRleHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9j
YXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpOwog
CiAgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRp
b24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQogICAgIGNvbnN0IEZsb2F0
UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9jYXRpb247IH0K
QEAgLTIwNDIsMTYgKzE2MTQsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcmludGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICBib29sIGRvdWJsZUxpbmVzKCkgY29uc3Qg
eyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IGRlY29kZShEZWNvZGVyJik7
Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4dD4gZGVjb2Rl
KERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYmxvY2tMb2NhdGlvbjsK
ICAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKICAgICBEYXNoQXJyYXkgbV93aWR0aHM7CkBA
IC0yMDcyLDcgKzE2NDMsNyBAQCB2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IERyYXdMaW5lc0ZvclRleHQ6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGJsb2Nr
TG9jYXRpb247CiAgICAgZGVjb2RlciA+PiBibG9ja0xvY2F0aW9uOwpAQCAtMjEwNCwxMTkgKzE2
NzUsODMgQEAgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGluZXNGb3JUZXh0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRvdWJsZUxpbmVzKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdMaW5lc0ZvclRleHQ6OmNy
ZWF0ZSgqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAq
cHJpbnRpbmcsICpkb3VibGVMaW5lcyk7CisgICAgcmV0dXJuIHt7ICpibG9ja0xvY2F0aW9uLCAq
bG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMsICpwcmludGluZywgKmRvdWJsZUxpbmVz
IH19OwogfQogCi1jbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK2NsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBt
X3N0eWxlKHN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKTsKLQogICAgIEZsb2F0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OworCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUpOworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsKK307CisKK2NsYXNzIERyYXdFbGxpcHNlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRy
YXdFbGxpcHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVj
dCkKKyAgICB7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgbV9zdHlsZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9zdHlsZTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
Pj4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25h
bDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gc3R5bGU7Ci0gICAgZGVjb2RlciA+PiBzdHlsZTsK
LSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZSgqcmVjdCwgKnN0eWxlKTsKLX0K
LQotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1Bh
dGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpEcmF3UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgo
cGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdFbGxpcHNlKHJl
Y3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+RHJhd0VsbGlwc2UoKTsKLQotICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IGRlY29k
ZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAg
ICBGbG9hdFJlY3QgbV9yZWN0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
RHJhd0VsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PERyYXdFbGxpcHNlPj4gRHJhd0VsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAg
aWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIERy
YXdFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4gY3JlYXRlKGNv
bnN0IFBhdGgmIHBhdGgpCisgICAgRHJhd1BhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9w
YXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3UGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJh
d1BhdGgoKTsKLQogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERy
YXdQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBEcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGgu
ZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJp
dmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBA
IC0yMjI2LDI0ICsxNzYxLDM3IEBAIHZvaWQgRHJhd1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERy
YXdQYXRoPj4gRHJhd1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJh
d1BhdGg+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1BhdGg6OmNyZWF0ZSgq
cGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBEcmF3
Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5n
UGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChQYXRoJiYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0
aCkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgICAgICwgbV9jb2xvcihjb2xvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ZvY3VzUmluZ1BhdGgoKTsK
KyAgICBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAg
LCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBt
X2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3dpZHRoOyB9CkBAIC0yMjUxLDE2ICsxNzk5LDE1IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb2xv
ciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PERyYXdGb2N1c1JpbmdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiAgICAg
ZmxvYXQgbV93aWR0aDsKICAgICBmbG9hdCBtX29mZnNldDsKICAgICBDb2xvciBtX2NvbG9yOwpA
QCAtMjI3Niw3ICsxODIzLDcgQEAgdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gRHJhd0ZvY3VzUmluZ1Bh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7
CiAgICAgZGVjb2RlciA+PiBwYXRoOwpAQCAtMjI5OCwzMyArMTg0NSwzMSBAQCBPcHRpb25hbDxS
ZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2lkdGgsICpv
ZmZzZXQsICpjb2xvcik7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpLCAqd2lkdGgsICpv
ZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0
cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAgIFdFQkNPUkVfRVhQT1JUIERy
YXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CiAKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sb3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8RHJhd0ZvY3VzUmluZ1JlY3RzPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgog
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7CiAgICAgZmxvYXQgbV93aWR0aDsKICAgICBm
bG9hdCBtX29mZnNldDsKQEAgLTIzNDEsNyArMTg4Niw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1Jl
Y3RzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBEcmF3Rm9jdXNSaW5n
UmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1Jl
Y3RzPiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPFZlY3RvcjxGbG9hdFJlY3Q+PiByZWN0czsKICAgICBkZWNvZGVyID4+IHJlY3Rz
OwpAQCAtMjM2Myw3MSArMTkwOCw1NSBAQCBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3Rz
Pj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdG
b2N1c1JpbmdSZWN0czo6Y3JlYXRlKCpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOwor
ICAgIHJldHVybiB7eyAqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yIH19OwogfQogCi1j
bGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVjdCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkZpbGxSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdCgpOworICAgIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBGaWxsUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBGaWxsUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsK
LSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gRmlsbFJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLS8vIEZJWE1FOiBNYWtlIHRoZXNlIGlu
aGVyaXQgZnJvbSBGaWxsUmVjdCBwcm9wZXIuCi1jbGFzcyBGaWxsUmVjdFdpdGhDb2xvciA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVjdFdpdGhDb2xvciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aENvbG9yKCk7Ci0KICAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoQ29sb3I+IGRlY29kZShEZWNvZGVy
Jik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9y
OwogfTsKQEAgLTI0NDAsNyArMTk2OSw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoQ29sb3I+IEZpbGxSZWN0
V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjQ1MiwyOSArMTk4MSwyOCBA
QCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKCpyZWN0
LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yIH19OwogfQogCi1jbGFzcyBG
aWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVj
dFdpdGhHcmFkaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFk
aWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQo
cmVjdCwgZ3JhZGllbnQpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhH
cmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwogCi0gICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aEdyYWRpZW50KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50Jik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGRlY29kZShEZWNv
ZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBtdXRhYmxlIFJl
ZjxHcmFkaWVudD4gbV9ncmFkaWVudDsgLy8gRklYTUU6IE1ha2UgdGhpcyBub3QgbXV0YWJsZQog
fTsKQEAgLTI0ODcsNyArMjAxNSw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoR3JhZGllbnQ+
IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjQ5OCwz
MiArMjAyNiwzNyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBGaWxsUmVj
dFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIGlmICghZ3JhZGllbnQp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRo
R3JhZGllbnQ6OmNyZWF0ZSgqcmVjdCwgZ3JhZGllbnQtPmdldCgpKTsKKyAgICByZXR1cm4ge3sg
KnJlY3QsIGdyYWRpZW50LT5nZXQoKSB9fTsKIH0KIAotY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xv
cihjb2xvcikKKyAgICAgICAgLCBtX29wKG9wKQorICAgICAgICAsIG1fYmxlbmRNb2RlKGJsZW5k
TW9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxDb21wb3NpdGVk
UmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxDb21wb3NpdGVkUmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAg
IEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKICAgICBDb21wb3NpdGVPcGVy
YXRvciBtX29wOwpAQCAtMjU0MCw3ICsyMDczLDcgQEAgdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxDb21wb3NpdGVkUmVjdD4+IEZpbGxDb21wb3NpdGVkUmVj
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+
IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI1NjIsMzEg
KzIwOTUsMzUgQEAgT3B0aW9uYWw8UmVmPEZpbGxDb21wb3NpdGVkUmVjdD4+IEZpbGxDb21wb3Np
dGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFibGVuZE1vZGUpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbENvbXBvc2l0ZWRS
ZWN0OjpjcmVhdGUoKnJlY3QsICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlKTsKKyAgICByZXR1cm4g
e3sgKnJlY3QsICpjb2xvciwgKm9wLCAqYmxlbmRNb2RlIH19OwogfQogCi1jbGFzcyBGaWxsUm91
bmRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJvdW5kZWRSZWN0IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSb3VuZGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBtX3JlY3Qo
cmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fYmxlbmRNb2RlKGJs
ZW5kTW9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSb3VuZGVk
UmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RmlsbFJvdW5kZWRSZWN0KCk7Ci0KICAgICBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICBCbGVuZE1vZGUgYmxl
bmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVjdD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PEZpbGxSb3VuZGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJiwgQmxlbmRNb2RlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQogCitwcml2YXRlOgogICAgIEZs
b2F0Um91bmRlZFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQmxlbmRNb2Rl
IG1fYmxlbmRNb2RlOwpAQCAtMjYwMSw3ICsyMTM4LDcgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVjdD4+IEZpbGxSb3VuZGVkUmVjdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IEZpbGxSb3Vu
ZGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRS
b3VuZGVkUmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNjE4LDMxICsyMTU1
LDM1IEBAIE9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSb3VuZGVkUmVjdDo6Y3JlYXRlKCpy
ZWN0LCAqY29sb3IsICpibGVuZE1vZGUpOworICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAq
YmxlbmRNb2RlIH19OwogfQogCi1jbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3QpCisgICAgICAgICwgbV9jb2xvcihj
b2xvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpOwotCiAgICAg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
b3VuZGVkSG9sZVJlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JvdW5kZWRIb2xlUmVjdDsKICAgICBDb2xv
ciBtX2NvbG9yOwpAQCAtMjY1Nyw3ICsyMTk4LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZT4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNv
ZGVyID4+IHJlY3Q7CkBAIC0yNjc0LDc0ICsyMjE1LDYzIEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2Rl
ciYKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUoKnJlY3QsICpyb3VuZGVkSG9s
ZVJlY3QsICpjb2xvcik7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAq
Y29sb3IgfX07CiB9CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgRmls
bElubGluZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbElubGluZVBhdGgg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbElubGluZVBhdGg+IGNyZWF0ZShjb25zdCBJ
bmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRo
RGF0YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CiAg
ICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbElubGluZVBhdGgoKTsKLQog
ICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20obV9wYXRoRGF0YSk7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxJ
bmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxJbmxpbmVQ
YXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gcGF0aCgp
LmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBw
YXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERh
dGEgbV9wYXRoRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxJ
bmxpbmVQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fcGF0aERhdGE7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RmlsbElubGluZVBhdGg+PiBGaWxsSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAgIGRlY29k
ZXIgPj4gcGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKFdURk1vdmUoKnBh
dGhEYXRhKSk7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xh
c3MgRmlsbFBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFBhdGggewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFBh
dGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxQ
YXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFBhdGgocGF0aCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxQYXRoKCk7CisgICAgRmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQogCiAg
ICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFBhdGg+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxGaWxsUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBGaWxsUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVj
dCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRp
bmdSZWN0KCk7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRo
IG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0yNzUxLDkwICsyMjgx
LDY1IEBAIHZvaWQgRmlsbFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gRmlsbFBh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFBhdGg+IEZpbGxQYXRo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwog
ICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFBhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0
dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBGaWxsRWxsaXBzZSA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsRWxsaXBzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGaWxsRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxFbGxpcHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsRWxsaXBzZSgpOwotCiAgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsRWxsaXBzZTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBGaWxsRWxsaXBz
ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBy
ZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRmlsbEVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7
Ci19Ci0KLWNsYXNzIFB1dEltYWdlRGF0YSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQ
dXRJbWFnZURhdGEgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVh
dGUoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBz
cmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9Ci0gICAgc3RhdGljIFJlZjxQ
dXRJbWFnZURhdGE+IGNyZWF0ZShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBS
ZWY8SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBXVEZNb3ZlKGltYWdlRGF0YSksIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkp
OwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlB1dEltYWdlRGF0YTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UHV0SW1hZ2VEYXRhKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CiAK
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4g
bV9pbnB1dEZvcm1hdDsgfQotICAgIEltYWdlRGF0YSYgaW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZURhdGE7IH0KKyAgICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0
dXJuICptX2ltYWdlRGF0YTsgfQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3JjUmVjdDsgfQogICAgIEludFBvaW50IGRlc3RQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdFBvaW50OyB9CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KCkgY29u
c3QgeyByZXR1cm4gbV9kZXN0Rm9ybWF0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiB7eyBtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNp
emUoKSB9fTsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QobV9kZXN0UG9pbnQsIG1fc3JjUmVjdC5zaXpl
KCkpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxQdXRJ
bWFnZURhdGE+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgSW50UmVjdCBtX3Ny
Y1JlY3Q7CiAgICAgSW50UG9pbnQgbV9kZXN0UG9pbnQ7Ci0gICAgUmVmPEltYWdlRGF0YT4gbV9p
bWFnZURhdGE7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9pbWFnZURhdGE7CiAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBtX2lucHV0Rm9ybWF0OwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gbV9kZXN0Rm9ybWF0OwogfTsKQEAgLTI4NDMsMTQgKzIzNDgsMTQgQEAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KIHZvaWQgUHV0SW1hZ2VEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1faW5wdXRGb3JtYXQ7Ci0gICAgZW5jb2RlciA8PCBt
X2ltYWdlRGF0YTsKKyAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1faW1hZ2VEYXRhKTsKICAgICBl
bmNvZGVyIDw8IG1fc3JjUmVjdDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdFBvaW50OwogICAgIGVu
Y29kZXIgPDwgbV9kZXN0Rm9ybWF0OwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitPcHRpb25hbDxQdXRJbWFnZURhdGE+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4gaW5w
dXRGb3JtYXQ7CiAgICAgT3B0aW9uYWw8UmVmPEltYWdlRGF0YT4+IGltYWdlRGF0YTsKQEAgLTI4
NzgsMTY5ICsyMzgzLDEwOSBAQCBPcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1hZ2VE
YXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRlc3RGb3JtYXQpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gUHV0SW1hZ2VEYXRhOjpjcmVh
dGUoKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVjdCwgKmRlc3RQb2lu
dCwgKmRlc3RGb3JtYXQpOworICAgIHJldHVybiB7eyAqaW5wdXRGb3JtYXQsIFdURk1vdmUoKmlt
YWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCB9fTsKIH0KIAotY2xh
c3MgUGFpbnRGcmFtZUZvck1lZGlhIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFBhaW50
RnJhbWVGb3JNZWRpYSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVk
aWE+IGNyZWF0ZShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6UGFpbnRG
cmFtZUZvck1lZGlhOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflBhaW50RnJhbWVGb3JNZWRpYSgpOworICAgIFBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pOwogCiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb247IH0KICAgICBNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UGFpbnRGcmFtZUZvck1lZGlhPj4gZGVjb2RlKERl
Y29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFBhaW50
RnJhbWVGb3JNZWRpYT4gY3JlYXRlKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbik7Ci0KLSAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKLSAgICBQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4geyBtX2Rlc3RpbmF0aW9uIH07IH0KIAorcHJpdmF0ZToKICAgICBNZWRpYVBsYXll
cklkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwog
fTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1faWRlbnRp
ZmllcjsKLSAgICBlbmNvZGVyIDw8IG1fZGVzdGluYXRpb247Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UGFpbnRGcmFtZUZvck1lZGlhPj4gUGFpbnRGcmFtZUZv
ck1lZGlhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxNZWRpYVBs
YXllcklkZW50aWZpZXI+IGlkZW50aWZpZXI7Ci0gICAgZGVjb2RlciA+PiBpZGVudGlmaWVyOwot
ICAgIGlmICghaWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247Ci0gICAgZGVjb2RlciA+PiBkZXN0aW5h
dGlvbjsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKCppZGVudGlmaWVyLCAq
ZGVzdGluYXRpb24pOwotfQotCi1jbGFzcyBTdHJva2VSZWN0IDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIFN0cm9rZVJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorICAgICAgICA6IG1fcmVj
dChyZWN0KQorICAgICAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUmVjdCgpOwotCiAgICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBsaW5lV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVXaWR0aDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlUmVjdD4+IGRlY29kZShEZWNvZGVy
Jik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRSZWN0IG1fcmVjdDsKICAgICBmbG9hdCBtX2xpbmVXaWR0aDsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZVJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9saW5l
V2lkdGg7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tl
UmVjdD4+IFN0cm9rZVJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IGxp
bmVXaWR0aDsKLSAgICBkZWNvZGVyID4+IGxpbmVXaWR0aDsKLSAgICBpZiAoIWxpbmVXaWR0aCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VSZWN0Ojpj
cmVhdGUoKnJlY3QsICpsaW5lV2lkdGgpOwotfQotCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAKLWNsYXNzIFN0cm9rZUlubGluZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgU3Ryb2tlSW5saW5lUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VJbmxp
bmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0
aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VJ
bmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICAgICAgOiBtX3Bh
dGhEYXRhKHBhdGhEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ry
b2tlSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflN0cm9rZUlubGluZVBhdGgoKTsKLQogICAgIFBhdGggcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIFBhdGg6OmZyb20obV9wYXRoRGF0YSk7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZUlubGluZVBhdGg+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZUlubGluZVBhdGgoY29u
c3QgSW5saW5lUGF0aERhdGEmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToK
ICAgICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZUlubGluZVBhdGg+PiBTdHJva2VJbmxpbmVQYXRo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0
YT4gcGF0aERhdGE7Ci0gICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKLSAgICBpZiAoIXBhdGhEYXRh
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZUlubGlu
ZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAjZW5kaWYgLy8gRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgU3Ryb2tlUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VQ
YXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZVBhdGgoUGF0aCYmIHBhdGgpCisgICAg
ICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHJva2VQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5TdHJva2VQYXRoKCk7CisgICAgU3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
ICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VQYXRoPj4gZGVjb2RlKERlY29kZXImKTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U3Ryb2tlUGF0aD4g
ZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIGNvbnN0IFBh
dGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+CkBAIC0zMDUwLDcyMSArMjQ5NSwxMTUgQEAgdm9pZCBTdHJva2VQYXRoOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTdHJva2VQYXRoPj4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitPcHRpb25hbDxTdHJva2VQYXRoPiBTdHJva2VQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4g
cGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gU3Ryb2tlUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92
ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIFN0cm9rZUVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgU3Ryb2tlRWxsaXBzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJv
a2VFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUVsbGlwc2UocmVjdCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIH5TdHJva2VFbGxpcHNlKCk7CisgICAgY29uc3QgRmxvYXRSZWN0
JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTdHJva2VFbGxpcHNlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VFbGxpcHNlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VFbGxpcHNlPj4gU3Ry
b2tlRWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlRWxsaXBzZTo6Y3Jl
YXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xlYXJSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIENsZWFyUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhclJlY3Q+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGVhclJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
KyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENsZWFyUmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+Q2xlYXJSZWN0KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGVhclJlY3Q+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbV9y
ZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xlYXJSZWN0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGVhclJlY3Q+PiBDbGVh
clJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsZWFyUmVjdDo6Y3JlYXRlKCpyZWN0
KTsKLX0KLQogI2lmIFVTRShDRykKLWNsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiA6IHB1YmxpYyBJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4gY3JlYXRl
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5U3Ryb2tlUGF0dGVy
bik7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+QXBwbHlTdHJva2VQYXR0
ZXJuKCk7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxBcHBseVN0cm9rZVBhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYpOworY2xhc3MgQXBwbHlTdHJv
a2VQYXR0ZXJuIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5
U3Ryb2tlUGF0dGVybigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6ZW5jb2RlKEVuY29k
ZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PEFwcGx5U3Ryb2tlUGF0dGVybj4+IEFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKERlY29kZXIm
KQotewotICAgIHJldHVybiBBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpOwotfQotCi1jbGFz
cyBBcHBseUZpbGxQYXR0ZXJuIDogcHVibGljIEl0ZW0geworY2xhc3MgQXBwbHlGaWxsUGF0dGVy
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseUZpbGxQYXR0ZXJuPiBjcmVhdGUoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlGaWxsUGF0dGVybik7Ci0g
ICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+QXBwbHlGaWxsUGF0dGVybigpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlG
aWxsUGF0dGVybjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlGaWxs
UGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseUZpbGxQYXR0
ZXJuKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RmlsbFBhdHRlcm46OmVuY29kZShF
bmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKERlY29kZXIm
KQotewotICAgIHJldHVybiBBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUoKTsKLX0KICNlbmRpZgog
Ci1jbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgQXBw
bHlEZXZpY2VTY2FsZUZhY3RvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseURldmlj
ZVNjYWxlRmFjdG9yPiBjcmVhdGUoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9y
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBBcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgICAgICA6IG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBs
eURldmljZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+QXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpOwotCiAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlRmFjdG9yOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxBcHBseURldmljZVNjYWxlRmFj
dG9yPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3NjYWxlRmFjdG9yOworcHJpdmF0ZToKKyAgICBm
bG9hdCBtX3NjYWxlRmFjdG9yIHsgMSB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3NjYWxlRmFjdG9yOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+PiBBcHBseURl
dmljZVNjYWxlRmFjdG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25h
bDxmbG9hdD4gc2NhbGVGYWN0b3I7Ci0gICAgZGVjb2RlciA+PiBzY2FsZUZhY3RvcjsKLSAgICBp
ZiAoIXNjYWxlRmFjdG9yKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZSgqc2NhbGVGYWN0b3IpOwotfQotCi0K
LVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBJdGVt
Jik7Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEl0ZW06OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90eXBlOwotCi0gICAgc3dpdGNo
IChtX3R5cGUpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFNhdmU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6UmVzdG9yZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSZXN0b3JlPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxUcmFuc2xhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFJv
dGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTY2FsZT4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0Q1RNPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RN
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZp
bGxHcmFkaWVudDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbENvbG9yOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxD
b2xvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVTdHJva2VDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVTdHJv
a2VDb2xvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3M6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3Ryb2tlVGhp
Y2tuZXNzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
YXRlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0YXRlPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
ZXRMaW5lRGFzaD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0Ogot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcE91dD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PENsaXBPdXRUb1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBUb0RyYXdpbmdDb21t
YW5kcz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5
cGhzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdHbHlwaHM+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxEcmF3VGlsZWRJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxE
cmF3VGlsZWRTY2FsZWRJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJh
d0ltYWdlQnVmZmVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TmF0aXZl
SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd1JlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJh
d0xpbmU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UGF0aD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PEZpbGxSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aENvbG9yOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0
aENvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0
aEdyYWRpZW50PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsQ29tcG9z
aXRlZFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVkUmVj
dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PEZpbGxQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxFbGxp
cHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdl
RGF0YToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxQdXRJbWFnZURhdGE+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5s
aW5lUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VQYXRoPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8Q2xlYXJSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNpZiBV
U0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PEFwcGx5RmlsbFBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPEl0ZW0+PiBJdGVtOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDxJdGVtVHlwZT4gaXRlbVR5cGU7Ci0gICAgZGVjb2RlciA+PiBpdGVtVHlwZTsKLSAg
ICBpZiAoIWl0ZW1UeXBlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgc3dp
dGNoICgqaXRlbVR5cGUpIHsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gU2F2ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBS
ZXN0b3JlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gVHJhbnNsYXRl
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Um90YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUm90YXRlOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTY2FsZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IFNldENUTTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHsKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVGaWxs
Q29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFNldElubGluZVN0cm9rZUNvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBTZXRTdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTZXRMaW5lQ2FwOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRMaW5lRGFzaDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0TGluZUpvaW46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gQ2xlYXJTaGFkb3c6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xp
cDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0OjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cE91dFRvUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBPdXRUb1BhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBQYXRoOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdHbHlwaHM6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2U6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdUaWxlZEltYWdlOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3VGls
ZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd1BhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IERyYXdSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3TGluZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBz
ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdFbGxpcHNlOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhDb2xvcjo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBGaWxsSW5saW5lUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRmlsbEVsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBQdXRJbWFnZURhdGE6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBQYWludEZyYW1lRm9yTWVkaWE6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBTdHJva2VJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gU3Ryb2tlUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTdHJva2VFbGxpcHNlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gQ2xlYXJSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEVuZFRyYW5zcGFyZW5jeUxheWVyOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IEFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNj
YWxlRmFjdG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci19CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBJdGVtSGFuZGxlKTsKIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotCi0jZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfRFJBV0lOR0lURU0oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVUeXBlTmFt
ZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbSYgb2JqZWN0KSB7IHJldHVybiBvYmplY3QucHJlZGljYXRlOyB9IFwKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9E
UkFXSU5HSVRFTShEcmF3aW5nSXRlbSwgaXNEcmF3aW5nSXRlbSgpKQotCi0jZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUb1ZhbHVlVHlwZU5hbWUpIFwKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRvVmFsdWVU
eXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbSYgaXRlbSkgeyByZXR1cm4gaXRlbS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpUb1ZhbHVlVHlwZU5hbWU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2F2
ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShSZXN0b3JlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRyYW5zbGF0ZSkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShSb3RhdGUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2NhbGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU2V0Q1RNKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKENvbmNhdGVuYXRlQ1RNKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldElubGluZUZpbGxHcmFkaWVudCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShTZXRJbmxpbmVGaWxsQ29sb3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lU3Ryb2tlQ29sb3IpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3Ryb2tlVGhpY2tuZXNzKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVDYXApCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZURhc2gpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU2V0TGluZUpvaW4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oU2V0TWl0ZXJMaW1pdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGlwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KENsaXBPdXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91
dFRvUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwUGF0
aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwVG9EcmF3aW5n
Q29tbWFuZHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ds
eXBocykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3SW1hZ2Up
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVkSW1hZ2Up
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1RpbGVkU2NhbGVk
SW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdl
QnVmZmVyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdOYXRp
dmVJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0
dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UmVjdCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TGluZXNGb3JUZXh0KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0VsbGlw
c2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdGgpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1BhdGgp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ZvY3VzUmluZ1Jl
Y3RzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0KQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aENvbG9y
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdy
YWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21w
b3NpdGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxs
Um91bmRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpCi0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbElubGluZVBhdGgpCi0jZW5k
aWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUGF0aCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsRWxsaXBzZSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQdXRJbWFnZURhdGEpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUGFpbnRGcmFtZUZvck1lZGlhKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZVJlY3QpCi0jaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU3Ryb2tlSW5saW5lUGF0aCkKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFN0cm9rZVBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oU3Ryb2tlRWxsaXBzZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShDbGVhclJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShFbmRUcmFuc3BhcmVuY3lMYXllcikKLSNpZiBVU0UoQ0cpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlTdHJva2VQYXR0ZXJuKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RmlsbFBhdHRlcm4pCi0j
ZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseURldmlj
ZVNjYWxlRmFjdG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENs
ZWFyU2hhZG93KQotCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCBkMTQyYzM3NzljYjk5M2U3MzcyYmI4Yjg4ODdm
Y2M0Yzc1MmZlOTg5Li45MGViZGU1NWY4OTc5NmE4MTE4NzlkYjA3ODQ4YzA3NGY0NTM4NTc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogCiB2b2lkIFJlY29yZGVyOjpwdXRJbWFnZURhdGEo
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2ViQ29y
ZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKIHsKLSAgICBhcHBlbmRJdGVtKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGE6OmNyZWF0ZShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNS
ZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKKyAgICBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihp
bnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpOwog
fQogCiBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQpAQCAtODcsMzEgKzg3LDMxIEBAIHN0YXRpYyBi
b29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZSYgY2hhCiB2b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQogewogICAgIGlmICghY29udGFpbnNP
bmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMsIGNoYW5nZUZsYWdzKSkgewotICAgICAgICBt
X2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3RhdGU6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUs
IGNoYW5nZUZsYWdzKSk7CisgICAgICAgIGFwcGVuZDxTZXRTdGF0ZT4oY2hhbmdlcy5tX3N0YXRl
LCBjaGFuZ2VGbGFncyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkK
LSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZVN0cm9rZUNvbG9yOjpj
cmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpKTsKKyAgICAgICAg
YXBwZW5kPFNldElubGluZVN0cm9rZUNvbG9yPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3Iu
YXNJbmxpbmUoKSk7CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3Qu
YXBwZW5kSXRlbShTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKSk7CisgICAgICAgIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGNoYW5n
ZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQotICAgICAgICBtX2Rp
c3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUoY2hhbmdlcy5t
X3N0YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVG
aWxsQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSk7CiAKICAgICBp
ZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVu
dENoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxs
R3JhZGllbnQ6OmNyZWF0ZSgqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCkpOworICAgICAg
ICBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFk
aWVudCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OndpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0
ZW0pCit2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQog
ewogICAgIGlmIChtX2RlbGVnYXRlKQotICAgICAgICBtX2RlbGVnYXRlLT53aWxsQXBwZW5kSXRl
bShpdGVtKTsKKyAgICAgICAgbV9kZWxlZ2F0ZS0+d2lsbEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7
CiAKLSAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkKKyAgICBpZiAoaXNEcmF3aW5nSXRlbSh0
eXBlKQogI2lmIFVTRShDRykKLSAgICAgICAgfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkFw
cGx5U3Ryb2tlUGF0dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQ
YXR0ZXJuCisgICAgICAgIHx8IHR5cGUgPT0gSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybiB8
fCB0eXBlID09IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4KICNlbmRpZgogICAgICkgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2VzID0gY3VycmVu
dFN0YXRlKCkuc3RhdGVDaGFuZ2U7CkBAIC0xMjYsMTAgKzEyNiwxMCBAQCB2b2lkIFJlY29yZGVy
Ojp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQogICAgIH0KIH0KIAotdm9pZCBSZWNv
cmRlcjo6ZGlkQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQordm9pZCBSZWNvcmRlcjo6ZGlk
QXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQogewogICAgIGlmIChtX2RlbGVnYXRlKQot
ICAgICAgICBtX2RlbGVnYXRlLT5kaWRBcHBlbmRJdGVtKGl0ZW0pOworICAgICAgICBtX2RlbGVn
YXRlLT5kaWRBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjp1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQpAQCAtMTM5LDI3ICsxMzksMjcgQEAgdm9p
ZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGEKIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQogewot
ICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8Q2xlYXJT
aGFkb3c+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2Fw
KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3JlYXRlKGxpbmVDYXApKTsKKyAgICBh
cHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAg
IGFwcGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsK
KyAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGRhc2hBcnJheSwgZGFzaE9mZnNldCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGFwcGVu
ZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworICAgIGFwcGVuZDxTZXRMaW5l
Sm9pbj4obGluZUpvaW4pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0
ZXJMaW1pdCkpOworICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKQEAgLTE2OSwxOSArMTY5LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpCiAKIEltYWdl
RHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6
OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdU
aWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBz
cGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3VGlsZWRJbWFn
ZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBh
aW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwog
fQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNj
YWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgYXBw
ZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGls
ZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKICAgICBy
ZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKQEAgLTE5MCwyMyArMTkwLDIz
IEBAIGJvb2wgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX2Rl
bGVnYXRlLT5sb2NrUmVtb3RlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGlt
YWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdO
YXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2
ZUltYWdlPihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXR0ZXJuOjpjcmVhdGUoaW1h
Z2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgYXBwZW5kSXRlbShTYXZlOjpjcmVhdGUoKSk7
CisgICAgYXBwZW5kPFNhdmU+KCk7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3Rh
Y2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKIH0KIApAQCAtMjIxLDI1ICsyMjEsMjUgQEAgdm9p
ZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3Rl
ZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBp
dGVtcy4KICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRG
b3JEcmF3aW5nOwogCi0gICAgYXBwZW5kSXRlbShSZXN0b3JlOjpjcmVhdGUoKSk7CisgICAgYXBw
ZW5kPFJlc3RvcmU+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBhcHBl
bmRJdGVtKFRyYW5zbGF0ZTo6Y3JlYXRlKHgsIHkpKTsKKyAgICBhcHBlbmQ8VHJhbnNsYXRlPih4
LCB5KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQog
ewogICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgYXBwZW5k
SXRlbShSb3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykpOworICAgIGFwcGVuZDxSb3RhdGU+
KGFuZ2xlSW5SYWRpYW5zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIGFwcGVu
ZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7CisgICAgYXBwZW5kPFNjYWxlPihzaXplKTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKICAgICBjdXJy
ZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBlbmRJdGVtKENvbmNhdGVu
YXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPENvbmNhdGVuYXRlQ1RNPih0
cmFuc2Zvcm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7
Ci0gICAgYXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFuc2Zvcm0pKTsKKyAgICBhcHBlbmQ8
U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKQEAgLTI2NSwxNTggKzI2NSwx
NTggQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7CisgICAgYXBwZW5kPEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3Jl
YXRlKCkpOworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3UmVjdDo6Y3JlYXRl
KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9y
ZGVyVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSk7CisgICAg
YXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMp
CiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZXNGb3JUZXh0OjpjcmVh
dGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxv
YXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5
bGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdGg6OmNyZWF0ZShwYXRoKSk7Cisg
ICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNS
aW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgYXBwZW5k
PERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZShyZWN0
cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3Rz
PihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3Q+KHJlY3Qp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxS
ZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RX
aXRoQ29sb3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRp
ZW50KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihyZWN0LCBncmFkaWVudCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxDb21wb3NpdGVkUmVjdDo6
Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CisgICAgYXBwZW5kPEZpbGxDb21w
b3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGFwcGVuZEl0ZW1BbmRV
cGRhdGVFeHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9k
ZSkpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSk7
CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxp
bmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsSW5saW5l
UGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFwcGVuZDxGaWxsSW5s
aW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUGF0aDo6Y3JlYXRlKHBhdGgp
KTsKKyAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RmlsbEVsbGlw
c2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpOworICAgIGFwcGVuZDxTdHJv
a2VSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAg
aWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAg
ICAgIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlubGluZURhdGEoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0
cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUVsbGlwc2U6OmNyZWF0ZShy
ZWN0KSk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxDbGVh
clJlY3Q+KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJv
a2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRl
KCkpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0dGVy
bjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOwogfQogI2VuZGlm
CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGN1
cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOwotICAgIGFwcGVuZEl0ZW0o
Q2xpcDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcD4ocmVjdCk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0
ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4ocmVjdCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBl
bmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPENsaXBPdXRU
b1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRz
LmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlw
UGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAgYXBwZW5kPENsaXBQYXRoPihwYXRo
LCB3aW5kUnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQpAQCAtNDQ0
LDE5ICs0NDQsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY28KIAogICAgIGF1dG8gcmVjb3Jk
aW5nQ29udGV4dCA9IG1ha2VVbmlxdWU8RHJhd2luZ0NvbnRleHQ+KGRlc3RpbmF0aW9uLnNpemUo
KSwgaW5pdGlhbENUTSk7CiAgICAgZHJhd2luZ0Z1bmN0aW9uKHJlY29yZGluZ0NvbnRleHQtPmNv
bnRleHQoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmNyZWF0ZShk
ZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0
KCkpKTsKKyAgICBhcHBlbmQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbiwgY29s
b3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0KCkpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBhcHBlbmRJdGVtKFBhaW50RnJhbWVGb3JN
ZWRpYTo6Y3JlYXRlKHBsYXllciwgZGVzdGluYXRpb24pKTsKKyAgICBhcHBlbmQ8UGFpbnRGcmFt
ZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICAvLyBG
SVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxs
IG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KICAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2Fs
bGVkIGVhcmx5IG9uPwotICAgIGFwcGVuZEl0ZW0oQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3Jl
YXRlKGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I+KGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpCkBAIC00NjUsMjkgKzQ2NSw2IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6CiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmIGl0ZW0pCi17Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0
ZW0gPSBpdGVtLmdldCgpOwotICAgIGFwcGVuZEl0ZW0oV1RGTW92ZShpdGVtKSk7Ci0gICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kSXRlbShS
ZWY8SXRlbT4mJiBpdGVtKQotewotICAgIEl0ZW0mIG5ld0l0ZW0gPSBpdGVtLmdldCgpOwotICAg
IHdpbGxBcHBlbmRJdGVtKGl0ZW0uZ2V0KCkpOwotICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdU
Rk1vdmUoaXRlbSkpOwotICAgIGRpZEFwcGVuZEl0ZW0obmV3SXRlbSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Ci17Ci0gICAg
aWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3ND
b250ZXh0KCkpKQotICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMo
cmVjdC52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0g
aXRlbS5nbG9iYWxCb3VuZHMoKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQocmVjdC52YWx1ZSgp
KTsKLX0KLQogLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQogc3RhdGljIGlubGluZSBm
bG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogewpAQCAtNTA3LDcg
KzQ4NCw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29s
b3Igc2hhZG93Q29sb3I7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBzaGFkb3dFeHRlbnQ9IGJvdW5kczsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9
IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVz
KSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggMzFjOGM4OTYzNzhjMGNhZmJiMjExMjg5NTk3Y2Vl
MjhiNGZhNzVkMi4uZmZlMTU5MWJhZmQ0OWRiMzNlOTQzZTk5YzFiYTE0Y2RiYzRjNjAyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRp
bGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgpAQCAtNDgsOCArNDksNiBAQCBzdHJ1Y3Qg
SW1hZ2VQYWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNz
IERyYXdpbmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJ
bXBsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZWNvcmRlcik7CkBAIC02MCwxNCArNTksMTQgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAot
ICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0Lml0ZW1D
b3VudCgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlz
dC5pc0VtcHR5KCk7IH0KIAogICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHZpcnR1YWwgfkRlbGVnYXRlKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBsb2NrUmVt
b3RlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpIHsgfTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpIHsgfTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpIHsgfQogICAgIH07
CiAKIHByaXZhdGU6CkBAIC0xNDgsMTUgKzE0NywzNCBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRS
ZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJdGVt
PiYmKTsKLSAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKLSAgICB2b2lkIGRp
ZEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpOwotICAgIHZvaWQgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNz
Li4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAg
ICB3aWxsQXBwZW5kSXRlbU9mVHlwZShUOjppdGVtVHlwZSk7CisgICAgICAgIG1fZGlzcGxheUxp
c3QuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIGRpZEFw
cGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOworCisgICAgICAgIGlmICghVDo6aXNEcmF3aW5n
SXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc3Bs
YXlMaXN0LnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cisg
ICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgp
KSkKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoZXh0ZW50
RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CisgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0
ZW0uZ2xvYmFsQm91bmRzKCkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJ
dGVtRXh0ZW50KCpyZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kaXNwbGF5TGlz
dC5hZGREcmF3aW5nSXRlbUV4dGVudChXVEY6Om51bGxvcHQpOworICAgIH0KKworICAgIHZvaWQg
d2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOworICAgIHZvaWQgZGlkQXBwZW5kSXRlbU9m
VHlwZShJdGVtVHlwZSk7CiAKICAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKIAogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVt
JikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsK
ICAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
cGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCBjZjRlNzQ2ZTgyZGZkNGI3MzNjM2JiZjdl
ODI0NWU1YWY5NzM1NDBmLi5mZWJiYjkyY2Y1NmU2MDZjZGM5MzI1MWY0Y2JkMDdjMzE5NTgxMGE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC01MiwxMyAr
NTIsOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgIGlmIChVTkxJS0VMWSh0cmFja1Jl
cGxheUxpc3QpKQogICAgICAgICByZXBsYXlMaXN0ID0gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdD4o
KTsKIAotICAgIHNpemVfdCBudW1JdGVtcyA9IG1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKSB7Ci0gICAgICAgIGF1dG8m
IGl0ZW0gPSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKVtpXS5nZXQoKTsKLQotICAgICAgICBpZiAoIWlu
aXRpYWxDbGlwLmlzWmVybygpICYmIGlzPERyYXdpbmdJdGVtPihpdGVtKSkgewotICAgICAgICAg
ICAgY29uc3QgRHJhd2luZ0l0ZW0mIGRyYXdpbmdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+
KGl0ZW0pOwotICAgICAgICAgICAgaWYgKGRyYXdpbmdJdGVtLmV4dGVudEtub3duKCkgJiYgIWRy
YXdpbmdJdGVtLmV4dGVudCgpLmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7CisgICAgZm9yIChh
dXRvIFtpdGVtLCBleHRlbnRdIDogbV9kaXNwbGF5TGlzdCkgeworICAgICAgICBpZiAoIWluaXRp
YWxDbGlwLmlzWmVybygpICYmIGl0ZW0uaXNEcmF3aW5nSXRlbSgpKSB7CisgICAgICAgICAgICBp
ZiAoZXh0ZW50ICYmICFleHRlbnQtPmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7CiAgICAgICAg
ICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJza2lwcGlu
ZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQpAQCAtNjgsMTAgKzY0LDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlz
dD4gUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBib29sCiAg
ICAgICAgIGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+YXBwbHkoaXRlbSwgbV9jb250
ZXh0KSkKICAgICAgICAgICAgIGl0ZW0uYXBwbHkobV9jb250ZXh0KTsKIAotICAgICAgICBpZiAo
VU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKLSAgICAgICAgICAgIHJlcGxheUxpc3QtPmFwcGVu
ZEl0ZW0oY29uc3RfY2FzdDxJdGVtJj4oaXRlbSkpOworICAgICAgICBpZiAoVU5MSUtFTFkodHJh
Y2tSZXBsYXlMaXN0KSkgeworICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5kKGl0ZW0pOwor
ICAgICAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAgICAgICAgIHJl
cGxheUxpc3QtPmFkZERyYXdpbmdJdGVtRXh0ZW50KFdURk1vdmUoZXh0ZW50KSk7CisgICAgICAg
IH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVwbGF5TGlzdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggNDBjZDBmZjBkNDE2ODBjZmM3M2U1MDRk
ZWNmYzNkZWY4Nzc1MzIzMy4uMDQ1Y2FjY2U4YTAxYzhkNWRjYjY1OGM0MGQ2M2U5YTM1ODliNWI2
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC01MCw3ICs1MCw3
IEBAIHB1YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5EZWxlZ2F0ZSgpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbSYs
IEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBhcHBseShJdGVtSGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIH07CiAgICAgCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCBjZWQxY2E5MGZjYjhlMmE4N2Zl
NDM0YmJiOTc3YWVhNTA2ZTljNjViLi5hNjgwZDljNjAzN2U2MmY4YTExZDk3MjU4ZTQ0MzdlMjJi
NDY3YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMjcsMTQgKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKKyNpbmNsdWRlICJEZWNvZGVyLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5
ZXI6OkRlbGVnYXRlIHsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6
OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZm
ZXIgPSBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2lu
ZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3Jl
dGVJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwpAQCAtNjQsMTYgKzY3LDE2IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBp
ZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciBy
ZXBsYXllcihCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5TGlzdCwg
dGhpcyk7CiAgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKKyAgICBib29sIGFwcGx5KFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5cGUoKSA9
PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSkgewotICAgICAg
ICAgICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGEmPihpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkgeworICAgICAgICAgICAgYXV0byYgcHV0
SW1hZ2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURh
dGE+KCk7CiAgICAgICAgICAgICBwdXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5pbnB1dEZv
cm1hdCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJdGVtLnNy
Y1JlY3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5k
ZXN0Rm9ybWF0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTg0
LDYgKzg3LDExMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAorICAgIE9wdGlv
bmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4g
ZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXI6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
SW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxs
aXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBPcHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUFuZENyZWF0ZShjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikK
KyAgICB7CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZU9iamVj
dDxUPihkYXRhLCBsZW5ndGgpKSB7CisgICAgICAgICAgICBuZXcgKGhhbmRsZUxvY2F0aW9uICsg
c2l6ZW9mKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFQoV1RGTW92ZSgqaXRlbSkp
OworICAgICAgICAgICAgcmV0dXJuIHt7IGhhbmRsZUxvY2F0aW9uIH19OworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCiAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCYgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCmluZGV4IGQ1YmIwZjJkMDNlNmYzNWE5OGU0MTljNDE1ZDA1NmIyOTRiZTU3YmEuLjQ2
NWI2ZjU5MDM4OWMwZjAyODFlNDVhZDQ2NDE2MmVjYTAwNWYzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKQEAgLTcyLDEwICs3MiwxMCBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjphcHBseVJlc291cmNlSXRlbShjb25zdCBEaXNwbGF5TGlzdDo6SXRlbSYg
aXRlbSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjphcHBseVJlc291cmNlSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGl0ZW0udHlwZSgpID09IERpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGF1dG8mIGRyYXdJdGVt
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciY+KGl0ZW0p
OworICAgIGlmIChpdGVtLmlzPERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpIHsKKyAg
ICAgICAgYXV0byYgZHJhd0l0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVm
ZmVyPigpOwogICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hl
LmNhY2hlZEltYWdlQnVmZmVyKGRyYXdJdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
KTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTg3LDEzICs4NywxMiBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVz
b3VyY2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShj
b25zdCBEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
Ym9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZSBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGl0
ZW0udHlwZSgpICE9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZv
ck1lZGlhKQorICAgIGlmICghaXRlbS5pczxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlh
PigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBtZWRpYUl0ZW0gPSBzdGF0
aWNfY2FzdDxjb25zdCBEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJj4oaXRlbSk7Ci0K
KyAgICBhdXRvJiBtZWRpYUl0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZv
ck1lZGlhPigpOwogICAgIGF1dG8gcHJvY2VzcyA9IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
KTsKICAgICBpZiAoIXByb2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MCwxOSAr
MTM5LDQ5IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseURpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dCBmbHVzaENvbnRleHQp
CiB7Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2Fj
aGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgaW1h
Z2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOworICAgIFZlY3RvcjxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI+IGJ1ZmZlcklkZW50aWZpZXJz
OworICAgIGF1dG8gZGlzcGxheUxpc3QgPSBoYW5kbGUuY3JlYXRlRGlzcGxheUxpc3QoWyZdIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikgLT4g
dWludDhfdCogeworICAgICAgICBidWZmZXJJZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7
CisgICAgICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IHNoYXJlZEl0ZW1CdWZmZXIoaWRlbnRp
ZmllcikpCisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hh
cmVkTWVtb3J5LT5kYXRhKCkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKKwor
ICAgIGlmICghZGlzcGxheUxpc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2Ug
Y2hlY2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVk
SW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoIWltYWdl
QnVmZmVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRlcm1p
bmF0ZSB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aW1hZ2VCdWZmZXItPmlzQWNjZWxlcmF0ZWQoKSkKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0
ZW1CdWZmZXJDbGllbnQoZG93bmNhc3Q8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcj4oaW1h
Z2VCdWZmZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVy
Q2xpZW50KGRvd25jYXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZm
ZXIpKTsKKworICAgIGltYWdlQnVmZmVyLT5mbHVzaERpc3BsYXlMaXN0KCpkaXNwbGF5TGlzdCk7
CisKKyAgICBpZiAoZmx1c2hDb250ZXh0ID09IFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKQorICAg
ICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VTaGFyZWRJdGVtQnVmZmVycyhXVEZN
b3ZlKGJ1ZmZlcklkZW50aWZpZXJzKSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBm
bHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxh
eUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZl
cihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5m
bHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNo
Q29udGV4dCgpOwotICAgICAgICBmbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRl
bnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9CisgICAgYXBwbHlE
aXNwbGF5TGlzdChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1
c2hDb250ZXh0OjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxl
LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXBw
bHlEaXNwbGF5TGlzdChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxk
Rmx1c2hDb250ZXh0OjpZZXMpOworICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1
c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQpAQCAtMTY4LDYgKzE5NywxNyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcgogICAg
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKIH0KIAordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRD
cmVhdGVTaGFyZWRJdGVtRGF0YShEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBp
ZiAoYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBT
aGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KSkKKyAgICAgICAgbV9zaGFyZWRJdGVt
QnVmZmVycy5zZXQoaWRlbnRpZmllciwgV1RGTW92ZShzaGFyZWRNZW1vcnkpKTsKK30KKworUmVm
UHRyPFNoYXJlZE1lbW9yeT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkSXRlbUJ1ZmZl
cihEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllcikgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zaGFyZWRJdGVtQnVmZmVycy5nZXQoaWRlbnRpZmllcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKaW5kZXggMjg1ZTJmNzRiNGQ0ZmQ2ZTZhOGM1ZTkxMDI1YTFjOTI2ZjVm
ZmIxNS4uZmRhYTY4NjM1YTIxN2E0ZjJlMzI5NGUwMWFhM2RmYjRmMTViNzRiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5o
IgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNw
bGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYzLDggKzY1LDggQEAgcHVibGljOgogICAgIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSBjb25zdDsK
IAogICAgIC8vIFJlbmRlcmluZyBvcGVyYXRpb25zLgotICAgIGJvb2wgYXBwbHlSZXNvdXJjZUl0
ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQmKTsKLSAgICBib29sIGFwcGx5TWVkaWFJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseVJl
c291cmNlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBN
ZXNzYWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRl
ZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CkBAIC03Myw2ICs3NSwxMCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAorICAgIGVudW0gY2xhc3MgU2hvdWxkRmx1c2hDb250
ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGFwcGx5RGlzcGxheUxpc3QoY29uc3Qg
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hh
cmVkSXRlbUJ1ZmZlcihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIp
IGNvbnN0OworCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB1aW50NjRf
dCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtODMsMTQg
Kzg5LDE2IEBAIHByaXZhdGU6CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAg
ICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
LSAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB2
b2lkIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGdldEltYWdlRGF0YShXZWJD
b3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVj
dCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYpOwogICAgIHZvaWQg
cmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7CisgICAgdm9pZCBkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik7
CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsKICAgICBX
ZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyOworICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyLCBSZWZQdHI8U2hhcmVkTWVtb3J5Pj4gbV9zaGFyZWRJdGVtQnVmZmVyczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgppbmRleCBhODhlMGZiNjI2MjQ5MTg5ZDhmNWIzYTM5YjliNjY0Mjg2MjJjYWQzLi5i
YjkxNWFiMTk1YWQzNzc3MjBiNjkxNTBhM2JlYzBjOTkzYzVhYzg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgpAQCAtMjMsMTEgKzIzLDEyIEBACiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIE5vdFJl
ZkNvdW50ZWQgewotICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXpl
IGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQotICAgIHZvaWQgRmx1c2hEaXNwbGF5TGlzdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QgZGlzcGxheUxpc3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0QW5k
Q29tbWl0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2Vi
S2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CisgICAgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlz
cGxheUxpc3QoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKKyAgICBGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KFdlYktpdDo6U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUgZGlzcGxheUxpc3QsIFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIEdldEltYWdlRGF0YShlbnVtOnVpbnQ4
X3QgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6
OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlIGlt
YWdlRGF0YSkgU3luY2hyb25vdXMKLSAgICB2b2lkIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQorICAgIERpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SVBD
SGFuZGxlIGhhbmRsZSkKKyAgICBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVj
b2Rlci5jcHAKaW5kZXggNWNhMjEyN2EzNDZjZDJhNDY5Y2EyOTdmNGFiMTM5MDJmNmEwNmY4YS4u
NTFiOWZmZDkzMDM0MGJkZmYyZmI3MWQwZTQ2Y2FjZjQwOTM0NjUzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKQEAgLTc0LDYgKzc0LDE2IEBAIERlY29kZXI6OkRlY29k
ZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgdm9pZCAoKmJ1ZmZl
ckRlYWxsb2NhCiAgICAgICAgIHJldHVybjsKIH0KIAorRGVjb2Rlcjo6RGVjb2Rlcihjb25zdCB1
aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBDb25zdHJ1Y3RXaXRob3V0SGVhZGVy
VGFnKQorICAgIDogbV9idWZmZXIgeyBidWZmZXIgfQorICAgICwgbV9idWZmZXJQb3MgeyBtX2J1
ZmZlciB9CisgICAgLCBtX2J1ZmZlckVuZCB7IG1fYnVmZmVyICsgYnVmZmVyU2l6ZSB9CisgICAg
LCBtX2J1ZmZlckRlYWxsb2NhdG9yKFtdIChjb25zdCB1aW50OF90Kiwgc2l6ZV90KSB7IH0pCit7
CisgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2J1ZmZlcikgJSBhbGlnbm9m
KHVpbnQ2NF90KSkKKyAgICAgICAgbWFya0ludmFsaWQoKTsKK30KKwogRGVjb2Rlcjo6fkRlY29k
ZXIoKQogewogICAgIEFTU0VSVChtX2J1ZmZlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNv
ZGVyLmgKaW5kZXggM2RkMjQ2OTZlZjZjYTdkYzk3ZDAxM2EwZmU4NzVkN2JkNDdkZTMwYS4uYTAz
ZWJiMWIyODM3ZWY2YTM4NzNhMTE1YzRkYmUwZmM1OGNkOTkxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VOYW1l
cy5oIgogI2luY2x1ZGUgIlN0cmluZ1JlZmVyZW5jZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29u
dGV4dE1lbnVJdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNzMs
NyArMTc0LDIyIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRGVjb2Rl
ciA9IHRydWU7CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgT3B0aW9u
YWw8VD4gZGVjb2RlT2JqZWN0KGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUpCisgICAgeworICAgICAgICBPcHRpb25hbDxUPiByZXN1bHQ7CisgICAgICAgIERlY29kZXIg
ZGVjb2RlcihidWZmZXIsIGJ1ZmZlclNpemUsIENvbnN0cnVjdFdpdGhvdXRIZWFkZXIpOworICAg
ICAgICBpZiAoIWRlY29kZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgICAgICBkZWNvZGVyID4+IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKIHByaXZhdGU6CisgICAgZW51bSBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFn
IHsgQ29uc3RydWN0V2l0aG91dEhlYWRlciB9OworICAgIERlY29kZXIoY29uc3QgdWludDhfdCog
YnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgQ29uc3RydWN0V2l0aG91dEhlYWRlclRhZyk7CisK
ICAgICBib29sIGFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsK
ICAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAppbmRl
eCA4N2ZlOTU1NTJhYzYwNTJkYmNkNzZlNDkwZDRhYjZhNjYyZWM4YWQ0Li5iMDU1NjY1N2NiMDZm
MjRhNDM3OWJiMzNkNWQ3Zjk3ZTEyMGNkOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9FbmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcApAQCAtNzIsNiArNzIsMTYgQEAgRW5jb2Rlcjo6RW5jb2RlcihNZXNzYWdlTmFt
ZSBtZXNzYWdlTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKICAgICBlbmNvZGVIZWFkZXIo
KTsKIH0KIAorRW5jb2Rlcjo6RW5jb2RlcihDb25zdHJ1Y3RXaXRob3V0SGVhZGVyVGFnKQorICAg
IDogbV9tZXNzYWdlTmFtZShzdGF0aWNfY2FzdDxNZXNzYWdlTmFtZT4oMCkpCisgICAgLCBtX2Rl
c3RpbmF0aW9uSUQoMCkKKyAgICAsIG1fYnVmZmVyKG1faW5saW5lQnVmZmVyKQorICAgICwgbV9i
dWZmZXJQb2ludGVyKG1faW5saW5lQnVmZmVyKQorICAgICwgbV9idWZmZXJTaXplKDApCisgICAg
LCBtX2J1ZmZlckNhcGFjaXR5KHNpemVvZihtX2lubGluZUJ1ZmZlcikpCit7Cit9CisKIEVuY29k
ZXI6On5FbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIgIT0gbV9pbmxpbmVCdWZmZXIpCkBA
IC0yMTksNyArMjI5LDEyIEBAIHZvaWQgRW5jb2Rlcjo6YWRkQXR0YWNobWVudChBdHRhY2htZW50
JiYgYXR0YWNobWVudCkKIAogVmVjdG9yPEF0dGFjaG1lbnQ+IEVuY29kZXI6OnJlbGVhc2VBdHRh
Y2htZW50cygpCiB7Ci0gICAgcmV0dXJuIFdURk1vdmUobV9hdHRhY2htZW50cyk7CisgICAgcmV0
dXJuIHN0ZDo6ZXhjaGFuZ2UobV9hdHRhY2htZW50cywgeyB9KTsKK30KKworYm9vbCBFbmNvZGVy
OjpoYXNBdHRhY2htZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2F0dGFjaG1lbnRzLmlz
RW1wdHkoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmgKaW5kZXggMzY3OGQ0ZmFlMjkxNTJkOTkwZjRkM2E0ZjBiN2UwYWY2Y2Y3NDcyYi4u
ZWZjOTZkNzQ4MjIzOTUyOTVjYjU5OWQ2YWQ2YTk1OTQxMDlmYWE5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0VuY29kZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VO
YW1lcy5oIgogI2luY2x1ZGUgIlN0cmluZ1JlZmVyZW5jZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
Q29udGV4dE1lbnVJdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC05
OSw3ICsxMDAsMjQgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENFbmNv
ZGVyID0gdHJ1ZTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGVuY29kZU9iamVjdChjb25zdCBUJiBvYmplY3QpCisg
ICAgeworICAgICAgICBFbmNvZGVyIGVuY29kZXIoQ29uc3RydWN0V2l0aG91dEhlYWRlcik7Cisg
ICAgICAgIGVuY29kZXIgPDwgb2JqZWN0OworCisgICAgICAgIGlmIChlbmNvZGVyLmhhc0F0dGFj
aG1lbnRzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gV2ViQ29yZTo6
U2hhcmVkQnVmZmVyOjpjcmVhdGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkpOworICAgIH0KKwogcHJpdmF0ZToKKyAgICBlbnVtIENvbnN0cnVjdFdpdGhvdXRIZWFkZXJU
YWcgeyBDb25zdHJ1Y3RXaXRob3V0SGVhZGVyIH07CisgICAgRW5jb2RlcihDb25zdHJ1Y3RXaXRo
b3V0SGVhZGVyVGFnKTsKKwogICAgIHVpbnQ4X3QqIGdyb3coc2l6ZV90IGFsaWdubWVudCwgc2l6
ZV90KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEUsIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjpp
c19lbnVtPEU+Ojp2YWx1ZT4qID0gbnVsbHB0cj4KQEAgLTEwOSw2ICsxMjcsOCBAQCBwcml2YXRl
OgogICAgICAgICBlbmNvZGUoV1RGOjplbnVtVG9VbmRlcmx5aW5nVHlwZTxFPihlbnVtVmFsdWUp
KTsKICAgICB9CiAKKyAgICBib29sIGhhc0F0dGFjaG1lbnRzKCkgY29uc3Q7CisKICAgICB2b2lk
IGVuY29kZUhlYWRlcigpOwogICAgIGNvbnN0IE9wdGlvblNldDxNZXNzYWdlRmxhZ3M+JiBtZXNz
YWdlRmxhZ3MoKSBjb25zdDsKICAgICBPcHRpb25TZXQ8TWVzc2FnZUZsYWdzPiYgbWVzc2FnZUZs
YWdzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA5OTEx
MWE3ODkwYjU3ODVmNGUxMDYyZDY4ODIwNjU0N2Q1MjUwM2JkLi45ZmY5NDhlOGJlMWFhZWRkMDkz
YjRiZTI5OTM0NjBlMmNkOTliMjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKQEAgLTIwOCw2ICsyMDgsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9y
d2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnU3RyaW5nJywKICAgICAgICAgJ1dlYkNvcmU6OkNv
bG9yU3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RGljdGF0aW9uQ29udGV4dCcsCisgICAgICAg
ICdXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1l
bnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlm
aWVyJywKQEAgLTU4NSw2ICs1ODYsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAg
ICAgICAgJ0pTQzo6TWVzc2FnZVNvdXJjZSc6IFsnPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBl
cy5oPiddLAogICAgICAgICAnSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlJzogWyc8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZy
b250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg+
J10sCiAgICAgICAgICdNZWRpYVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+J10sCiAgICAgICAg
ICdNb25vdG9uaWNUaW1lJzogWyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwKICAgICAgICAgJ1Nl
Y29uZHMnOiBbJzx3dGYvU2Vjb25kcy5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYTc0ZDYxNWFiZDNmNGEz
MTg2MjUyZmYwZmRjYjg3MWU3MGZhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29u
c3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBkaXNwbGF5
TGlzdC5mb3JFYWNoSXRlbUJ1ZmZlcihbJl0gKGF1dG8mIGhhbmRsZSkgeworICAgICAgICBtX2J1
ZmZlcnMuYXBwZW5kKHsgaGFuZGxlLmlkZW50aWZpZXIsIGhhbmRsZS5jYXBhY2l0eSB9KTsKKyAg
ICB9KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQcm92aWRl
ciYmIGJ1ZmZlclByb3ZpZGVyKSBjb25zdAoreworICAgIERpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SGFuZGxlcyBoYW5kbGVzOworICAgIGhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2J1
ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCBjYXBhY2l0eV0gOiBt
X2J1ZmZlcnMpIHsKKyAgICAgICAgYXV0byogZGF0YSA9IGJ1ZmZlclByb3ZpZGVyKGlkZW50aWZp
ZXIpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBoYW5kbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGlkZW50aWZpZXIsIGRhdGEsIGNhcGFj
aXR5IH0pOworICAgIH0KKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q+KFdURk1vdmUoaGFuZGxlcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQxNzVlMTE0ZjIzYmM4ZmI4ZTU3Y2Q5MGY2NGEzM2JlMjYyZTFmMzEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJdGVtQnVmZmVyUHJvdmlk
ZXIgPSBGdW5jdGlvbjx1aW50OF90KihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIpPjsKKworICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IGNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQ
cm92aWRlciYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU+IGRlY29kZShEZWNvZGVyJik7CisKK3By
aXZhdGU6CisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoVmVjdG9yPHN0ZDo6cGFpcjxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+JiYgYnVmZmVy
cykKKyAgICAgICAgOiBtX2J1ZmZlcnMoV1RGTW92ZShidWZmZXJzKSkKKyAgICB7CisgICAgfQor
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIsIHNpemVfdD4+IG1fYnVmZmVyczsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9idWZmZXJzOworfQorCit0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gU2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZl
Y3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
LCBzaXplX3Q+Pj4gYnVmZmVyczsKKyAgICBkZWNvZGVyID4+IGJ1ZmZlcnM7CisgICAgaWYgKCFi
dWZmZXJzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7IFdU
Rk1vdmUoKmJ1ZmZlcnMpIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CmluZGV4IGUwYWI3NDM2YmFkYzM0NjM3NDk0NjYzMzQ3MTliNDVlZGZkMmIzMDYuLjUwZTEwMjRj
YWUwZGMwNDBjYWMzMjNjYmNkN2VjNWUxNDc0NDk0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTczLDYg
KzE3Myw3IEBAIFNoYXJlZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcAogU2hh
cmVkL1Nlc3Npb25TdGF0ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIEBuby11bmlm
eQogU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAorU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAKIFNoYXJlZC9TaGFy
ZWRTdHJpbmdIYXNoVGFibGVSZWFkT25seS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFi
bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0NjY1Y2NiN2JjNmFmN2E3YTA4OTE1ZmRlNDY3MjZkOTY3ZjVmY2I0Li5jODFlNDhh
YjE4NzU4NDdjMGY1NjgwOWE1ODI3MGZhYjcxNTE5ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4NzMsNiArMTg3Myw3IEBACiAJ
CUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFFOUU3NTJGMDAz
OEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDhEMkE4NTIxNTgzQTdFMDBD
Njc1MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi87IH07
CiAJCUY0OTZBNDMxMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTZBNDJG
MUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLzsgfTsKKwkJ
RjRBNkQ2QkMyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZCQjI1NENB
M0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKIAkJRjRDQjA5
RTUyMjVENUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5RTQyMjVENUEwMzAw
ODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9OwogCQlGNEQ1RjUxRDIw
NjA4N0ExMDAzOEJCQTggLyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTE5MjA2MDg3QTAw
MDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oICovOyB9OwogCQlGNEQ1
RjUxRjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ1RjUxQjIw
NjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07
CkBAIC01NDU5LDYgKzU0NjAsOCBAQAogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBw
S2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBwYXRo
ID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1t
OyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QUM2NTVF
MjJBMzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0RlZmF1
bHRWYWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9T
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIxRERCQkFCMDA5NUEz
NzggLyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3RlcElELmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Q0IwOUU0MjI1RDVBMDMwMDg5MTQ4NyAvKiBX
ZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZU1lZGlhU291
cmNlUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTY2LDYgKzYxNjks
OCBAQAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAq
LywKIAkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3Bw
ICovLAogCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5o
ICovLAorCQkJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5jcHAgKi8sCisJCQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlLmggKi8sCiAJCQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJl
ZFN0cmluZ0hhc2hTdG9yZS5jcHAgKi8sCiAJCQkJODMxM0Y3RTkxRjdEQUUwMzAwQjk0NEVCIC8q
IFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oICovLAogCQkJCTgzMTNGN0U4MUY3REFFMDMwMEI5NDRF
QiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwICovLApAQCAtMTEzMTUsNiArMTEzMjAsNyBA
QAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8qIFNoYXJlZEJ1ZmZl
ckNvcHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBDMTMwMTc2NyAvKiBT
aGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNEE2RDZCQzI1
NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRSaW5nQnVmZmVy
U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUwODAwQjk0NEVCIC8q
IFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oCmluZGV4IDIyNjRlYmNiNjY2NGQ3MWZmZjBhNDAwNDJmYjI1NDJjYTgwNjZlYjQu
LjA2ZGQ0ZjUxYzM3YTg0MWVhM2M0Y2FkZjlhMGYxNDg2YTIyMzE1NzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQogCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KQEAgLTM2LDcgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVu
dCB7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7CkBAIC03Nyw2ICs4MSw4IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5
TGlzdCgpLnNldEl0ZW1CdWZmZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1fZHJhd2luZ0NvbnRl
eHQuZGlzcGxheUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAg
IH0KIAogICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVz
aElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQpAQCAtMTA0LDEwICsx
MTAsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgYXV0byYgZGlz
cGxheUxpc3QgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkqPih0aGlzKS0+bV9k
cmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpOwotICAgICAgICBpZiAoZGlzcGxheUxpc3QuaXRl
bUNvdW50KCkpIHsKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eSY+KCp0aGlzKS5mbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgYXV0byYg
bXV0YWJsZVRoaXMgPSBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7
CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4
dC5kaXNwbGF5TGlzdCgpOworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbXV0YWJsZVRoaXMuZmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CiAg
ICAgICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgICAgICAgICAgbXV0YWJsZVRoaXMu
bV9pdGVtQ291bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA9IDA7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBnZXRJbWFnZURhdGEgaXMgc3luY2hyb25vdXMsIHdoaWNoIG1lYW5zIHdlJ3ZlIGFscmVh
ZHkgcmVjZWl2ZWQgdGhlIENvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0IG1lc3NhZ2UuCkBA
IC0xNDEsMTggKzE0OSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7
Ci0gICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgIGlmIChkaXNw
bGF5TGlzdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJhY2VT
Y29wZSB0cmFjaW5nU2NvcGUoRmx1c2hSZW1vdGVJbWFnZUJ1ZmZlclN0YXJ0LCBGbHVzaFJlbW90
ZUltYWdlQnVmZmVyRW5kLCAxKTsKICAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoZGlz
cGxheUxpc3QsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICAgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpLnVubG9j
a1JlbW90ZVJlc291cmNlc0ZvclJlbW90ZUNsaWVudChtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1faXRlbUNvdW50
SW5DdXJyZW50RGlzcGxheUxpc3QgPSAwOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2hEaXNwbGF5
TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgaWYgKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSB8fCAhZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgIGlmICghbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgfHwgZGlzcGxheUxpc3QuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKEZsdXNoUmVtb3Rl
SW1hZ2VCdWZmZXJTdGFydCwgRmx1c2hSZW1vdGVJbWFnZUJ1ZmZlckVuZCk7CkBAIC0xNzAsMjAg
KzE3OSwxMjUgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJikg
b3ZlcnJpZGUKKyAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGNvbnN0ZXhwciBzaXplX3Qg
RGlzcGxheUxpc3RCYXRjaFNpemUgPSA1MTI7CiAgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0g
bV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpOwotICAgICAgICBpZiAoZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkgPCBEaXNwbGF5TGlzdEJhdGNoU2l6ZSkKKyAgICAgICAgaWYgKCsrbV9pdGVt
Q291bnRJbkN1cnJlbnREaXNwbGF5TGlzdCA8IERpc3BsYXlMaXN0QmF0Y2hTaXplKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QpOwog
ICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgICAgICBtX2l0ZW1Db3VudEluQ3VycmVu
dERpc3BsYXlMaXN0ID0gMDsKICAgICB9CiAKLSAgICB2b2lkIGRpZEFwcGVuZEl0ZW0oY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIG92ZXJyaWRlCisgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2Fw
YWNpdHkpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCisgICAgICAgIGlmICht
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIHJldHVybiBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZlcihjYXBhY2l0eSk7CisKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVu
Y29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4o
aXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9j
dXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5n
UmVjdHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rl
cjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VC
dWZmZXI+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29k
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAg
ICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TmF0aXZlSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNv
ZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPihpdGVt
LmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdUaWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdl
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQ
YXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6
CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpF
bmNvZGVyOjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICAg
ICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURh
dGE+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
TGluZURhc2g6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVPYmplY3Q8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJ
UEM6OkVuY29kZXI6OmVuY29kZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0
aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0Ogor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsSW5saW5l
UGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToK
KyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSB0
eXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7CiAgICAgfQogCkBAIC0xOTEsNiArMzA1LDcgQEAgcHJvdGVjdGVkOgogICAg
IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CiAg
ICAgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHsgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpIH07CiAgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OworICAgIHNpemVfdCBtX2l0ZW1Db3VudEluQ3VycmVu
dERpc3BsYXlMaXN0IHsgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggN2EwMTkzMGFiNjZjNDQ3MzA1
MTA5MzAzNGQ0ZjM2ZDJjMGU2NDhhMi4uOWRmMTIxNDhiMGE0NWM5YTlhZjQ5ZDExZmM5YTMwYTE5
ZWUxNmU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAt
MzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
IgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDEzICsxMTgsMTMg
QEAgUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGkKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmZsdXNoRGlzcGxheUxpc3QoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpGbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KHsgZGlzcGxheUxpc3QgfSwg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CiB9CiAKIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
IHNlbnRGbHVzaElkZW50aWZpZXIgPSBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJh
dGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KGRpc3BsYXlMaXN0LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlM
aXN0QW5kQ29tbWl0KHsgZGlzcGxheUxpc3QgfSwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAg
ICAgcmV0dXJuIHNlbnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NSw2ICsxNTcsMzEgQEAg
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RXYXNDb21t
aXR0ZWQoRGlzcGxheUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJl
bW90ZUltYWdlQnVmZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hEaXNwbGF5TGlz
dChmbHVzaElkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6cmVsZWFzZVNoYXJlZEl0ZW1CdWZmZXJzKFZlY3RvcjxEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXI+JiYgaWRlbnRpZmllcnMsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgZm9yIChhdXRvIGlkZW50aWZpZXIg
OiBpZGVudGlmaWVycykgeworICAgICAgICBpZiAoIW1fc2hhcmVkSXRlbUJ1ZmZlcnMucmVtb3Zl
KGlkZW50aWZpZXIpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK0Rpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8
PCAxNjsKKworICAgIGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShz
dGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUsIGNhcGFjaXR5KSk7CisgICAgaWYg
KCFzaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGlkZW50aWZp
ZXIgPSBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVkTWVtb3J5SGFuZGxlOworICAgIHNoYXJlZE1lbW9y
eS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9yeUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0
aW9uOjpSZWFkT25seSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6RGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoaWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJlZE1l
bW9yeUhhbmRsZSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH0pLCBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBzaGFy
ZWRNZW1vcnkuY29weVJlZigpKTsKKworICAgIHJldHVybiB7IGlkZW50aWZpZXIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+ZGF0YSgpKSwgc2hhcmVkTWVtb3J5LT5z
aXplKCkgfTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCA5
OTU2NWI2ZjE2NmJiMmQ4MDYxNDE4NDk3MmUzNDM3MDZjZTdmZWM5Li4xMzFlNDkxOTZkZDk1YTI3
NWI4MTUxYjg1NmViYTUzYzY5N2Y0NzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAj
aW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIuaD4KICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCkBAIC02MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICB+UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CiAKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkm
IHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5OyB9CisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3Jl
YXRlSXRlbUJ1ZmZlcihzaXplX3QpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKQEAgLTcyLDYgKzc0LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURh
dGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CisgICAgdm9pZCBkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJik7CiAg
ICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVsZWFzZVJlbW90ZVJlc291cmNlKFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKQEAgLTg0LDcgKzg3LDkgQEAg
cHJpdmF0ZToKICAgICAvLyBNZXNzYWdlcyB0byBiZSByZWNlaXZlZC4KICAgICB2b2lkIGltYWdl
QnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmx1c2hEaXNw
bGF5TGlzdFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VTaGFyZWRJdGVt
QnVmZmVycyhWZWN0b3I8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
PiYmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCisgICAgSGFzaE1h
cDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQ
cm94eSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eSB7ICp0aGlzIH07CiAgICAgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgppbmRleCA4ZjI0NTg1NjM1ZjQ3
MDgzZDFkYjI3YTViMzk2NjY1ZjMxNWViY2IwLi43OWE5ODY2NTA2ZDFjMjVhMDk2YmE1MTQ2OTZi
ZDljOGJhOTIzMTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbgpAQCAtMjMsOCArMjMsOSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50
ZWQgewotICAgIHZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9h
dFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6Oklt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERp
c3BsYXlMaXN0V2FzQ29tbWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIg
Zmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0
ZWQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JT
cGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQor
ICAgIEZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNo
SWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgUmVsZWFzZVNoYXJlZEl0
ZW1CdWZmZXJzKFZlY3RvcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXI+IGlkZW50aWZpZXJzLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmluZGV4IDNmNWE3M2JlYzNi
ZjI4NmU1Mjk4MWRlNDhiOTBjMzFkMDE5ZDhjM2QuLjBmOWE2ZThmMTllMWQ5ODU2OWZlZDFiYmM0
MWQwNzY4M2VhY2YxYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggODFmZDhlNjQ0NDU2MzYzYTIwN2RiN2EwMmFhNWU3ODIzMGY3MWNiMC4uMmJiMTEyMGZmMjRk
YTk4M2NlODkzY2E3NGZlODAwYmY0MjRhMDllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIw
LTEwLTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAg
IFtDb25jdXJyZW50IGRpc3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGly
ZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIHNldmVyYWwgZXhpc3RpbmcgKG5vbi1HUFUtcHJv
Y2VzcykgZGlzcGxheSBsaXN0IHRlc3RzIHRvIGFjY291bnQgZm9yIGEgc2xpZ2h0IHR3ZWFrIGlu
IHRoZSBmb3JtYXQgaW4KKyAgICAgICAgd2hpY2ggZGlzcGxheSBsaXN0cyBhcmUgZHVtcGVkIGFz
IHRleHQuIE1vcmUgc3BlY2lmaWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgbm93IGR1
bXBlZCBhZnRlciBlYWNoCisgICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0aGVyIHRoYW4gYmVmb3Jl
LgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9y
bXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlz
dC1leHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMTAtMzAgIEthcmwgUmFja2xlciAgPHJhY2ts
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNjkwNzApOiBbIEJpZyBTdXIg
XSBlZGl0aW5nL2lucHV0L3JldmVhbC1jYXJldC1vZi1tdWx0aWxpbmUtaW5wdXQuaHRtbCBpcyBh
IGNvbnN0YW50IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAzMjg4NDgwNjI3MDE5ZDU0
MDJkOTQyNWZjNGExMzEzNzcwZWNiMzFhLi4xNDUxYjE5MjUzYzMyMzg5MjhiYmQ5ZjVlNWRlYmI5
Mjc0YzUwZDU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC02LDEwICs2LDggQEAKICAgKGZpbGwt
Y29sb3IgI0M4MDAwMCkKICAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1y
ZWN0Ci0gIChleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDEwLDEw
KSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSBleHRlbnQgYXQg
KDEwLDE0MCkgc2l6ZSA1NXg1MCkKIChzZXQtaW5saW5lLWZpbGwtY29sb3IKICAgKGNvbG9yICMw
MDAwQzg4MCkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkK
LSAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDMwLDMwKSBzaXpl
IDU1eDUwKSBleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVk
LnR4dAppbmRleCBlOWY1NDA0MTdiZDZlNWRjNzc4NjE1ZTVmMzc5NDk3NmU0MTk1ZjhkLi41OTBi
OTNmNWM4OTJjYWUzN2Y0MjQ2MDlhOGZlNDgwMzNlNjY4MzY4IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0
ZWQudHh0CkBAIC05LDkgKzksOCBAQAogICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9
MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1y
ZWN0Ci0gIChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1
MCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRp
b24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5v
cm1hbCkgZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10
cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAppbmRleCBlMDQ1MmExNzNhMWFmZTIzN2Y3MjhkMzBiYzI3
ZWM2MGVlYzk2MjNkLi4yOGNjZjRjMDE4NTlkZTE5MGIwYTlhMjdmYTJmZWMwMDYzZWQ4ZTFjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5z
Zm9ybXMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTExLDExICsxMSwxMCBAQAogICAo
c2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3kt
cmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDcuMTQsMC4y
MCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwMHgxMDApCiAg
IChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAg
KGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcu
MTQsMC4yMCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCiAoc2V0LWN0bQogICAoc2V0
LWN0bSB7bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0
ZWQudHh0CmluZGV4IGJkODc2ZGY0MDNhNGFkZDBiYzM5MWY3YzYyYWMyYjRjM2JjZjdkYTAuLmJj
MTdiNTExNDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApA
QCAtMywyOSArMywyNCBAQAogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0
ZWQtcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAs
MCkgc2l6ZSAxMDR4MTA0KQogICAoY29sb3IgIzAwODAwMCkKICAgKGNvbXBvc2l0ZS1vcGVyYXRp
b24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5v
cm1hbCkgZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKICAgKGNoYW5n
ZS1mbGFncyAzMjk2MCkKICAgKGZpbGwtY29sb3IgIzAwMDBGRikKICAgKHN0cm9rZS1zdHlsZSAw
KQogICAoc2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCww
KSBzaXplIDEwNHgyKQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQotICAoYm9yZGVyLXRo
aWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDAp
IHNpemUgMTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgy
KQogICAocmVjdCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEu
MDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEw
NHgyKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMngxMDQpCiAgIChyZWN0
IGF0ICgwLDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9y
ZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKIChkcmF3LXJl
Y3QKLSAgKGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgxMDIsMCkg
c2l6ZSAyeDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tu
ZXNzIDEuMDApIGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhw
ZWN0ZWQudHh0CmluZGV4IGFkZGQyY2E0MjUwYzI0YTBjOWVlMjI1NWQ0Mjc1YTc2ZjYwNDNlZWQu
LmJiNTkzZDIwZjZkYTY0ODYyOTJkMzZjMDIyMGUyYTlkODcyZjgyYjkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJl
Y3QtZXhwZWN0ZWQudHh0CkBAIC0zLDExICszLDEwIEBAIHJlY29yZGVkOgogICAoeCAwLjAwKQog
ICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0MTIsMCkg
c2l6ZSAxMDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9y
ICMwMDAwRkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQt
bW9kZSBub3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNp
emUgMTAweDEwMCkKIAogcmVwbGF5ZWQ6CiAoCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413116</attachid>
            <date>2020-11-03 16:04:28 -0800</date>
            <delta_ts>2020-11-03 17:34:30 -0800</delta_ts>
            <desc>More WIP</desc>
            <filename>bug-218406-20201103160427.patch</filename>
            <type>text/plain</type>
            <size>367170</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRmNGU3MWQ2ODFlMmZj
MDFhY2FiNDZkMTk1MmE4ZjJiNGJlYzk3Ny4uYjllZDA3MmM5OTdhMDVlMTY2MGNjNTNkZDMyZTEx
OTRkMzNhYWNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwNCBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZXMgaXRlbSBkYXRhICh3aGV0aGVyIGVuY29kZWQsIG9yIGFzIGFu
IGlubGluZQorICAgICAgICBvYmplY3QpLiBIb3dldmVyLCB3aGVuIHVzaW5nIGRpc3BsYXkgbGlz
dHMgb3V0c2lkZSBvZiB0aGlzIGNvbnRleHQgKGUuZy4gaW4gb3RoZXIgcGFydHMgb2YgV2ViQ29y
ZSwgc3VjaCBhcyB0aGUKKyAgICAgICAgZ2x5cGggZHJhd2luZyBjYWNoZSksIHdlIGRvbid0IGhh
dmUgYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgLiBUbyBoYW5kbGUgdGhpcywgdGhlIGl0ZW0g
YnVmZmVyIGluc3RlYWQKKyAgICAgICAgYWxsb2NhdGVzIGl0cyBvd24gKG5vbi1zaGFyZWQtbWVt
b3J5KSBidWZmZXJzLCB3aGljaCBpdCBtYW5hZ2VzIGFuZCBkZWxldGVzIHdoZW4gaXQgaXMgZG9u
ZS4gSWYgYW55IG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFyZSBjb25zdHJ1Y3RlZCB3aXRo
aW4gdGhlc2UgYnVmZmVycywgYEl0ZW1CdWZmZXJgIHdpbGwgYWRkaXRpb25hbGx5IGNhbGwgdGhl
aXIgZGVzdHJ1Y3RvcnMgcHJpb3IgdG8KKyAgICAgICAgZGVsZXRpbmcgdGhlc2UgYnVmZmVycy4K
KworICAgICAgICBTZWUgcGVyLWNoYW5nZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmFzVGV4dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmR1bXAgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmlzRW1wdHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1
ZmZlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6c2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0
ZUN1cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjppdGVyYXRvcjo6Y2xlYXJDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlVG9FbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNv
clRvU3RhcnRPZkN1cnJlbnRCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6fml0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmJlZ2luIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5kIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZl
cklmRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDo6YWRkRHJhd2luZ0l0ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUF0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXNFbXB0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
SGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OnRha2VEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtSGFuZGxlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlOjppc0RyYXdpbmdJdGVtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6bV9hbGxvY2F0ZWRCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjptX3JlYWRPbmx5QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6bV93cml0YWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
bV93cml0dGVuTnVtYmVyT2ZCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVyOjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVyOjpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBlbmREYXRhQW5kTGVu
Z3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJIYW5kbGU6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGU6Om9wZXJhdG9yISBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6b3BlcmF0b3IhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjp0eXBlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjppcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6Z2V0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVu
dDo6fkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVudDo6fkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpzaXplSW5CeXRlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6aXNFbXB0
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpzZXRDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnJlYWRPbmx5
QnVmZmVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cjo6dW5jaGVja2VkQXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpTZXRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6RHJhd0dseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6Z2VuZXJhdGVHbHlwaEJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6YXBwbHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPDwpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6RHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OkRy
YXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1
c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50
RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6SXRl
bSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUlu
Qnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJ
dGVtOjpEcmF3aW5nSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6U2F2ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVzdG9yZTo6UmVzdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VHJhbnNsYXRlOjpUcmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTY2FsZTo6U2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Q29uY2F0ZW5hdGVDVE0pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxs
Q29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpTZXRMaW5l
RGFzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpv
aW46OlNldExpbmVKb2luKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6Q2xlYXJTaGFkb3cpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OkNsaXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBPdXQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpDbGlw
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OkRyYXdJbWFn
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1h
Z2U6OkRyYXdUaWxlZEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6RHJhd0lt
YWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UmVjdDo6RHJhd1JlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdMaW5lOjpEcmF3TGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
OkRyYXdFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0aDo6RHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OkZpbGxSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJl
Y3RXaXRoQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZp
bGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tl
SW5saW5lUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlUGF0aDo6U3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRl
cm46OkFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNhdmU6Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6
bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlc3Rv
cmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
VHJhbnNsYXRlOjpUcmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRy
YW5zbGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlRyYW5zbGF0ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSb3RhdGU6OlJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Um90YXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Um90YXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2NhbGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTY2FsZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06OlNldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
Q1RNOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0Q1RNOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpTZXRJbmxpbmVGaWxsQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y29sb3Ig
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xv
cjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dElubGluZUZpbGxDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6U2V0SW5saW5lU3Ryb2tlQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpj
b2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OlNldFN0cm9rZVRoaWNr
bmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
Ojp0aGlja25lc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
cm9rZVRoaWNrbmVzczo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OlNldExpbmVDYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
OjpTZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURh
c2g6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRMaW5lRGFzaDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVKb2luOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJT
aGFkb3c6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclNoYWRvdzo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwOjpDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0OjpDbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpy
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwT3V0VG9QYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpDbGlwUGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdp
bmdDb21tYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6
Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0dseXBoczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3R2x5cGhzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdJbWFnZTo6RHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ltYWdlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFn
ZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVy
OjpEcmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpzb3VyY2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6ZGVzdGluYXRpb25S
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd05hdGl2ZUltYWdlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6
bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRy
YW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpEcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1JlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6RHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpEcmF3RWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNl
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg6OkRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdGb2N1c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdSZWN0czo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dDo6RmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0Ojpy
ZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xv
cjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhH
cmFkaWVudDo6cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6
OkZpbGxDb21wb3NpdGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bENvbXBvc2l0ZWRSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OkZpbGxSb3Vu
ZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSb3VuZGVkUmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5s
aW5lUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxQYXRoOjpGaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjppbWFnZURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
SW1hZ2VEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50
RnJhbWVGb3JNZWRpYTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OlN0cm9r
ZUlubGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGlu
ZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U3Ryb2tlUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlN0cm9rZUVsbGlwc2U6OlN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpDbGVhclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6
bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5
U3Ryb2tlUGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFj
dG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6
c2V0RXh0ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
aW5nSXRlbTo6ZXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3aW5nSXRlbTo6ZXh0ZW50S25vd24gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpsb2NhbEJvdW5kcyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06Omds
b2JhbEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTYXZlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNhdmU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVzdG9yZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXN0b3JlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6ZW5jb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RN
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRDVE06OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxHcmFkaWVudDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRlY29kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlj
a25lc3M6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpkZWNvZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVK
b2luOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVKb2luOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVKb2luOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFy
U2hhZG93OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsZWFyU2hhZG93OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXA6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdHbHlwaHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Bh
dHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Jl
Y3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1JlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1JlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxs
aXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3RWxsaXBzZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsRWxsaXBzZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZVJlY3Q6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0
aDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZUVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ry
b2tlUGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxs
UGF0dGVybjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hh
bmdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFy
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGlu
ZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVE
YXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpv
aW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxp
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0
aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0
ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjphcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZXBsYXllcjo6cmVwbGF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0ZTo6YXBwbHkpOgorCiAyMDIwLTExLTAzICBBbnRvaW5l
IFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIGFsaWduLWNvbnRlbnQgc2hv
dWxkIGJlIGEgZGlzY3JldGUgYW5pbWF0YWJsZSBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2Mzg4Yjlj
M2EyYWRhNzE5ODAyYTkxMjdmNWE2MDVhNTlmOThhMDgyLi44NjkxNjI1ZGY1ODY3OWY2MTU5N2E0
YjRjMTJiZWI2NWI0ZTJjYTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTExLTAz
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25j
dXJyZW50IGRpc3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkg
aW50byBzaGFyZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGp1c3QgZm9yIGNoYW5nZXMgdG8gZGlzcGxheSBsaXN0cyBhbmQgZGlzcGxh
eSBsaXN0IGl0ZW1zIGluIFdlYkNvcmUgKHNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9y
IG1vcmUKKyAgICAgICAgaW5mb3JtYXRpb24pLiBJbiBwYXJ0aWN1bGFyLCB3ZSBpbXBsZW1lbnQg
dGhlIHJlYWRpbmcgYW5kIHdyaXRpbmcgY2xpZW50IGhvb2tzIGNvbnN1bHRlZCBieSBJdGVtQnVm
ZmVyLCBhbmQgd2UKKyAgICAgICAgYWxzbyBhZGQgYSB0ZW1wb3JhcnkgbWVjaGFuaXNtIHRoYXQg
YWxsb3dzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSAoaW4gdGhlIHdlYiBwcm9jZXNzKSB0
byBzZW5kIGRpc3BsYXkgbGlzdAorICAgICAgICBpdGVtIGRhdGEgdGhyb3VnaCBzaGFyZWQgbWVt
b3J5IHRvIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIChpbiB0aGUgR1BVIHByb2Nlc3MpLiBU
aGlzIHRlbXBvcmFyeSBtZWNoYW5pc20KKyAgICAgICAgZG9lcyBub3QgYXR0ZW1wdCB0byBtYWtl
IGFueSByZWFkaW5nIG9yIHdyaXRpbmcgaW4gc2hhcmVkIG1lbW9yeSBjb25jdXJyZW50IGJldHdl
ZW4gdGhlIEdQVSBhbmQgd2ViIHByb2Nlc3NlcywKKyAgICAgICAgYW5kIGV4aXN0cyBvbmx5IHRv
IG1ha2Ugc3VyZSB0aGF0IHJlbmRlcmluZyB3aXRoIHRoZSBHUFUgcHJvY2VzcyBzdGlsbCB3b3Jr
cyB1c2luZyB0aGVzZSBuZXcgZGlzcGxheSBsaXN0IGl0ZW1zLgorCisgICAgICAgIEluIHRoZSBu
ZXh0IHBhdGNoLCBJIHdpbGwgYWRkIGEgc2ltcGxlIGNvbmN1cnJlbnQgcmVhZGVyL3dyaXRlciBt
b2RlbCBmb3IgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgd2Vi
IGFuZCBHUFUgcHJvY2Vzc2VzLCBhbmQgKGluIGRvaW5nIHNvKSByZXZlcnQgbW9zdCBvZiB0aGUg
Y2hhbmdlcyBpbiBgUmVtb3RlUmVuZGVyaW5nQmFja2VuZGAgYW5kCisgICAgICAgIGBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHlgIGJlbG93LgorCisgICAgICAgIFNlZSBjb21tZW50cyBiZWxv
dyBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpkZWNv
ZGVBbmRDcmVhdGUpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5UmVzb3VyY2VJdGVtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6YXBwbHlNZWRpYUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjphcHBseURpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAq
IFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxp
c3QgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlOjpkZWNvZGUpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVBy
b3h5LmNwcDoKKwogMjAyMC0xMS0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBbbWFjT1NdIHJlbW92ZSBzeXNjdGwub2lkZm10LiBhY2Nlc3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IGVjNzBiNDY0MjM4NTEzNjZhNGE0MTQ2NDU4N2I1NDVmNWI3ZTNiZTUu
LmNmMjI1OTA1MjM0ZDEzYjE3YTEwNDE0ZDU0MzM5ZGRhOTkzMjYxYzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtMTI0Miw2ICsxMjQyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNTU5NmZi
OWViOGU5OTZlZGY3NWQyMGYyYmUwM2NlYTIxM2U3OTA0MS4uNjNiM2VkNjZlMjMzMWYzN2U3NTRl
ZGFiYWY0YzljYTg1N2JmZTA1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE5NjEsNiArMTk2MSw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBmM2M4MmVj
YWIwZDg4MjFhMTNkZDJiYTM0MjNkYTVhYzQxN2JkOTQuLjIzOWY0N2IwYTAyY2JmN2QzYzhmYzkx
OWMyYTRlNTM4OGU3NTlkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUxNjEsNiArNTE2MSw3IEBACiAJCUYzQUJGRTBDMTMw
RTlEQTAwMEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3RDEgLyog
SW5zdHJ1bWVudGluZ0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBDQTBEMDkg
LyogSlNFcnJvckhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICov
OyB9OwogCQlGNDAzRTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIzNjNCNThD
MDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0Mjky
NjE4MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRENDQwMDAw
Nzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQgLyogU3Rh
dGljUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDM3N0Q1NzI1
NTFDOUM2MDA4MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQzNzdENTUyNTUxQzlDNjAwODBBQkZFIC8q
IERpc3BsYXlMaXN0SXRlbVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTE4Niw2ICs1MTg3LDcgQEAKIAkJRjQ4RDJBN0UyMTU3MTgyNjAw
QzY3NTJCIC8qIEZvbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkE3MTIxNTZEQzBBMDBDNjc1MkIgLyogRm9udEF0dHJpYnV0
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
NDhEMkFBNTIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8q
IENvbG9yQ29jb2EuaCAqLzsgfTsKIAkJRjQ5Nzg2ODgxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3Rl
Ym9hcmRJdGVtSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUY0QTZENkE0
MjU0QzUxMkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEg
LyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUY0QjQyMkM0MjIwQzA1NjgwMDlFMUU3RCAvKiBET01QYXN0ZUFj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRC
NDIyQzIyMjBDMDAwMDAwOUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCRkI5ODUxRTFEREY5QjAwODYy
QzI0IC8qIER1bXBFZGl0aW5nSGlzdG9yeS5qcyBpbiBDb3B5IFNjcmlwdHMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4Mzg5ODMxRTFEREYyQjAwNzZCN0VBIC8qIER1bXBF
ZGl0aW5nSGlzdG9yeS5qcyAqLzsgfTsKIAkJRjRCRkI5ODYxRTFEREY5QjAwODYyQzI0IC8qIEVk
aXRpbmdIaXN0b3J5VXRpbC5qcyBpbiBDb3B5IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ4Mzg5ODQxRTFEREYyQjAwNzZCN0VBIC8qIEVkaXRpbmdIaXN0b3J5
VXRpbC5qcyAqLzsgfTsKQEAgLTE2MzE2LDYgKzE2MzE4LDggQEAKIAkJRjNENDYxNDcxMTYxRDUz
MjAwQ0EwRDA5IC8qIEpTRXJyb3JIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRXJyb3JIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
MDNFNzg1MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RW50ZXJLZXlIaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MDNFNzg2MjM2
M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW50
ZXJLZXlIaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQyMkI4QjUyNTNG
NzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQy
MkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNDI5MjYxNzI1MjY0RDQ0MDAwMDc4OTggLyogTWVkaWFQbGF5ZXJJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVySWRlbnRpZmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0
dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRBdHRyaWJ1
dGVDaGFuZ2VzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MzNFOTAy
MURCQkRCQTIwMEVGMEQxNCAvKiBTdGF0aWNQYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0YXRpY1Bhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2MzcxLDYgKzE2Mzc1LDggQEAKIAkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJC
IC8qIENvbG9yQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb2xvckNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyog
UGFzdGVib2FyZEl0ZW1JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRJdGVtSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDlFOThFNDIxREVFNkMxMDA5QUU1NUUg
LyogRWRpdEFjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0QWN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QTMyNTRDNTEyQzAwQjY1RkFBIC8qIERp
c3BsYXlMaXN0SXRlbVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBNjI1NEM1MUU5MDBCNjVGQUEg
LyogRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlz
dEl0ZW1UeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRCNDIyQzIyMjBD
MDAwMDAwOUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBhc3Rl
QWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QzVGMjA1MjQ3OUU3RUUw
MEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRJbWFnZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEM1RjIwODI0
NzlFOUM4MDBFOUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTc2MjYsNiArMTc2MzIsOCBAQAogCQkJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5MyAv
KiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3MkVBMDlGOTIzRkNDQzZB
MDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTcyRUEwOUY3
MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCisJCQkJRjQy
MkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8sCisJ
CQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICov
LAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAq
LywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICov
LAogCQkJCUY0Mzc3RDU2MjU1MUM5QzYwMDgwQUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNw
cCAqLywKQEAgLTMxNDU0LDYgKzMxNDYyLDcgQEAKIAkJCQkxQ0FGNTZEQjI1MzAxQUM4MDAxN0I0
NzIgLyogRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NUFEMDkzRTI0MDg5NjM1MDBERTREMkYgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3
N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZC
RDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RS
ZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDk2MzUzYWRlZGZmMTFlZDVkNDE1YWQ1
N2ZkZmRiNGIyODBkNTA0ZGQuLjBiMzVhYzY0ZmE4YjlmZmUwYzk0NDg1ZTk3M2YyNGMyYWEwZjM0
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCkBAIC0xNjMsMTAgKzE2MywxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgewogICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwogCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmKTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBv
cGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBlbnVtIENoYW5nZSA6IHVp
bnQzMl90IHsKICAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggZmZkOWQ2ZGRmYjYwYWMx
YTA5NzIyZGZhZGM4MmYxMTUzMGU5MjBhMS4uZGIxM2FmZjE3OGQyMWNhZGY2NDI4NWQ4MDFlOWNk
YjVkZjUzNmJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0yNiw4ICsyNiwxMCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1z
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KIApAQCAtNDgsMTcgKzUwLDQwIEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoKSBjb25z
dAogfQogI2VuZGlmCiAKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmIG90
aGVyKQorICAgIDogbV9pdGVtcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIp
KQorICAgICwgbV9kcmF3aW5nSXRlbUV4dGVudHMoc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdp
bmdJdGVtRXh0ZW50cywgeyB9KSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KEl0
ZW1CdWZmZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAgICA6IG1faXRlbXMobWFrZVVuaXF1ZTxJdGVt
QnVmZmVyPihXVEZNb3ZlKGhhbmRsZXMpKSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0KCkgPSBkZWZhdWx0OworRGlzcGxheUxpc3Q6On5EaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsK
KworRGlzcGxheUxpc3QmIERpc3BsYXlMaXN0OjpvcGVyYXRvcj0oRGlzcGxheUxpc3QmJiBvdGhl
cikKK3sKKyAgICBtX2l0ZW1zID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zLCBudWxscHRy
KTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0ZW50cyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kcmF3
aW5nSXRlbUV4dGVudHMsIHsgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIERpc3Bs
YXlMaXN0OjpjbGVhcigpCiB7Ci0gICAgbV9saXN0LmNsZWFyKCk7CisgICAgaWYgKG1faXRlbXMp
CisgICAgICAgIG1faXRlbXMtPmNsZWFyKCk7CisgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuY2xl
YXIoKTsKIH0KIAotYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZs
YWdzIGZsYWdzLCBjb25zdCBJdGVtJiBpdGVtKQorYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVt
cEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7CiAgICAgc3dp
dGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAg
ICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkg
ewotICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gZG93bmNhc3Q8U2V0U3RhdGU+
KGl0ZW0pOworICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0
U3RhdGU+KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBp
dGVtIGlmIHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMu
CiAgICAgICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzLDEwICsxMDgsMTQgQEAgYm9vbCBEaXNw
bGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBjb25zdCBJdGVt
JiBpdGVtKQogU3RyaW5nIERpc3BsYXlMaXN0Ojphc1RleHQoQXNUZXh0RmxhZ3MgZmxhZ3MpIGNv
bnN0CiB7CiAgICAgVGV4dFN0cmVhbSBzdHJlYW0oVGV4dFN0cmVhbTo6TGluZU1vZGU6Ok11bHRp
cGxlTGluZSwgVGV4dFN0cmVhbTo6Rm9ybWF0dGluZzo6U1ZHU3R5bGVSZWN0KTsKLSAgICBmb3Ig
KGF1dG8mIGl0ZW0gOiBtX2xpc3QpIHsKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAq
dGhpcykgewogICAgICAgICBpZiAoIXNob3VsZER1bXBGb3JGbGFncyhmbGFncywgaXRlbSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdy
b3VwKHN0cmVhbSk7CiAgICAgICAgIHN0cmVhbSA8PCBpdGVtOworICAgICAgICBpZiAoaXRlbS5p
c0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIiBleHRlbnQgIiA8PCBleHRl
bnQ7CiAgICAgfQogICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOwogfQpAQCAtOTYsMTAgKzEy
NSwxMSBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAg
IFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwogICAgIHRzIDw8ICJkaXNwbGF5IGxp
c3QiOwogCi0gICAgc2l6ZV90IG51bUl0ZW1zID0gbV9saXN0LnNpemUoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKLSAgICAgICAgVGV4dFN0cmVhbTo6R3Jv
dXBTY29wZSBzY29wZSh0cyk7Ci0gICAgICAgIHRzIDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5n
ZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhpcykgeworICAgICAgICBU
ZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAg
ICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAgICAgdHMgPDwgIiBleHRl
bnQgIiA8PCBleHRlbnQ7CiAgICAgfQogICAgIHRzLnN0YXJ0R3JvdXAoKTsKICAgICB0cyA8PCAi
c2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOwpAQCAtMTA4LDEzICsxMzgsMjc4IEBA
IHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAKIHNpemVfdCBE
aXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAogewotICAgIHNpemVfdCByZXN1bHQgPSAw
OwotICAgIGZvciAoYXV0byYgcmVmIDogbV9saXN0KQotICAgICAgICByZXN1bHQgKz0gSXRlbTo6
c2l6ZUluQnl0ZXMocmVmKTsKKyAgICByZXR1cm4gbV9pdGVtcyA/IG1faXRlbXMtPnNpemVJbkJ5
dGVzKCkgOiAwOworfQorCitib29sIERpc3BsYXlMaXN0Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIW1faXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpOworfQorCitJdGVtQnVmZmVy
JiBEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2l0ZW1zKQorICAgICAg
ICBtX2l0ZW1zID0gbWFrZVVuaXF1ZTxJdGVtQnVmZmVyPigpOworICAgIHJldHVybiAqbV9pdGVt
czsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVy
UmVhZGluZ0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xp
ZW50KTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVm
ZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQo
Y2xpZW50KTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rp
b248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7
CisgICAgaWYgKG1faXRlbXMpCisgICAgICAgIG1faXRlbXMtPmZvckVhY2hJdGVtQnVmZmVyKFdU
Rk1vdmUobWFwRnVuY3Rpb24pKTsKK30KIAotICAgIHJldHVybiByZXN1bHQ7Cit2b2lkIERpc3Bs
YXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCkpOworICAgIG1fdHJh
Y2tzRHJhd2luZ0l0ZW1FeHRlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgRGlzcGxheUxpc3Q6OmFw
cGVuZChJdGVtSGFuZGxlIGl0ZW0pCit7CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAg
IGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5n
ZXQ8U2F2ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxU
cmFuc2xhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
U2NhbGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0
PFNldENUTT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50Ogor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oaXRlbS5nZXQ8U2V0
SW5saW5lRmlsbEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdl
dDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0
cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZVN0cm9rZUNvbG9yPihp
dGVtLmdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVz
cz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3Rh
dGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0
ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFk
b3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcE91dD4oaXRlbS5n
ZXQ8Q2xpcE91dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihpdGVtLmdldDxDbGlwT3V0VG9QYXRoPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxD
bGlwUGF0aD4oaXRlbS5nZXQ8Q2xpcFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBU
b0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogU3VwcG9ydCB0aGUg
YWJpbGl0eSB0byBjbG9uZSBkaXNwbGF5IGxpc3RzICh0aGlzIGlzIGN1cnJlbnRseSBvbmx5IHVz
ZWQgZm9yIGRpc3BsYXkgbGlzdCB0cmFja2luZykuCisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ds
eXBoczoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3R2x5cGhzPihpdGVtLmdldDxEcmF3R2x5
cGhzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8RHJhd0ltYWdlPihpdGVtLmdldDxEcmF3SW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdUaWxlZEltYWdl
PihpdGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGl0ZW0uZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVy
PihpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdO
YXRpdmVJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0u
Z2V0PERyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PERyYXdQYXR0ZXJu
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxEcmF3UmVjdD4oaXRlbS5nZXQ8RHJhd1JlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lPihpdGVtLmdldDxEcmF3TGlu
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxEcmF3TGluZXNGb3JUZXh0Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0uZ2V0PERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdFbGxpcHNlPihpdGVtLmdldDxEcmF3RWxsaXBz
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RHJhd1BhdGg+KGl0ZW0uZ2V0PERyYXdQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0
aD4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVj
dHM+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3Q+KGl0ZW0uZ2V0PEZpbGxS
ZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29s
b3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0Ogor
ICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENv
bXBvc2l0ZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRl
ZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtLmdldDxG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RmlsbElubGluZVBhdGg+KGl0ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxQ
YXRoPihpdGVtLmdldDxGaWxsUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlw
c2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbEVsbGlwc2U+KGl0ZW0uZ2V0PEZpbGxFbGxp
cHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+KCkpOworICAgIGNh
c2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxQ
YWludEZyYW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VS
ZWN0PihpdGVtLmdldDxTdHJva2VSZWN0PigpKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFN0cm9rZUlubGluZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZUlubGluZVBhdGg+KCkpOwor
I2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTdHJva2VQYXRoPihpdGVtLmdldDxTdHJva2VQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZUVsbGlwc2U+
KGl0ZW0uZ2V0PFN0cm9rZUVsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclJlY3Q+KGl0ZW0uZ2V0PENsZWFyUmVjdD4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdldDxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXll
cjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5nZXQ8
RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseVN0cm9rZVBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlTdHJva2VQ
YXR0ZXJuPihpdGVtLmdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlGaWxsUGF0
dGVybj4oaXRlbS5nZXQ8QXBwbHlGaWxsUGF0dGVybj4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0uZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkp
OworICAgIH0KK30KKworYm9vbCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kKCkgY29uc3QK
K3sKKyAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgYXV0byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8g
ZW5kQ3Vyc29yID0gaXRlbXMubV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRlbXMubV93cml0dGVu
TnVtYmVyT2ZCeXRlczsKKyAgICByZXR1cm4gbV9jdXJzb3IgPT0gZW5kQ3Vyc29yOworfQorCit2
b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0oKQoreworICAgIGNs
ZWFyQ3VycmVudEl0ZW0oKTsKKworICAgIGlmIChhdEVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgYXV0byBpdGVt
VHlwZSA9IHN0YXRpY19jYXN0PEl0ZW1UeXBlPihtX2N1cnNvclswXSk7CisgICAgaWYgKGlzRHJh
d2luZ0l0ZW0oaXRlbVR5cGUpICYmICFtX2Rpc3BsYXlMaXN0Lm1fZHJhd2luZ0l0ZW1FeHRlbnRz
LmlzRW1wdHkoKSkgeworICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBtX2Rpc3BsYXlMaXN0Lm1f
ZHJhd2luZ0l0ZW1FeHRlbnRzW21fZHJhd2luZ0l0ZW1JbmRleF07CisgICAgICAgIG1fZHJhd2lu
Z0l0ZW1JbmRleCsrOworICAgIH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBXVEY6
Om51bGxvcHQ7CisKKyAgICBhdXRvKiBjbGllbnQgPSBpdGVtcy5tX3JlYWRpbmdDbGllbnQ7Cisg
ICAgaWYgKCFpc0lubGluZUl0ZW0oaXRlbVR5cGUpICYmIGNsaWVudCkgeworICAgICAgICBhdXRv
IHNpemVPZlR5cGVBbmRJdGVtID0gc2l6ZU9mSXRlbUluQnl0ZXMoaXRlbVR5cGUpICsgc2l6ZW9m
KEl0ZW1UeXBlKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBzaXpl
T2ZUeXBlQW5kSXRlbSA8PSBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA/IG1fZml4
ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgOiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihmYXN0
TWFsbG9jKHNpemVPZlR5cGVBbmRJdGVtKSk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlckZvckRl
Y29kZWRJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXRlbVR5cGUpOworCisgICAgICAg
IGF1dG8gc2l6ZU9mRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4obV9jdXJzb3IgKyBz
aXplb2YoSXRlbVR5cGUpKVswXTsKKyAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBtX2N1
cnNvciArIHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgc2l6ZV90
IHBhZGRpbmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oc3RhcnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRf
dCk7CisgICAgICAgIGF1dG8gZGVjb2RlZEl0ZW1IYW5kbGUgPSBjbGllbnQtPmRlY29kZUl0ZW0o
c3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nLCBzaXplT2ZEYXRhLCBpdGVtVHlwZSwgbV9jdXJyZW50
QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBpZiAoIWRlY29kZWRJdGVtSGFuZGxlKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBjcmFzaGluZywgdGhpcyBuZWVkcyB0
byBmYWlsIGdyYWNlZnVsbHkgYW5kIGluZm9ybSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLy8g
Rm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGFzc2VydGlvbiBtYWtlcyBidWdzIGluIGl0ZW0gYnVm
ZmVyIGVuY29kaW5nIGxvZ2ljIGVhc2llcgorICAgICAgICAgICAgLy8gdG8gY2F0Y2ggYnkgYXZv
aWRpbmcgbXlzdGVyaW91cyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3RseSBhbGln
bmVkIGl0ZW1zCisgICAgICAgICAgICAvLyBkb3duIHRoZSBsaW5lLgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2N1cnJlbnRJ
dGVtID0gKmRlY29kZWRJdGVtSGFuZGxlOworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVm
ZmVyID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIHNpemVP
ZkRhdGE7CisgICAgICAgIG1fY3VycmVudEl0ZW1FeGlzdHNJblRlbXBvcmFyeUJ1ZmZlciA9IHRy
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IEl0ZW1IYW5kbGUgeyBt
X2N1cnNvciB9OworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gbV9jdXJyZW50
SXRlbS5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2
YW5jZSgpCit7CisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vy
c29yICs9IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXI7CisKKyAgICBpZiAobV9jdXJzb3IgPT0g
bV9jdXJyZW50RW5kT2ZCdWZmZXIgJiYgbV9yZWFkT25seUJ1ZmZlckluZGV4IDwgbV9kaXNwbGF5
TGlzdC5tX2l0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCkpIHsKKyAgICAgICAgbV9yZWFk
T25seUJ1ZmZlckluZGV4Kys7CisgICAgICAgIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVm
ZmVyKCk7CisgICAgfQorCisgICAgdXBkYXRlQ3VycmVudEl0ZW0oKTsKK30KKwordm9pZCBEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVudEl0ZW0oKQoreworICAgIGlmIChtX2N1cnJl
bnRCdWZmZXJGb3JEZWNvZGVkSXRlbSkgeworICAgICAgICBtX2N1cnJlbnRJdGVtLmRlc3Ryb3ko
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtICE9
IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMpKQorICAgICAgICAgICAgZmFzdEZyZWUobV9j
dXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgIH0KKworICAgIG1fY3VycmVudEl0ZW0g
PSB7IH07CisgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50
QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBudWxscHRyOworICAgIG1fY3VycmVudEl0ZW1FeGlzdHNJ
blRlbXBvcmFyeUJ1ZmZlciA9IGZhbHNlOworfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRv
cjo6bW92ZVRvRW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1f
aXRlbXMpIHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5kYXRh
ICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1fY3VycmVudEVuZE9m
QnVmZmVyID0gbV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9IGl0ZW1z
LT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0
OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKQoreworICAgIGF1
dG8mIGl0ZW1zID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICghaXRlbXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMgPSBpdGVtcy0+
bV9yZWFkT25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXgg
PCBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBuZXh0QnVmZmVySGFu
ZGxlID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZmZXJJbmRleF07Cisg
ICAgICAgIG1fY3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAgICAgICBtX2N1cnJl
bnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5jYXBhY2l0eTsKKyAg
ICB9IGVsc2UgaWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJPZlJlYWRPbmx5QnVm
ZmVycykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRhdGE7
CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBpdGVtcy0+bV93cml0
dGVuTnVtYmVyT2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5k
ZXggZjljOTM5OGYwYjcyMjI0ZjY5MDJhMzhmNzk1NzU2MzJkMWIxYTMyMC4uYTRkNzk3OTAxMjI1
NWQwODBkOWY4MDI4ZDU0NTU1NTg0NjZmZDlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAg
LTI1LDExICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0
SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQwLDM0ICs0
Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAot
Y2xhc3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKLXB1YmxpYzoKLSAgICBJdGVt
KCkgPSBkZWxldGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBJdGVtKEl0ZW1UeXBlKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JdGVtKCk7Ci0KLSAgICBJdGVtVHlwZSB0eXBlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotI2lmICFkZWZpbmVk
KE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVt
Jik7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxJ
dGVtPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBJdGVtVHlwZSBtX3R5cGU7
Ci19OwotCiBlbnVtIEFzVGV4dEZsYWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAwLAogICAgIEluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAs
CkBAIC04MCw4NiArNTUsMTEwIEBAIGNsYXNzIERpc3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xh
c3MgUmVjb3JkZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGxheWVyOwogcHVibGljOgotICAgIERp
c3BsYXlMaXN0KCkgPSBkZWZhdWx0OwotICAgIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0g
ZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVf
RVhQT1JUIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERp
c3BsYXlMaXN0KEl0ZW1CdWZmZXJIYW5kbGVzJiYpOwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJh
dG9yPShEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3Bs
YXlMaXN0KCk7CiAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAot
ICAgIGNvbnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0
OyB9Ci0gICAgSXRlbSYgaXRlbUF0KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpbmRleCA8IG1fbGlzdC5zaXplKCkpOwotICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5n
ZXQoKTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aXNFbXB0eSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygp
IGNvbnN0OwogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1w
dHkoKTsgfQotICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwotICAgIAogICAgIFN0cmlu
ZyBhc1RleHQoQXNUZXh0RmxhZ3MpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Kik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50
Kik7CisKICNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKICAgICBXVEY6OkNT
dHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAo
KSBjb25zdDsKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEaXNwbGF5TGlzdD4gZGVjb2RlKERlY29kZXImKTsKLQorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVy
SGFuZGxlJik+JiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4g
QXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpOworICAgIHZvaWQgYXBwZW5kKEl0ZW1I
YW5kbGUpOworCisgICAgYm9vbCB0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSBjb25zdCB7IHJl
dHVybiBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50czsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wpOworCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBjbGFzcyBJbW1lZGlhdGVseU1vdmVUb0Vu
ZCB7IE5vLCBZZXMgfTsKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBJbW1lZGlhdGVseU1vdmVUb0VuZCBpbW1lZGlhdGVseU1vdmVUb0VuZCA9IEltbWVk
aWF0ZWx5TW92ZVRvRW5kOjpObykKKyAgICAgICAgICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5
TGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGltbWVkaWF0ZWx5TW92ZVRvRW5kID09
IEltbWVkaWF0ZWx5TW92ZVRvRW5kOjpZZXMpCisgICAgICAgICAgICAgICAgbW92ZVRvRW5kKCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlQ3Vyc29yVG9TdGFydE9m
Q3VycmVudEJ1ZmZlcigpOworICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRJdGVtKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB+aXRlcmF0b3IoKQorICAgICAgICB7
CisgICAgICAgICAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiAmbV9kaXNwbGF5
TGlzdCA9PSAmb3RoZXIubV9kaXNwbGF5TGlzdCAmJiBtX2N1cnNvciA9PSBvdGhlci5tX2N1cnNv
cjsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICB2b2lkIG9wZXJhdG9yKysoKSB7IGFk
dmFuY2UoKTsgfQorICAgICAgICBzdGQ6OnBhaXI8SXRlbUhhbmRsZSwgT3B0aW9uYWw8RmxvYXRS
ZWN0Pj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyBtX2N1cnJlbnRJdGVtLCBtX2N1cnJl
bnRFeHRlbnQgfTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZU9mRml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgPSAyNTY7CisKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUb0VuZCgpOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB1cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
dmFuY2UoKTsKKyAgICAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OworCisgICAgICAgIGNvbnN0IERp
c3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworICAgICAgICB1aW50OF90KiBtX2N1cnNvciB7IG51
bGxwdHIgfTsKKyAgICAgICAgc2l6ZV90IG1fcmVhZE9ubHlCdWZmZXJJbmRleCB7IDAgfTsKKyAg
ICAgICAgc2l6ZV90IG1fZHJhd2luZ0l0ZW1JbmRleCB7IDAgfTsKKyAgICAgICAgdWludDhfdCog
bV9jdXJyZW50RW5kT2ZCdWZmZXIgeyBudWxscHRyIH07CisKKyAgICAgICAgdWludDhfdCBtX2Zp
eGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zW3NpemVPZkZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1z
XSB7IDAgfTsKKyAgICAgICAgdWludDhfdCogbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0g
eyBudWxscHRyIH07CisgICAgICAgIEl0ZW1IYW5kbGUgbV9jdXJyZW50SXRlbTsKKyAgICAgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBtX2N1cnJlbnRFeHRlbnQ7CisgICAgICAgIHNpemVfdCBtX2N1
cnJlbnRJdGVtU2l6ZUluQnVmZmVyIHsgMCB9OworICAgICAgICBib29sIG1fY3VycmVudEl0ZW1F
eGlzdHNJblRlbXBvcmFyeUJ1ZmZlciB7IGZhbHNlIH07CisgICAgfTsKKworICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkltbWVkaWF0ZWx5TW92ZVRvRW5kOjpZ
ZXMgfTsgfQogCiBwcml2YXRlOgotICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4mJiBpdGVtKQot
ICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICAgICAgcmV0
dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAgfQorICAgIEl0ZW1CdWZmZXIqIGl0ZW1CdWZm
ZXJJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuZ2V0KCk7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVyKCk7CiAKLSAgICAvLyBMZXNzIGVmZmljaWVu
dCBhcHBlbmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tpbmcgcmVwbGF5LgotICAgIHZvaWQgYXBwZW5k
SXRlbShJdGVtJiBpdGVtKQorICAgIHZvaWQgYWRkRHJhd2luZ0l0ZW1FeHRlbnQoT3B0aW9uYWw8
RmxvYXRSZWN0PiYmIGV4dGVudCkKICAgICB7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoaXRlbSk7
CisgICAgICAgIEFTU0VSVChtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk7CisgICAgICAgIG1f
ZHJhd2luZ0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZNb3ZlKGV4dGVudCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgY29uc3QgSXRlbSYp
OworICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhh
bmRsZSk7CiAKLSAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsg
fQotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
dGVtQnVmZmVyPiBtX2l0ZW1zOworICAgIFZlY3RvcjxPcHRpb25hbDxGbG9hdFJlY3Q+PiBtX2Ry
YXdpbmdJdGVtRXh0ZW50czsKKyAgICBib29sIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzIHsg
dHJ1ZSB9OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEaXNwbGF5TGlz
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgor
dm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQogewotICAgIE9wdGlvbmFs
PHVpbnQ2NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBpdGVtQ291bnQ7Ci0gICAgaWYg
KCFpdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBEaXNwbGF5
TGlzdCBkaXNwbGF5TGlzdDsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCAqaXRlbUNv
dW50OyBpKyspIHsKLSAgICAgICAgYXV0byBpdGVtID0gSXRlbTo6ZGVjb2RlKGRlY29kZXIpOwot
ICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gZGVjb2RlIGFsbCB0eXBlcywgZmFpbGluZyB0
byBkZWNvZGUgYW4gaXRlbSBzaG91bGQgdHVybiBpbnRvIGEgZGVjb2RlIGZhaWx1cmUuCi0gICAg
ICAgIC8vIEZvciBub3csIHdlIGp1c3QgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAgICAgIGlmICgh
aXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXNwbGF5TGlzdC5hcHBlbmQo
V1RGTW92ZSgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5TGlzdDsKKyAgICBp
dGVtQnVmZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAK
IH0gLy8gRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBmN2NhNmJiZmZkOThm
YTBkZjY4YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4wODFjZWM3OWUzYzlhZTJhMjgwNGMwMTUxZWVh
ZjNjNWIyOWI5Njc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAg
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0
ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1cGRhdGVTdHJva2VDb2xvcihDR0dTdGF0ZUdl
dFN0cm9rZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxl
KGdzdGF0ZSkpOwogCi0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdH
bHlwaHM6OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJv
bVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBj
b3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhp
bmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oKm1fb3JpZ2luYWxGb250
LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwg
Y3VycmVudFRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4Lm1hcFBv
aW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CiAKICAgICBtX293bmVyLmNvbmNh
dENUTShpbnZlcnNlQ1RNRml4dXApOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYgZ3N0YXRlCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAogICAg
IGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIu
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgcmVjdCwg
e3sgfSwgaW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9
KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgRmxvYXRSZWN0KHJlY3Qp
LCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsg
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKIAogICAgIC8vIFVuZG8gdGhlIGFi
b3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgogICAgIG1fb3duZXIuc2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggMjNhYzMyNGI3YjAwYTll
MTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNiYmNhOWE4NTg0
ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtNDMsNyArNDMsNyBAQCBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIpCiAKIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKSk7
CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4u
Y3BwCmluZGV4IDIzYWMzMjRiN2IwMGE5ZTE2YTU2YWQ2NzBjZTA0Y2ZhNzdmYzlmYTguLjE0YzBl
YzcyYzQwZTBlODhiMTYzYmJjYTlhODU4NGVhYWVmNmE2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAtNDMs
NyArNDMsNyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRl
ciYgb3duZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBz
bW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5
cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlz
cGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
CmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdjYzAuLjk2ZTRiMWVm
Zjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAK
ICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdFQkNPUkVfRVhQT1JU
IFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgp
IHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNwbGF5TGlzdCB0YWtl
RGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxpc3QsIHsgfSk7
IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXllZERpc3BsYXlM
aXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3ZjM5
NjBmYjg0Njc4NDdmOGFhOTA3YWJhYjQwNmVlNzc2YTkwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDYyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKKworI2luY2x1ZGUg
IkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCit2b2lkIEl0ZW1IYW5k
bGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUo
KSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAgZ2V0PFNhdmU+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
UmVzdG9yZTogeworICAgICAgICBnZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAg
ICAgZ2V0PFRyYW5zbGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAgZ2V0PFJvdGF0ZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTY2FsZTogeworICAgICAgICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHsKKyAg
ICAgICAgZ2V0PENvbmNhdGVuYXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogeworICAgICAgICBnZXQ8U2V0
Q1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAgICBnZXQ8U2V0SW5saW5l
RmlsbEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogeworICAgICAgICBnZXQ8U2V0
SW5saW5lRmlsbENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB7CisgICAgICAgIGdl
dDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsKKyAgICAg
ICAgZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogeworICAgICAgICBnZXQ8
U2V0U3RhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBnZXQ8U2V0TGluZUNhcD4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46IHsKKyAgICAgICAgZ2V0PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAg
ICAgICAgZ2V0PFNldE1pdGVyTGltaXQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgZ2V0
PENsZWFyU2hhZG93PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHsKKyAgICAgICAgZ2V0PENsaXA+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDogeworICAgICAgICBnZXQ8Q2xpcE91dD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAg
IGdldDxDbGlwT3V0VG9QYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAgICAgIGdldDxDbGlwUGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsKKyAgICAgICAgZ2V0PENsaXBUb0RyYXdp
bmdDb21tYW5kcz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIGdldDxEcmF3R2x5cGhzPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdJbWFnZTogeworICAgICAgICBnZXQ8RHJhd0ltYWdlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZElt
YWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
QnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUlt
YWdlOiB7CisgICAgICAgIGdldDxEcmF3TmF0aXZlSW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHsK
KyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIGdldDxE
cmF3UmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogeworICAgICAgICBnZXQ8RHJhd0xpbmU+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmVzRm9yVGV4dDogeworICAgICAgICBnZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIGdldDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAgIGdldDxEcmF3RWxsaXBzZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0aDogeworICAgICAgICBnZXQ8RHJhd1BhdGg+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB7
CisgICAgICAgIGdldDxGaWxsUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogeworICAgICAg
ICBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAg
ICAgICAgZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDog
eworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDog
eworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDogeworICAgICAgICBnZXQ8Rmls
bElubGluZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBh
dGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAgICAgICAgZ2V0PEZpbGxFbGxpcHNlPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1
dEltYWdlRGF0YTogeworICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYTogeworICAgICAgICBnZXQ8UGFpbnRGcmFtZUZvck1lZGlhPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJl
Y3Q6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlSW5saW5lUGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlRWxsaXBzZTogeworICAgICAgICBnZXQ8U3Ryb2tlRWxsaXBzZT4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6IHsKKyAgICAgICAgZ2V0PENsZWFyUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOiB7CisgICAgICAgIGdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdldDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBVU0UoQ0cpCisgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseVN0cm9r
ZVBhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjogeworICAgICAgICBnZXQ8QXBwbHlGaWxs
UGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHsKKyAgICAgICAg
Z2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgfQorfQorCit2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQorewor
ICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDog
eworICAgICAgICBnZXQ8Q2xpcE91dFRvUGF0aD4oKS5+Q2xpcE91dFRvUGF0aCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAgICAg
IGdldDxDbGlwUGF0aD4oKS5+Q2xpcFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsKKyAgICAgICAgZ2V0PENs
aXBUb0RyYXdpbmdDb21tYW5kcz4oKS5+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHsK
KyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0aCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0czogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpLn5EcmF3Rm9jdXNSaW5n
UmVjdHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
R2x5cGhzOiB7CisgICAgICAgIGdldDxEcmF3R2x5cGhzPigpLn5EcmF3R2x5cGhzKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB7CisgICAg
ICAgIGdldDxEcmF3SW1hZ2U+KCkufkRyYXdJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjogeworICAgICAgICBnZXQ8RHJh
d0ltYWdlQnVmZmVyPigpLn5EcmF3SW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7CisgICAgICAgIGdldDxE
cmF3TGluZXNGb3JUZXh0PigpLn5EcmF3TGluZXNGb3JUZXh0KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOiB7CisgICAgICAgIGdl
dDxEcmF3TmF0aXZlSW1hZ2U+KCkufkRyYXdOYXRpdmVJbWFnZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7CisgICAgICAgIGdldDxEcmF3
UGF0aD4oKS5+RHJhd1BhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8RHJhd1BhdHRlcm4+KCkufkRyYXdQ
YXR0ZXJuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLn5EcmF3VGlsZWRJ
bWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5+
RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxDb21wb3Np
dGVkUmVjdD4oKS5+RmlsbENvbXBvc2l0ZWRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsKKyAgICAgICAgZ2V0PEZpbGxQYXRoPigp
Ln5GaWxsUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKS5+
RmlsbFJlY3RXaXRoQ29sb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+KCkufkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAgICAg
ICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLn5GaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3Vu
ZGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbFJvdW5kZWRSZWN0PigpLn5GaWxsUm91bmRlZFJl
Y3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGE6IHsKKyAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5+UHV0SW1hZ2VEYXRhKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHsK
KyAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLn5TZXRMaW5lRGFzaCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIGdldDxT
ZXRTdGF0ZT4oKS5+U2V0U3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VQYXRoPigpLn5TdHJv
a2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBseURldmljZVNjYWxlRmFjdG9yPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPEFwcGx5RmlsbFBhdHRlcm4+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEFwcGx5U3Ryb2tl
UGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QmVnaW5UcmFuc3BhcmVuY3lMYXll
cj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8Q2xlYXJSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsZWFyU2hhZG93Pjo6dmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6IHsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcD46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXBP
dXQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
Q29uY2F0ZW5hdGVDVE06IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8Q29uY2F0ZW5hdGVDVE0+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdFbGxpcHNlPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdMaW5l
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPERyYXdSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEVuZFRyYW5zcGFyZW5jeUxheWVyPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxF
bGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPEZpbGxFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQ
YXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPEZpbGxJbmxpbmVQYXRoPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbFJlY3Q+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlh
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFBhaW50RnJhbWVGb3JNZWRpYT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJlc3RvcmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFJvdGF0ZT46OnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNhdmU+Ojp2YWx1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2Nh
bGU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0Q1RNOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFNldENUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZp
bGxHcmFkaWVudDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5s
aW5lU3Ryb2tlQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lQ2FwPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0TWl0ZXJMaW1pdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhpY2tuZXNz
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U3Ryb2tlRWxsaXBzZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFN0cm9rZUlubGluZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZVJlY3Q+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6VHJh
bnNsYXRlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFRyYW5zbGF0ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9
Cit9CisKK2Jvb2wgSXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJdGVtKHR5cGUoKSk7Cit9CisKK0l0
ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDog
bV9yZWFkT25seUJ1ZmZlcnMoV1RGTW92ZShoYW5kbGVzKSkKK3sKK30KKworSXRlbUJ1ZmZlcjo6
SXRlbUJ1ZmZlcigpID0gZGVmYXVsdDsKKworSXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIoKQorewor
ICAgIGNsZWFyKCk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlciYmIG90
aGVyKQorICAgIDogbV9yZWFkaW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkaW5n
Q2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fd3JpdGluZ0NsaWVudChzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX25vbklubGluZUl0ZW1zSW5B
bGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9ub25JbmxpbmVJdGVtc0luQWxs
b2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fYWxsb2NhdGVkQnVmZmVycyhzdGQ6OmV4Y2hh
bmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fcmVhZE9ubHlCdWZm
ZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMsIHsgfSkpCisgICAgLCBt
X3dyaXRhYmxlQnVmZmVyKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0YWJsZUJ1ZmZlciwgeyB9
KSkKKyAgICAsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMoc3RkOjpleGNoYW5nZShvdGhlci5tX3dy
aXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKSkKK3sKK30KKworSXRlbUJ1ZmZlciYgSXRlbUJ1ZmZlcjo6
b3BlcmF0b3I9KEl0ZW1CdWZmZXImJiBvdGhlcikKK3sKKyAgICBtX3JlYWRpbmdDbGllbnQgPSBz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0cik7CisgICAgbV93cml0
aW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdDbGllbnQsIG51bGxwdHIp
OworICAgIG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnMsIHsgfSk7CisgICAgbV9h
bGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2FsbG9jYXRlZEJ1ZmZlcnMs
IHsgfSk7CisgICAgbV9yZWFkT25seUJ1ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVh
ZE9ubHlCdWZmZXJzLCB7IH0pOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRl
cyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitJdGVtQnVmZmVySGFuZGxlIEl0ZW1CdWZmZXI6OmNyZWF0ZUl0
ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIGlmIChtX3dyaXRpbmdDbGllbnQpIHsK
KyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gbV93cml0aW5nQ2xpZW50LT5jcmVhdGVJdGVtQnVm
ZmVyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQorCisgICAg
Y29uc3RleHByIHNpemVfdCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5ID0gMSA8PCAxMDsKKwor
ICAgIGF1dG8gbmV3QnVmZmVyQ2FwYWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwgZGVmYXVsdEl0
ZW1CdWZmZXJDYXBhY2l0eSk7CisgICAgYXV0byogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oZmFzdE1hbGxvYyhuZXdCdWZmZXJDYXBhY2l0eSkpOworICAgIG1fYWxsb2NhdGVk
QnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKKyAgICByZXR1cm4geyBJdGVtQnVmZmVySWRlbnRpZmll
cjo6Z2VuZXJhdGUoKSwgYnVmZmVyLCBuZXdCdWZmZXJDYXBhY2l0eSB9OworfQorCit2b2lkIEl0
ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZl
ckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0byYgaGFuZGxl
IDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgIG1hcEZ1bmN0aW9uKGhhbmRsZSk7CisKKyAg
ICBpZiAobV93cml0YWJsZUJ1ZmZlciAmJiBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzKQorICAgICAg
ICBtYXBGdW5jdGlvbih7IG1fd3JpdGFibGVCdWZmZXIuaWRlbnRpZmllciwgbV93cml0YWJsZUJ1
ZmZlci5kYXRhLCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIH0pOworfQorCit2b2lkIEl0ZW1CdWZm
ZXI6OmNsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHN0ZDo6ZXhjaGFuZ2UobV9ub25J
bmxpbmVJdGVtc0luQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAgICAgaXRlbS5kZXN0cm95
KCk7CisKKyAgICBmb3IgKGF1dG8qIGJ1ZmZlciA6IHN0ZDo6ZXhjaGFuZ2UobV9hbGxvY2F0ZWRC
dWZmZXJzLCB7IH0pKQorICAgICAgICBmYXN0RnJlZShidWZmZXIpOworCisgICAgbV9yZWFkT25s
eUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0geyB9OworICAgIG1fd3Jp
dHRlbk51bWJlck9mQnl0ZXMgPSAwOworfQorCit2b2lkIEl0ZW1CdWZmZXI6OnN3YXBXcml0YWJs
ZUJ1ZmZlcklmTmVlZGVkKHNpemVfdCBudW1iZXJPZkJ5dGVzKQoreworICAgIGlmIChtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzICsgbnVtYmVyT2ZCeXRlcyA8PSBtX3dyaXRhYmxlQnVmZmVyLmNhcGFj
aXR5KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5leHRCdWZmZXIgPSBjcmVhdGVJdGVt
QnVmZmVyKG51bWJlck9mQnl0ZXMpOworICAgIGJvb2wgaGFkUHJldmlvdXNCdWZmZXIgPSBtX3dy
aXRhYmxlQnVmZmVyOworICAgIGF1dG8gcHJldmlvdXNCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1f
d3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgcHJldmlvdXNCdWZmZXIuY2FwYWNpdHkgPSBzdGQ6
OmV4Y2hhbmdlKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApOworICAgIGlmIChoYWRQcmV2aW91
c0J1ZmZlcikKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUocHJldmlv
dXNCdWZmZXIpKTsKKworICAgIG1fd3JpdGFibGVCdWZmZXIgPSBXVEZNb3ZlKG5leHRCdWZmZXIp
OworfQorCit2b2lkIEl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgoUmVmPFNoYXJlZEJ1
ZmZlcj4mJiBkYXRhLCB1aW50OF90KiBsb2NhdGlvbikKK3sKKyAgICByZWludGVycHJldF9jYXN0
PHNpemVfdCo+KGxvY2F0aW9uKVswXSA9IGRhdGEtPnNpemUoKTsKKworICAgIGF1dG8qIHN0YXJ0
T2ZQYWRkaW5nID0gbG9jYXRpb24gKyBzaXplb2Yoc2l6ZV90KTsKKyAgICBzaXplX3QgcGFkZGlu
ZyA9IChhbGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFy
dE9mUGFkZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90KTsKKyAg
ICBhdXRvKiBzdGFydE9mRGF0YSA9IHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZzsKKyAgICBtZW1j
cHkoc3RhcnRPZkRhdGEsIGRhdGEtPmRhdGFBc1VJbnQ4UHRyKCksIGRhdGEtPnNpemUoKSk7CisK
KyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yo
c2l6ZV90KSArIHBhZGRpbmcgKyBkYXRhLT5zaXplKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZlYmRkYzRkN2Q3MDdiOWIzY2VhNDM2NGI2
YmQ3OTFmYjRiM2JlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApAQCAtMCwwICsx
LDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxp
c3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBlLmgiCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT2Jq
ZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworZW51bSBJdGVtQnVmZmVySWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgSXRlbUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPEl0ZW1CdWZmZXJJZGVudGlmaWVyVHlwZT47CisKKy8vIEFuIEl0ZW1CdWZmZXJIYW5k
bGUgd3JhcHMgYSBwb2ludGVyIHRvIGEgZGF0YSBidWZmZXIgdGhhdCBjb250YWlucyBkaXNwbGF5
IGxpc3QgaXRlbSBkYXRhLgorc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGUgeworICAgIEl0ZW1CdWZm
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsK
KyAgICBzaXplX3QgY2FwYWNpdHkgeyAwIH07CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISEoKnRoaXMpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhZGF0YTsgfQorfTsKKwordXNpbmcgSXRlbUJ1ZmZlckhhbmRsZXMgPSBWZWN0b3I8SXRlbUJ1
ZmZlckhhbmRsZSwgMj47CisKKy8vIEFuIEl0ZW1IYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGFu
IEl0ZW1UeXBlLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhbiBpdGVtIG9mIHRoYXQgdHlwZS4K
K3N0cnVjdCBJdGVtSGFuZGxlIHsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworCisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAg
ICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdDsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIWRhdGE7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFkYXRhOyB9CisKKyAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SXRlbVR5cGU+KGRhdGFbMF0pOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRlbUluQnl0ZXModHlwZSgpKTsgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVDo6
aXRlbVR5cGU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUJiBnZXQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzPFQ+KCkpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KCZkYXRhW3NpemVvZihJdGVtVHlwZSldKTsKKyAgICB9Cit9OworCitjbGFzcyBJ
dGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZl
cldyaXRpbmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgSXRlbUJ1ZmZlckhhbmRsZSBjcmVh
dGVJdGVtQnVmZmVyKHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZW5jb2RlSXRlbShJdGVtSGFuZGxlKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1ZmZlclJlYWRp
bmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRsZT4gV0FSTl9V
TlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFM
ZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgPSAwOworfTsKKworLy8g
QW4gSXRlbUJ1ZmZlciBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCBhbmQgY29uc2lz
dHMgb2YgYSByZWFkd3JpdGUgSXRlbUJ1ZmZlckhhbmRsZSAodG8gd2hpY2ggZGlzcGxheQorLy8g
bGlzdCBpdGVtcyBhcmUgYXBwZW5kZWQpIGFzIHdlbGwgYXMgYSBudW1iZXIgb2YgcmVhZG9ubHkg
SXRlbUJ1ZmZlckhhbmRsZXMuIEl0ZW1zIGFyZSBhcHBlbmRlZCB0byB0aGUgcmVhZHdyaXRlCisv
LyBidWZmZXIgdW50aWwgYWxsIGF2YWlsYWJsZSBjYXBhY2l0eSBpcyBleGhhdXN0ZWQsIGF0IHdo
aWNoIHBvaW50IHdlIHdpbGwgbW92ZSB0aGlzIHdyaXRhYmxlIGhhbmRsZSB0byB0aGUgbGlzdAor
Ly8gb2YgcmVhZG9ubHkgaGFuZGxlcy4KK2NsYXNzIEl0ZW1CdWZmZXIgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEl0ZW1CdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGxheUxpc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
dGVtQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkl0ZW1CdWZmZXIoKTsKKyAgICBJdGVt
QnVmZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1
ZmZlcihJdGVtQnVmZmVyJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXImIG9wZXJh
dG9yPShJdGVtQnVmZmVyJiYpOworCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGF1dG8gYnVmZmVy
IDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgICAgICByZXN1bHQgKz0gYnVmZmVyLmNhcGFj
aXR5OworICAgICAgICByZXN1bHQgKz0gbV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3dyaXR0ZW5OdW1iZXJPZkJ5
dGVzICYmIG1fcmVhZE9ubHlCdWZmZXJzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KTsKKworICAg
IC8vIEl0ZW1CdWZmZXI6OmFwcGVuZDxUPiguLi4pIGFwcGVuZHMgYSBkaXNwbGF5IGxpc3QgaXRl
bSBvZiB0eXBlIFQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudAorICAgIC8vIHdyaXRhYmxlIGJ1
ZmZlciBoYW5kbGU7IGlmIHJlbWFpbmluZyBidWZmZXIgY2FwYWNpdHkgaXMgaW5zdWZmaWNpZW50
IHRvIHN0b3JlIHRoZSBpdGVtLCBhCisgICAgLy8gbmV3IGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRl
ZCAoZWl0aGVyIGJ5IHRoZSBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCwgaWYgc2V0LCBvciBieSB0
aGUgaXRlbQorICAgIC8vIGJ1ZmZlciBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gY2xpZW50KS4gSXRl
bXMgYXJlIHBsYWNlZCBiYWNrLXRvLWJhY2sgaW4gdGhlc2UgaXRlbSBidWZmZXJzLAorICAgIC8v
IHdpdGggYW4gSXRlbVR5cGUgc2VwYXJhdGluZyBlYWNoIGl0ZW0uCisgICAgLy8KKyAgICAvLyBJ
ZiBhIHdyaXRpbmcgY2xpZW50IGlzIHByZXNlbnQgYW5kIHJlcXVpcmVzIGN1c3RvbSBlbmNvZGlu
ZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSBULCB0aGUKKyAgICAvLyBpdGVtIGJ1ZmZlciB3aWxs
IGFzayB0aGUgY2xpZW50IGZvciBhbiBvcGFxdWUgU2hhcmVkQnVmZmVyIGNvbnRhaW5pbmcgZW5j
b2RlZCBkYXRhIGZvciB0aGUKKyAgICAvLyBpdGVtLiBUaGlzIGVuY29kZWQgZGF0YSBpcyB0aGVu
IGFwcGVuZGVkIHRvIHRoZSBpdGVtIGJ1ZmZlciwgd2l0aCBwYWRkaW5nIHRvIGVuc3VyZSB0aGF0
CisgICAgLy8gdGhlIHN0YXJ0IG9mIHRoaXMgZGF0YSBpcyBhbGlnbmVkIHRvIDggYnl0ZXMsIGlm
IG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1pbmcgZW5jb2RlZCBpdGVtCisgICAgLy8gZGF0YSwgYSBj
b3JyZXNwb25kaW5nIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHdpbGwgYmUgcmVxdWlyZWQgdG8g
Y29udmVydCB0aGlzIGVuY29kZWQgZGF0YQorICAgIC8vIGJhY2sgaW50byBhbiBpdGVtIG9mIHR5
cGUgVC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVu
ZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSB8fCAhVDo6aXNJbmxpbmVJdGVtKTsKKyAg
ICAgICAgY29uc3RleHByIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplb2YoSXRlbVR5cGUp
ICsgc2l6ZW9mKFQpOworCisgICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVtICYmIG1fd3JpdGlu
Z0NsaWVudCkgeworICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgaXRlbUJ1ZmZlcltzaXplT2ZU
eXBlQW5kSXRlbV07CisgICAgICAgICAgICBpdGVtQnVmZmVyWzBdID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgbmV3IChpdGVtQnVmZmVyICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICAgICAg
aWYgKGF1dG8gc2hhcmVkQnVmZmVyID0gbV93cml0aW5nQ2xpZW50LT5lbmNvZGVJdGVtKHsgaXRl
bUJ1ZmZlciB9KSkgeworICAgICAgICAgICAgICAgIHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVk
KHNoYXJlZEJ1ZmZlci0+c2l6ZSgpICsgc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3Qp
ICsgYWxpZ25vZih1aW50NjRfdCkpOworICAgICAgICAgICAgICAgIG1fd3JpdGFibGVCdWZmZXIu
ZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0
ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmREYXRhQW5kTGVuZ3RoKHNoYXJlZEJ1ZmZl
ci5yZWxlYXNlTm9uTnVsbCgpLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzICsgc2l6ZW9mKEl0ZW1UeXBlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRl
ZChzaXplT2ZUeXBlQW5kSXRlbSk7CisKKyAgICAgICAgaWYgKCFUOjppc0lubGluZUl0ZW0pCisg
ICAgICAgICAgICBtX25vbklubGluZUl0ZW1zSW5BbGxvY2F0ZWRCdWZmZXJzLmFwcGVuZCh7ICZt
X3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10gfSk7CisKKyAgICAg
ICAgdW5jaGVja2VkQXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAg
fQorCisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVudCkg
eyBtX3dyaXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGluZ0NsaWVudCA9IGNsaWVudDsgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGVzJiByZWFkT25seUJ1ZmZlcnMo
KSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsgfQorICAgIHZvaWQgZm9yRWFjaEl0
ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYpIGNvbnN0
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChz
aXplX3QgbnVtYmVyT2ZCeXRlcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRh
QW5kTGVuZ3RoKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ4X3QqKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChBcmdzJiYuLi4g
YXJncykKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0T2ZJdGVtID0gJm1fd3JpdGFibGVCdWZm
ZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXTsKKyAgICAgICAgc3RhcnRPZkl0ZW1bMF0g
PSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgIG5ldyAoc3RhcnRP
Zkl0ZW0gKyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CisgICAgICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNp
emVPZkl0ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKTsKKyAgICB9CisKKyAgICBJdGVtQnVmZmVyUmVh
ZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0ciB9OworICAgIEl0ZW1CdWZmZXJX
cml0aW5nQ2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPEl0
ZW1IYW5kbGU+IG1fbm9uSW5saW5lSXRlbXNJbkFsbG9jYXRlZEJ1ZmZlcnM7CisgICAgVmVjdG9y
PHVpbnQ4X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZXMgbV9y
ZWFkT25seUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZSBtX3dyaXRhYmxlQnVmZmVyOwor
ICAgIHNpemVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsgMCB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA1NmI1N2YwN2MzYzNjOTNjZDNmMDE5MGY1ZDRhY2Qx
YmI2YzJhNGU5Li42MGFlNjI2ODEzM2YzN2VlZWVkY2IxYjU0ZjUxMzQ2YzUzNGEzOTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC01MiwxOTUgKzUyLDE2IEBAIFdU
Rjo6Q1N0cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB9CiAjZW5kaWYKIAotSXRlbTo6
SXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogbV90eXBlKHR5cGUpCi17Ci19Ci0KLUl0ZW06On5J
dGVtKCkgPSBkZWZhdWx0OwotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYg
aXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxS
ZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3RhdGU+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRDVE0+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRl
bmF0ZUNUTT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVu
dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFNldExpbmVDYXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFNldExpbmVKb2luPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PERyYXdHbHlwaHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1BhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0VsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQ
YXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEZpbGxSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJv
dW5kZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsSW5saW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBh
dGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0
YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQdXRJbWFnZURhdGE+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VS
ZWN0PihpdGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxT
dHJva2VJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSNpZiBVU0UoQ0cp
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
QXBwbHlGaWxsUGF0dGVybj4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBs
eURldmljZVNjYWxlRmFjdG9yPihpdGVtKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1z
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2lu
Z0l0ZW0mIGl0ZW0pCi17Ci0gICAgdHMuc3RhcnRHcm91cCgpOwotICAgIHRzIDw8ICJleHRlbnQg
IjsKLSAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQotICAgICAgICB0cyA8PCBpdGVtLmV4dGVu
dCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgInVua25vd24iOwotICAgIAotICAgIHRzLmVu
ZEdyb3VwKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0o
SXRlbVR5cGUgdHlwZSkKLSAgICA6IEl0ZW0odHlwZSkKLXsKLX0KLQotRHJhd2luZ0l0ZW06On5E
cmF3aW5nSXRlbSgpID0gZGVmYXVsdDsKLQotU2F2ZTo6U2F2ZSgpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTYXZlKQotewotfQotCi1TYXZlOjp+U2F2ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTYXZl
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5z
YXZlKCk7CiB9CiAKLVJlc3RvcmU6OlJlc3RvcmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6UmVz
dG9yZSkKLXsKLX0KLQotUmVzdG9yZTo6flJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUmVz
dG9yZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQucmVzdG9yZSgpOwogfQogCi1UcmFuc2xhdGU6OlRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQotICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQotICAgICwgbV94KHgpCi0gICAgLCBt
X3koeSkKLXsKLX0KLQotVHJhbnNsYXRlOjp+VHJhbnNsYXRlKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKQEAgLTI1NCwxNCArNzUsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBp
dGVtKQogICAgIHJldHVybiB0czsKIH0KIAotUm90YXRlOjpSb3RhdGUoZmxvYXQgYW5nbGUpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCi0gICAgLCBtX2FuZ2xlKGFuZ2xlKQotewotfQot
Ci1Sb3RhdGU6On5Sb3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUm90YXRlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5yb3RhdGUobV9hbmds
ZSk7CkBAIC0yNzQsMTQgKzg3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNj
YWxlOjpTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpT
Y2FsZSkKLSAgICAsIG1fc2l6ZShzaXplKQotewotfQotCi1TY2FsZTo6flNjYWxlKCkgPSBkZWZh
dWx0OwotCiB2b2lkIFNjYWxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5zY2FsZShtX3NpemUpOwpAQCAtMjk0LDE0ICs5OSw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2FsZSYgaXRl
bSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldENUTTo6U2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0Q1RNKQotICAgICwgbV90
cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1TZXRDVE06On5TZXRDVE0oKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzE0LDE0ICsxMTEsNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0Q1RN
JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRl
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0K
LUNvbmNhdGVuYXRlQ1RNOjp+Q29uY2F0ZW5hdGVDVE0oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ29u
Y2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7CkBAIC0zMzUsOCArMTI0LDcgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVu
YXRlQ1RNJiBpdGVtKQogfQogCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxH
cmFkaWVudChjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQorICAg
IDogbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKICAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKGdyYWRpZW50LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSkKICAgICAsIG1fc3ByZWFk
TWV0aG9kKGdyYWRpZW50LnNwcmVhZE1ldGhvZCgpKQogICAgICwgbV9jb2xvclN0b3BDb3VudChz
dGF0aWNfY2FzdDx1aW50OF90PihncmFkaWVudC5zdG9wcygpLnNpemUoKSkpCkBAIC0zNTgsMTQg
KzE0Niw4IEBAIFJlZjxHcmFkaWVudD4gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpncmFkaWVudCgp
IGNvbnN0CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCi1SZWY8U2V0SW5saW5lRmlsbEdyYWRp
ZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShjb25zdCBHcmFkaWVudCYgZ3JhZGll
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRpZW50KGdy
YWRpZW50KSk7Ci19Ci0KIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRp
ZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xv
cnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3By
ZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0YShkYXRhKQor
ICAgIDogbV9kYXRhKGRhdGEpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihn
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAgLCBtX3NwcmVhZE1ldGhvZChzcHJlYWRN
ZXRob2QpCiAgICAgLCBtX2NvbG9yU3RvcENvdW50KGNvbG9yU3RvcENvdW50KQpAQCAtMzc3LDgg
KzE1OSw2IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGZs
b2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTCiAgICAgfQogfQogCi1TZXRJbmxpbmVG
aWxsR3JhZGllbnQ6On5TZXRJbmxpbmVGaWxsR3JhZGllbnQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
U2V0SW5saW5lRmlsbEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgaWYgKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpCkBA
IC00MDQsMTMgKzE4NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsR3JhZGllbnQmKQogICAgIHJldHVybiB0czsKIH0K
IAotUmVmPFNldElubGluZUZpbGxDb2xvcj4gU2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUoU1JH
QkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElu
bGluZUZpbGxDb2xvcihjb2xvckRhdGEpKTsKLX0KLQotU2V0SW5saW5lRmlsbENvbG9yOjp+U2V0
SW5saW5lRmlsbENvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtNDIyLDEzICsxOTUsNiBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lRmlsbENvbG9yJiBz
dGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4gU2V0
SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lU3Ryb2tlQ29sb3IoY29sb3JEYXRhKSk7
Ci19Ci0KLVNldElubGluZVN0cm9rZUNvbG9yOjp+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yKCkp
OwpAQCAtNDQwLDEzICsyMDYsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lU3Ryb2tlQ29sb3ImIHN0YXRlKQogICAgIHJldHVy
biB0czsKIH0KIAotUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpj
cmVhdGUoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpKTsKLX0KLQotU2V0U3Ryb2tlVGhpY2tuZXNzOjp+U2V0
U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldFN0cm9rZVRoaWNrbmVzczo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKG1fdGhpY2tuZXNzKTsKQEAgLTQ1OSwxOSArMjE4LDE1IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VU
aGlja25lc3MmIHN0YXRlKQogfQogCiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICwgbV9zdGF0ZShz
dGF0ZSwgZmxhZ3MpCisgICAgOiBtX3N0YXRlKHN0YXRlLCBmbGFncykKIHsKIH0KIAogU2V0U3Rh
dGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5n
ZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICwgbV9zdGF0ZShzdGF0ZUNo
YW5nZSkKKyAgICA6IG1fc3RhdGUoc3RhdGVDaGFuZ2UpCiB7CiB9CiAKLVNldFN0YXRlOjp+U2V0
U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQpOwpAQCAtNDgz
LDE0ICsyMzgsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZUNh
cDo6U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwKQotICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCi17Ci19Ci0KLVNldExpbmVDYXA6On5T
ZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldExpbmVDYXA6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVDYXAobV9saW5l
Q2FwKTsKQEAgLTUwMiwxNSArMjQ5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCiAgICAgcmV0dXJuIHRz
OwogfQogCi1TZXRMaW5lRGFzaDo6U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJy
YXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkK
LSAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zm
c2V0KQotewotfQotCi1TZXRMaW5lRGFzaDo6flNldExpbmVEYXNoKCkgPSBkZWZhdWx0OwotCiB2
b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKQEAg
LTUyMywxNCArMjYxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKICAgICByZXR1cm4gdHM7CiB9CiAK
LVNldExpbmVKb2luOjpTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldExpbmVKb2luKQotICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKLXsKLX0K
LQotU2V0TGluZUpvaW46On5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5l
Sm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7CkBAIC01NDIsMTQgKzI3Miw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYg
bGluZUpvaW4pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRNaXRlckxpbWl0OjpTZXRNaXRlckxp
bWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0
KQotICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi17Ci19Ci0KLVNldE1pdGVyTGltaXQ6
On5TZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldE1pdGVyTGltaXQ6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldE1pdGVy
TGltaXQobV9taXRlckxpbWl0KTsKQEAgLTU2MSwyNiArMjgzLDExIEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0JiBtaXRl
ckxpbWl0KQogICAgIHJldHVybiB0czsKIH0KIAotQ2xlYXJTaGFkb3c6OkNsZWFyU2hhZG93KCkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQotewotfQotCi1DbGVhclNoYWRvdzo6
fkNsZWFyU2hhZG93KCkgPSBkZWZhdWx0OwotCiB2b2lkIENsZWFyU2hhZG93OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVhclNoYWRvdygp
OwogfQogCi1DbGlwOjpDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IEl0ZW0oSXRl
bVR5cGU6OkNsaXApCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotQ2xpcDo6fkNsaXAoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNTkyLDE0ICsyOTksNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYg
aXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBPdXQ6OkNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKLSAgICAsIG1fcmVjdChy
ZWN0KQotewotfQotCi1DbGlwT3V0Ojp+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlw
T3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5jbGlwT3V0KG1fcmVjdCk7CkBAIC02MTEsMTQgKzMxMCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0JiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotQ2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBw
YXRoKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAsIG1fcGF0aChw
YXRoKQotewotfQotCi1DbGlwT3V0VG9QYXRoOjp+Q2xpcE91dFRvUGF0aCgpID0gZGVmYXVsdDsK
LQogdm9pZCBDbGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7CkBAIC02MzAsMTUgKzMyMSw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlw
T3V0VG9QYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcFBhdGg6OkNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6Q2xpcFBhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1fd2luZFJ1bGUod2luZFJ1
bGUpCi17Ci19Ci0KLUNsaXBQYXRoOjp+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xp
cFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7CkBAIC02NTEsMTYgKzMzMyw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0
aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCi0gICAgOiBJdGVt
KEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQotICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCi0gICAgLCBtX2RyYXdp
bmdDb21tYW5kcyhXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpCi17Ci19Ci0KLUNsaXBUb0RyYXdp
bmdDb21tYW5kczo6fkNsaXBUb0RyYXdpbmdDb21tYW5kcygpID0gZGVmYXVsdDsKLQogdm9pZCBD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmNsaXBUb0RyYXdpbmdDb21tYW5kcyhtX2Rlc3RpbmF0aW9uLCBt
X2NvbG9yU3BhY2UsIFsmXSAoR3JhcGhpY3NDb250ZXh0JiBjbGlwcGluZ0NvbnRleHQpIHsKQEAg
LTY3Nyw4ICszNDksNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBpdGVtKQogfQogCiBEcmF3R2x5cGhz
OjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAx
Mjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBt
X2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihj
b25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBocykp
CiAgICAgLCBtX2FkdmFuY2VzKFdURk1vdmUoYWR2YW5jZXMpKQogICAgICwgbV9sb2NhbEFuY2hv
cihsb2NhbEFuY2hvcikKQEAgLTY4OCw4ICszNTksNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhz
LAogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRy
YXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBt
X2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQogICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUp
CiB7CkBAIC03MDIsMTkgKzM3MiwxNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgRwogICAgIGNv
bXB1dGVCb3VuZHMoKTsKIH0KIAotRHJhd0dseXBoczo6fkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7
Ci0KIGlubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkg
Y29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tp
XSwgbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOwor
ICAgICAgICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLCAqbV9mb250LCBtX2FkdmFuY2VzW2ldLCBH
bHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRHJh
d0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNv
bnRleHQuZHJhd0dseXBocyhtX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9nbHlw
aHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOworICAgIGNvbnRleHQu
ZHJhd0dseXBocygqbV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNp
emUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3R2x5
cGhzOjpjb21wdXRlQm91bmRzKCkKQEAgLTczNCwxNCArNDAyLDggQEAgdm9pZCBEcmF3R2x5cGhz
Ojpjb21wdXRlQm91bmRzKCkKICAgICB9CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ds
eXBoczo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9ib3VuZHM7Ci19Ci0KIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBz
dHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNo
b3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBv
aW50KCkpOwpAQCAtNzUwLDE3ICs0MTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLURyYXdJbWFnZTo6RHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlv
bihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1faW1hZ2VQYWlu
dGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZTo6fkRy
YXdJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdl
dCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBA
IC03NjgsMjYgKzQxOSwxMiBAQCB2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIs
IGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0u
c291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5h
dGlvbigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UpCi0gICAg
LCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAs
IG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBtX3Nw
YWNpbmcoc3BhY2luZykKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGlu
Z09wdGlvbnMpCi17Ci19Ci0KLURyYXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQ
YWludGluZ09wdGlvbnMpOwpAQCAtNzk1LDcgKzQzMiw2IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CkBAIC04MDQsMjAgKzQ0MCw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
VGlsZWRJbWFnZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZFNjYWxlZElt
YWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1f
aW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9z
b3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQot
ICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1fdlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdl
UGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRT
Y2FsZWRJbWFnZTo6fkRyYXdUaWxlZFNjYWxlZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERy
YXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0
aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1h
Z2VQYWludGluZ09wdGlvbnMpOwpAQCAtODI1LDI0ICs0NDcsMTIgQEAgdm9pZCBEcmF3VGlsZWRT
Y2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVk
U2NhbGVkSW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAg
IHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIoUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpE
cmF3SW1hZ2VCdWZmZXIpCi0gICAgLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVj
dCkKLSAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi17
Ci19Ci0KLURyYXdJbWFnZUJ1ZmZlcjo6fkRyYXdJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQog
dm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAg
ICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtODUxLDcgKzQ2MSw2
IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0ltYWdlQnVmZmVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRl
bnRpZmllciIsIGl0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODU5LDggKzQ2
OCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3SW1hZ2VCdWZmZXImIGl0ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2
ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6
IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rl
c3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY4
LDggKzQ3Niw2IEBAIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJ
bWFnZTo6fkRyYXdOYXRpdmVJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1h
Z2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3Qs
IG1fc3JjUmVjdCwgbV9vcHRpb25zKTsKQEAgLTg3Nyw3ICs0ODMsNiBAQCB2b2lkIERyYXdOYXRp
dmVJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUlt
YWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVy
dHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg4NSw4ICs0OTAsNyBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05h
dGl2ZUltYWdlJiBpdGVtKQogfQogCiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
KQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3Bh
dHRlcm5UcmFuc2Zvcm0ocGF0dGVyblRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJl
Y3QpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RSZWN0KQpAQCAtODk2LDggKzUwMCw2IEBAIERy
YXdQYXR0ZXJuOjpEcmF3UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjCiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4o
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwg
bV9zcGFjaW5nLCBtX29wdGlvbnMpOwpAQCAtOTA1LDcgKzUwNyw2IEBAIHZvaWQgRHJhd1BhdHRl
cm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXR0ZXJuLXRyYW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTUs
MTUgKzUxNiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0
OjpEcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0
KQotICAgICwgbV9ib3JkZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3
UmVjdDo6fkRyYXdSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3Jl
Y3QsIG1fYm9yZGVyVGhpY2tuZXNzKTsKQEAgLTkzMSwyMSArNTIzLDExIEBAIHZvaWQgRHJhd1Jl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiYm9yZGVyLXRoaWNrbmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVy
biB0czsKIH0KIAotRHJhd0xpbmU6OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRy
YXdMaW5lKQotICAgICwgbV9wb2ludDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQot
ewotfQotCi1EcmF3TGluZTo6fkRyYXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9h
dFJlY3Q+IERyYXdMaW5lOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAogewogICAgIEZsb2F0UmVjdCBib3VuZHM7CkBAIC05NjAsMTUgKzU0MiwxMyBAQCB2b2lkIERy
YXdMaW5lOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRl
bSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicG9pbnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAogRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAg
LCBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihi
bG9ja0xvY2F0aW9uKQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1f
d2lkdGhzKHdpZHRocykKICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3Nyw4ICs1
NTcsNiBAQCBEcmF3TGluZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0
Ojp+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5k
cmF3TGluZXNGb3JUZXh0KHBvaW50KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGlu
ZywgbV9kb3VibGVMaW5lcyk7CkBAIC05OTgsNyArNTc2LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBEcmF3TGluZXNGb3JUZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0xpbmVzRm9yVGV4dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRp
b24iLCBpdGVtLmJsb2NrTG9jYXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1h
bmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQi
LCBpdGVtLnBvaW50KCkpOwpAQCAtMTAxMCwxNSArNTg3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcikKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkK
LXsKLX0KLQotRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihtX3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMSwxOSArNTk5LDEw
IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsK
IH0KIAotRHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0
KQotewotfQotCi1EcmF3RWxsaXBzZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lk
IERyYXdFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5kcmF3RWxsaXBzZShtX3JlY3QpOwpAQCAtMTA1NSwxNCArNjE0LDYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxp
cHNlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAg
LCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsK
LQogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogI2lmIFVTRShDRykKQEAgLTEwNzIsMjQgKzYyMywxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVt
KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdQYXRoJikKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwotLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhN
RTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3Ig
cGF0aHMuCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3Vz
UmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwg
bV9vZmZzZXQob2Zmc2V0KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3Vz
UmluZ1BhdGg6On5EcmF3Rm9jdXNSaW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9j
dXNSaW5nUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuZHJhd0ZvY3VzUmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9y
KTsKQEAgLTExMDQsNyArNjQzLDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5n
UGF0aDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1Jp
bmdQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAvLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8v
IEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0
aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9m
ZnNldCgpKTsKQEAgLTExMTMsMTYgKzY1MSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAK
IERyYXdGb2N1c1JpbmdSZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAg
ICAsIG1fcmVjdHMocmVjdHMpCisgICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3
aWR0aCkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9
CiAKLURyYXdGb2N1c1JpbmdSZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsK
LQogdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwg
bV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtMTEzOSw3ICs2NzQsNiBAQCBPcHRpb25hbDxGbG9hdFJl
Y3Q+IERyYXdGb2N1c1JpbmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29ucwogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIs
IGl0ZW0ucmVjdHMoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTEx
NDcsMTQgKzY4MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1GaWxsUmVjdDo6RmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZp
bGxSZWN0Ojp+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1f
cmVjdCk7CkBAIC0xMTYyLDIwICs2ODgsMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhD
b2xvcjo6RmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3Ip
Ci0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxS
ZWN0V2l0aENvbG9yOjp+RmlsbFJlY3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmls
bFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTgzLDIxICs2OTks
MTcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmlsbFJlY3RXaXRoQ29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3Io
KSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RX
aXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBt
X3JlY3QocmVjdCkKKyAgICA6IG1fcmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVu
dCkKIHsKIH0KIAotRmlsbFJlY3RXaXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBt
X2dyYWRpZW50LmdldCgpKTsKQEAgLTEyMDUsMjMgKzcxNywxMSBAQCB2b2lkIEZpbGxSZWN0V2l0
aEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdp
dGhHcmFkaWVudCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENv
bXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAg
ICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0g
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6
fkZpbGxDb21wb3NpdGVkUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmZpbGxSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIyOSw3
ICs3MjksNiBAQCB2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVt
LmNvbG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0
ZW0uY29tcG9zaXRlT3BlcmF0b3IoKSk7CkBAIC0xMjM3LDE2ICs3MzYsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRS
ZWN0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxS
b3VuZGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAg
ICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+Rmls
bFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5k
ZWRSZWN0KG1fcmVjdCwgbV9jb2xvciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NCwyMyArNzQzLDEy
IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsUm91bmRlZFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVt
LnJvdW5kZWRSZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9y
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkp
OwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVj
dCkKLSAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29s
b3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3Ip
OwpAQCAtMTI3OCw3ICs3NTYsNiBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoInJvdW5kZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg3LDE0ICs3
NjQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAKLUZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRo
RGF0YSYgcGF0aERhdGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBh
dGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6
fkZpbGxJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0
aChwYXRoKCkpOwpAQCAtMTMwMiwyMSArNzcxLDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0
aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNCwxOSArNzg0
LDEwIEBAIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IEZpbGxQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwog
ICAgIHJldHVybiB0czsKIH0KIAotRmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAg
ICAsIG1fcmVjdChyZWN0KQotewotfQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NCwx
NCArNzk1LDEyIEBAIHZvaWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxFbGxpcHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6
IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwg
bV9pbWFnZURhdGEoaW1hZ2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFs
bHkgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4K
ICAgICAsIG1faW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCkBAIC0xMzYwLDggKzgwOSw3IEBAIFB1
dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURh
dGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpQdXRJbWFnZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3Jj
UmVjdChzcmNSZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFn
ZURhdGEoV1RGTW92ZShpbWFnZURhdGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1h
dCkKQEAgLTEzNjksOCArODE3LDYgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1Q
dXRJbWFnZURhdGE6On5QdXRJbWFnZURhdGEoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUHV0SW1hZ2VE
YXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBo
YW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAgLTEzNzksNyArODI1LDYgQEAgdm9pZCBQdXRJbWFn
ZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiB7
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwpAQCAtMTM4
OCwzMiArODMzLDEyIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8
UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7Ci19
Ci0KLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKE1l
ZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShpZGVu
dGlmaWVyLCBkZXN0aW5hdGlvbikpOwotfQotCiBQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkKLSAg
ICAsIG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQorICAgIDogbV9pZGVudGlmaWVy
KHBsYXllci5pZGVudGlmaWVyKCkpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQog
ewogfQogCi1QYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
cklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBtX2lk
ZW50aWZpZXIoaWRlbnRpZmllcikKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi17
Ci19Ci0KLVBhaW50RnJhbWVGb3JNZWRpYTo6flBhaW50RnJhbWVGb3JNZWRpYSgpID0gZGVmYXVs
dDsKLQogdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMTQy
MiwyMCArODQ3LDEwIEBAIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgUGFpbnRGcmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0aW5hdGlvbiIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1T
dHJva2VSZWN0OjpTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3Jl
Y3QocmVjdCkKLSAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVj
dDo6flN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tl
UmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBG
bG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OwpAQCAtMTQ1MCw3ICs4NjUsNiBAQCB2b2lkIFN0cm9r
ZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0
ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpA
QCAtMTQ3MywxOSArODg3LDEwIEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tl
RWxsaXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVj
dD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCk7CkBAIC0xNTAyLDcgKzkwNyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBA
IC0xNTI2LDM3ICs5MzAsMTIgQEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tl
SW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERh
dGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAs
IG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJ
bmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAKLVN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19
Ci0KLVN0cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6Q2xlYXJSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNs
ZWFyUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpA
QCAtMTU2NCwxOSArOTQzLDEwIEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxh
eWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShv
cGFjaXR5KQotewotfQotCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7CkBAIC0xNTg0LDU3ICs5NTQsMjggQEAgdm9pZCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5
IiwgaXRlbS5vcGFjaXR5KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5
TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5F
bmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lM
YXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tl
UGF0dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5
U3Ryb2tlUGF0dGVybikKLXsKLX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQ
YXR0ZXJuKCkgPSBkZWZhdWx0OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQ
YXR0ZXJuKCk7CiB9CiAKLUFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAg
IDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0
dGVybjo6fkFwcGx5RmlsbFBhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0
dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuYXBwbHlGaWxsUGF0dGVybigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVt
KEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikKLXsKLX0KLQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NDYsNyArOTg3LDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRz
IDw8ICJzYXZlIjsgYnJlYWs7CkBAIC0xNzE3LDE3MiArMTA1OCwxNzAgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQog
ICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgSXRlbSYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3Vw
KHRzKTsKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFj
cm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVz
CiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29u
Y2F0ZW5hdGVDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNU
TT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdy
YWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJv
a2VUaGlja25lc3M+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlj
a25lc3M+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExp
bmVEYXNoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldExpbmVKb2luPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBP
dXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xp
cE91dFRvUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8Q2xpcFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
R2x5cGhzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERy
YXdUaWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVk
SW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVy
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2
ZUltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVy
bjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
TGluZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBz
ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0ZvY3VzUmluZ1JlY3RzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RX
aXRoQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50Pigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
Um91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
SW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxp
cHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRp
YT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFN0cm9rZVJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTdHJva2VJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ry
b2tlRWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxDbGVhclJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURl
dmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5v
IGFkZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGYw
MTViZTVlODY2MDZlY2MyZjZjZTg1N2MxZjcxMTY3Njk0ZmU4ZTMuLjJhNDYyNmU4ZWIzMTUwZDgx
ODU0Y2ZiMmFlMmFiNjNlMzJjMGE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aApAQCAtNTEsMzIwICs1MSwxNjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNhdmUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERy
YXdpbmdJdGVtKEl0ZW1UeXBlKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNhdmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50
KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJv
b2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVu
dCk7IH0KLQotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBp
biBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0
cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJ
bWFnZURhdGEpIG9wZXJhdGUgaW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMs
IG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4g
dmFsdWUgbmVlZHMgdG8gaW5jbHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywg
ZXRjLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2lu
Z0l0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93
cyBhbmQgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIFJlc3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflNhdmUoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
U2F2ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2F2ZSgpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNv
bnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+
IFNhdmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19
Ci0KLWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc3RvcmUoKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBSZXN0b3JlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNv
ZGVyJikKLXsKLSAgICByZXR1cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVi
bGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAg
OiBtX3goeCkKKyAgICAgICAgLCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+VHJhbnNsYXRlKCk7Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9
CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94Owot
ICAgIGZsb2F0IG1feTsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0
IG1feSB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0
ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7
Ci0gICAgZW5jb2RlciA8PCBtX3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8VHJhbnNsYXRlPj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxmbG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7
Ci0gICAgZGVjb2RlciA+PiB5OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFz
cyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmds
ZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+Um90YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFJvdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUm90YXRlKGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CiAKLSAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBm
bG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgUm90YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fYW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8Um90YXRlPj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxmbG9hdD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBp
ZiAoIWFuZ2xlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJv
dGF0ZTo6Y3JlYXRlKCphbmdsZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewor
Y2xhc3MgU2NhbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTY2FsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBj
b25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAg
ICBGbG9hdFNpemUgbV9zaXplOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
U2NhbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9zaXplOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxl
Pj4gU2NhbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0
U2l6ZT4gc2NhbGU7Ci0gICAgZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNj
YWxlKTsKLX0KLQotY2xhc3MgU2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6U2V0Q1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CisKKyAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAg
IDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0Q1RNKG1hdHJpeCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflNldENUTSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNl
dENUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxT
ZXRDVE0+PiBTZXRDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwot
ICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIFNldENUTTo6Y3JlYXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0
ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNh
dGVuYXRlQ1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNm
b3JtOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFu
c2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0
ZW5hdGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0
cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0K
LQotY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
SW5saW5lRmlsbEdyYWRpZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZp
bGxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJ
bmxpbmUoY29uc3QgR3JhZGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFk
aWVudCgpOwotCi0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdy
YWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNl
dElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291
bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBj
b25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwg
dWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldElubGluZUZpbGxHcmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbiwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAg
IH0KLQorICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9y
U3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29u
c3QgR3JhZGllbnQ6OkRhdGEmLAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29s
b3JTdG9wQ291bnQpOwogCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50
Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8
R3JhZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAg
ICBTUkdCQTx1aW50OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGll
bnQ6OkRhdGEgbV9kYXRhOwpAQCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWlu
dDhfdCBtX2NvbG9yU3RvcENvdW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50
OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgbV9vZmZzZXRzW2ldOwotICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsg
bV9jb2xvcnNbaV0gfS52YWx1ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAg
ZW5jb2RlciA8PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8
IG1fc3ByZWFkTWV0aG9kOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291
bnQ7Ci0gICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENv
dW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BD
b3VudCA+IG1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhf
dD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkg
PCAqY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0
OwotICAgICAgICBkZWNvZGVyID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90
PiBjb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0g
YXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tp
XSA9ICpvZmZzZXQ7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7
Ci0gICAgZGVjb2RlciA+PiBkYXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uOwotICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOwotICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNw
cmVhZE1ldGhvZDsKLSAgICBkZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVh
ZE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNl
dElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkg
fTsKLX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFNldElubGluZUZpbGxDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JH
QkE8dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDog
bV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAorcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6
UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7
Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFz
U1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxp
bmVTdHJva2VDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9y
IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9r
ZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwogCi1wcml2YXRlOgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xv
ckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRh
dGE7Ci19OworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9
OyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9y
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tl
ZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFNldElubGluZVN0cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAg
ICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQogCi0gICAgcmV0dXJuIFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNr
ZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4
X3Q+IG1fY29sb3JEYXRhOworfTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNr
bmVzcyk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi0gICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0
cm9rZVRoaWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpT
ZXRTdHJva2VUaGlja25lc3MpCi0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAg
ICAgICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhp
Y2tuZXNzIHsgMCB9OwotfTsKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3RoaWNrbmVzczsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VU
aGlja25lc3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV90aGlja25lc3M7Ci19CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlj
a25lc3M+PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPGZsb2F0PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7
Ci0gICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJu
IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAg
ICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3Rh
dGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0
YXRlKHN0YXRlQ2hhbmdlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVf
RVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAg
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQogCkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
IAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0
YXRlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UgbV9zdGF0ZTsKIH07CiAKQEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgT3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+
IGNoYW5nZUZsYWdzOwogICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYy
MCw1NSBAQCBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNl
dFN0YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07
CiB9CiAKLWNsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2Fw
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxp
bmVDYXApCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisK
KyAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGlu
ZUNhcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGlu
ZUNhcCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAo
KTsKLSAgICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dExpbmVDYXA+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFNldExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitw
cml2YXRlOgogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+
PiBsaW5lQ2FwOwotICAgIGlmICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFz
cyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBk
YXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
ZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hB
cnJheSkKKyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0K
ICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFy
cmF5OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNl
dDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
U2V0TGluZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRl
OgogICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9
OwpAQCAtOTcwLDcgKzY4MSw3IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRh
c2hBcnJheTsKQEAgLTk4MiwyMTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNo
Pj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9m
ZnNldCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5l
RGFzaDo6Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRh
c2hBcnJheSwgKmRhc2hPZmZzZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKKyAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVK
b2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2lu
KExpbmVKb2luKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAg
TGluZUpvaW4gbV9saW5lSm9pbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFNldExpbmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fbGluZUpvaW47Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGlu
ZUpvaW47Ci0gICAgaWYgKCFsaW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNz
IFNldE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAg
IFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQo
bWl0ZXJMaW1pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVy
TGltaXQobGltaXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRN
aXRlckxpbWl0KCk7Ci0KICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9t
aXRlckxpbWl0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1p
dGVyTGltaXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0
PiBtaXRlckxpbWl0OwotICAgIGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVy
TGltaXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0
ZXJMaW1pdDo6Y3JlYXRlKCptaXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDbGVhclNoYWRvdz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENsZWFyU2hhZG93KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5D
bGVhclNoYWRvdygpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBDbGVhclNoYWRvdygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
Q2xlYXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVy
biBDbGVhclNoYWRvdzo6Y3JlYXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5n
SXRlbT8KLWNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJh
d2luZyBpdGVtPworY2xhc3MgQ2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBj
cmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlw
KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7Cisg
ICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNv
ZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQg
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkNsaXBPdXQoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBDbGlwT3V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxDbGlwT3V0Pj4gQ2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBp
ZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xp
cE91dDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIENsaXBPdXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cE91dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRo
JiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9Q
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAg
IH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRU
b1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToK
KyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAw
LDM3ICs4MzQsNDcgQEAgdm9pZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlw
T3V0VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxDbGlwT3V0VG9QYXRoPiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAg
ICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
Q2xpcE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0
aCkgfX07CiB9CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBh
dGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdp
bmRSdWxlKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lu
ZFJ1bGUod2luZFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlw
UGF0aCgpOworICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUp
CisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1
bGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PENsaXBQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENs
aXBQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2
YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBA
IC0xMjQyLDcgKzg4Niw3IEBAIHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQ
YXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBh
dGg+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQ
YXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCwzNSBAQCBP
cHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCF3aW5kUnVsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBDbGlwUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7
eyBXVEZNb3ZlKCpwYXRoKSwgKndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5n
Q29tbWFuZHMgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5
TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3Bs
YXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9k
cmF3aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7Ci0KICAgICBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAg
IGNvbnN0IERpc3BsYXlMaXN0JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdpbmdDb21tYW5kczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xv
clNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAg
IENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1h
bmRzOwpAQCAtMTI4OCwxMSArOTM3LDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGlu
YXRpb247CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2Ry
YXdpbmdDb21tYW5kczsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBp
bi1tZW1vcnkgZGlzcGxheSBsaXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5h
dGlvbjsKQEAgLTEzMDQsMjcgKzk1MywxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAg
IGlmICghY29sb3JTcGFjZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9w
dGlvbmFsPERpc3BsYXlMaXN0PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3
aW5nQ29tbWFuZHM7Ci0gICAgaWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUo
KmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkg
bGlzdHMuCisgICAgRGlzcGxheUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAq
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9
CiAKLWNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ds
eXBocyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0
YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlw
aEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAx
Mjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0dseXBocyhmb250LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBs
b2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdHbHlwaHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5NzEsMjEgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBj
b25zdCB7IHJldHVybiBtX2dseXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29k
ZShEZWNvZGVyJik7CiAKLXByaXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUp
OwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlw
aEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwg
Y29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAg
IHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHM7IH0KIAorcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBH
bHlwaEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4g
bV9mb250OworICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
R2x5cGgsIDEyOD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4
PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArOTk2LDcg
QEAgcHJpdmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIERyYXdHbHlwaHM6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9mb250Owor
ICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9mb250KTsKICAgICBlbmNvZGVyIDw8IG1fZ2x5cGhz
OwogICAgIGVuY29kZXIgPDwgbV9hZHZhbmNlczsKICAgICBlbmNvZGVyIDw8IG1fbG9jYWxBbmNo
b3I7CkBAIC0xMzY2LDcgKzEwMDQsNyBAQCB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPERyYXdHbHlwaHM+PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09w
dGlvbmFsPERyYXdHbHlwaHM+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ewogICAgIE9wdGlvbmFsPFJlZjxGb250Pj4gZm9udDsKICAgICBkZWNvZGVyID4+IGZvbnQ7CkBA
IC0xMzk2LDMyICsxMDM0LDM1IEBAIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBo
czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdHbHlwaHM6OmNyZWF0
ZShmb250LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAqbG9j
YWxBbmNob3IsICpzbW9vdGhpbmdNb2RlKTsKKyAgICByZXR1cm4ge3sgZm9udC0+Z2V0KCksIFdU
Rk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3Ro
aW5nTW9kZSB9fTsKIH0KLQotY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIERyYXdJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNy
ZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGlu
Z09wdGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpEcmF3SW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
aW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAg
LCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkK
KyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdJbWFn
ZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1F
OiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4g
VGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3Rp
bmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE0NDEsNyArMTA4Miw3IEBAIHZv
aWQgRHJhd0ltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlPiBEcmF3SW1hZ2U6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFn
ZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTQ2MywxNyArMTEwNCwx
NCBAQCBPcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKICAgICBpZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRs
ZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsK
KyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNl
LCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZEltYWdlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdUaWxlZEltYWdlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZEltYWdlKCk7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgSW1h
Z2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UG9p
bnQgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTE0ODIsMTYgKzExMjAs
MjUgQEAgcHVibGljOgogICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGlsZVNpemU7IH0KICAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3Bh
Y2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RHJhd1RpbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIERyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKKyAgICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNp
emUodGlsZVNpemUpCisgICAgICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgICAgICwgbV9p
bWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgfQog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IGRlY29kZShEZWNv
ZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJ
WE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVz
cy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rl
c3RpbmF0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CkBAIC0xNTE0LDcgKzExNjEsNyBA
QCB2b2lkIERyYXdUaWxlZEltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0K
IAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+
IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdU
aWxlZEltYWdlPiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1h
Z2VIYW5kbGU7CkBAIC0xNTQ2LDMyICsxMTkzLDM5IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJ
bWFnZT4+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgcmV0dXJuIERyYXdUaWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRl
c3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09w
dGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24s
ICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNpbmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsK
IH0KIAotY2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJh
d1RpbGVkU2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisK
KyAgICBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAg
ICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRp
b24pCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNjYWxlRmFj
dG9yKHRpbGVTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX2hSdWxlKGhSdWxlKQorICAgICAgICAs
IG1fdlJ1bGUodlJ1bGUpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBh
aW50aW5nT3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdU
aWxlZFNjYWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0
b3IsIGhSdWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOwotCiAgICAgY29u
c3QgSW1hZ2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZs
b2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVj
dCBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxl
ZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFn
ZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRv
IHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxvYXRS
ZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAtMTU5Niw3ICsx
MjUwLDcgQEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCitPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gRHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFu
ZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTYzMSwz
MyArMTI4NSwzNyBAQCBPcHRpb25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGls
ZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIGlmICghaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGlu
YXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgKmltYWdlUGFp
bnRpbmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3Rp
bmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBh
aW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd0ltYWdlQnVmZmVyIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK2NsYXNzIERyYXdJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3SW1hZ2VCdWZmZXI+IGNyZWF0ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQorICAgICAgICA6IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAg
ICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsK
LQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQog
ICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJl
Y3Q7IH0KICAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9vcHRpb25zOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVj
dDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0lt
YWdlQnVmZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBGbG9h
dFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CiAgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKQEAgLTE2
NzQsNyArMTMzMiw3IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxE
cmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8RHJhd0ltYWdlQnVmZmVyPiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cj4gcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyOwpAQCAtMTY5NiwzMSArMTM1NCwyOSBAQCBPcHRpb25hbDxSZWY8
RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gRHJhd0ltYWdlQnVmZmVyOjpjcmVhdGUoKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICpy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlv
bnMgfX07CiB9CiAKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBEcmF3TmF0aXZlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd05h
dGl2ZUltYWdlPiBjcmVhdGUoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9u
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRT
aXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3JjUmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBG
bG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3TmF0aXZlSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAg
TmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CiAgICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwpAQCAtMTczOSw3ICsxMzk1LDcgQEAgdm9pZCBE
cmF3TmF0aXZlSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IERyYXdO
YXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TmF0aXZl
SW1hZ2U+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
T3B0aW9uYWw8TmF0aXZlSW1hZ2VQdHI+IGltYWdlOwogICAgIGRlY29kZXIgPj4gaW1hZ2U7CkBA
IC0xNzY2LDE3ICsxNDIyLDE2IEBAIE9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBEcmF3
TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TmF0aXZlSW1h
Z2U6OmNyZWF0ZSgqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0
LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3RpbmF0
aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3UGF0dGVybiA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0dGVybiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RHJhd1BhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9
CkBAIC0xNzg1LDE2ICsxNDQwLDE1IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHBoYXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdHRlcm4+
IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1f
aW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9u
cyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEFm
ZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IG1fdGlsZVJl
Y3Q7CkBAIC0xODE5LDcgKzE0NzMsNyBAQCB2b2lkIERyYXdQYXR0ZXJuOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPERyYXdQYXR0ZXJuPiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29k
ZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xODU2LDE4MiArMTUxMCwxMDAgQEAgT3B0aW9uYWw8UmVm
PERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwg
KnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywgKm9wdGlvbnMp
OworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICp0aWxl
UmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcsICpvcHRpb25zIH19Owog
fQogCi0vLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVu
Y3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCi1jbGFzcyBCZWdpblRyYW5z
cGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXll
cj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJhd2luZyBpdGVtIGJlY2F1c2UgdGhl
IHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJv
dW5kcy4KKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICAg
ICAgOiBtX29wYWNpdHkob3BhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIGZsb2F0
IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9vcGFjaXR5OwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+
PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsKLSAgICBkZWNvZGVyID4+IG9wYWNpdHk7Ci0gICAg
aWYgKCFvcGFjaXR5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0eSk7Ci19Ci0KLWNsYXNzIEVu
ZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEVuZFRyYW5z
cGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxh
eWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkVu
ZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5j
eUxheWVyPj4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICBy
ZXR1cm4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBEcmF3UmVj
dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UmVjdCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd1JlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhi
b3JkZXJUaGlja25lc3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5EcmF3UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVy
biBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RHJhd1JlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAg
ICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIERyYXdSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fYm9yZGVyVGhpY2tuZXNzOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gRHJhd1Jl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IGJvcmRlclRoaWNrbmVzczsK
LSAgICBkZWNvZGVyID4+IGJvcmRlclRoaWNrbmVzczsKLSAgICBpZiAoIWJvcmRlclRoaWNrbmVz
cykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3UmVjdDo6
Y3JlYXRlKCpyZWN0LCAqYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotY2xhc3MgRHJhd0xpbmUgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmUgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdMaW5lOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50
MikKKyAgICAgICAgOiBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQy
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBw
b2ludDIpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZSgp
OwotCiAgICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQog
ICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7CiAgICAgRmxvYXRQ
b2ludCBtX3BvaW50MjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdM
aW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
cG9pbnQxOwotICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQxOwotICAgIGRlY29k
ZXIgPj4gcG9pbnQxOwotICAgIGlmICghcG9pbnQxKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQyOwotICAgIGRlY29kZXIgPj4g
cG9pbnQyOwotICAgIGlmICghcG9pbnQyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIERyYXdMaW5lOjpjcmVhdGUoKnBvaW50MSwgKnBvaW50Mik7Ci19Ci0KLWNs
YXNzIERyYXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xp
bmVzRm9yVGV4dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBj
cmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBs
b2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKLSAgICB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JU
ZXh0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQg
c2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxv
Y2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9j
a0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQyLDE2
ICsxNjE0LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVy
biBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZG91YmxlTGluZXM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7
CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRT
aXplIG1fbG9jYWxBbmNob3I7CiAgICAgRGFzaEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3Miw3ICsx
NjQzLDcgQEAgdm9pZCBEcmF3TGluZXNGb3JUZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGlu
ZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwog
ICAgIGRlY29kZXIgPj4gYmxvY2tMb2NhdGlvbjsKQEAgLTIxMDQsMTE5ICsxNjc1LDgzIEBAIE9w
dGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkb3VibGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2Nr
TG9jYXRpb24sICpsb2NhbEFuY2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAq
ZG91YmxlTGluZXMpOworICAgIHJldHVybiB7eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9y
LCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAot
Y2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShzdHls
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIG1fc3R5bGU7Cit9OworCitjbGFzcyBEcmF3RWxsaXBzZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgewor
ICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAg
ICBGbG9hdFJlY3QgbV9yZWN0OwotICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7
CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU+IHN0eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7Ci0gICAgaWYgKCFz
dHlsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19Ci0KLWNsYXNzIERy
YXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IERyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgfkRyYXdFbGxpcHNlKCk7Ci0KLSAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0
IG1fcmVjdDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdFbGxpcHNl
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVj
dDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RWxsaXBz
ZT4+IERyYXdFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RWxsaXBzZTo6
Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgRHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBw
YXRoKQorICAgIERyYXdQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3Zl
KHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgocGF0
aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXRoKCk7Ci0K
ICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRl
Y29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdGgo
Y29uc3QgUGF0aCYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxEcmF3UGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGlu
Z1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJv
dW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAg
UGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjIyNiwyNCAr
MTc2MSwzNyBAQCB2b2lkIERyYXdQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IERy
YXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXRoPiBEcmF3
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0
aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQYXRoOjpjcmVhdGUoKnBhdGgpOworICAg
IHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1Bh
dGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgRHJhd0ZvY3VzUmluZ1BhdGgoUGF0aCYmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAg
ICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAs
IG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgRHJhd0Zv
Y3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Q29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aWR0aCh3
aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xv
cikKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpA
QCAtMjI1MSwxNiArMTc5OSwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3Rm9jdXNS
aW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3Qg
UGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIGZsb2F0IG1fd2lk
dGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTIyNzYsNyAr
MTgyMyw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdG
b2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1BhdGg+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29k
ZXIgPj4gcGF0aDsKQEAgLTIyOTgsMzMgKzE4NDUsMzEgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1
c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29s
b3IpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAqY29s
b3IgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdp
ZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5n
UmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYpOwogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBj
b25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9j
dXNSaW5nUmVjdHM+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdG
b2N1c1JpbmdSZWN0cz4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBWZWN0b3I8
RmxvYXRSZWN0PiBtX3JlY3RzOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZz
ZXQ7CkBAIC0yMzQxLDcgKzE4ODYsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gRHJhd0Zv
Y3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxW
ZWN0b3I8RmxvYXRSZWN0Pj4gcmVjdHM7CiAgICAgZGVjb2RlciA+PiByZWN0czsKQEAgLTIzNjMs
NzEgKzE5MDgsNTUgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1
c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUmVj
dHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4g
e3sgKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3QgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEZpbGxSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0K
ICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgRmlsbFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PEZpbGxSZWN0Pj4gRmlsbFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0
OjpjcmVhdGUoKnJlY3QpOwotfQotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20g
RmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmls
bFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhDb2xvcigpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2
YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CkBAIC0y
NDQwLDcgKzE5NjksNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0NTIsMjkgKzE5ODEsMjggQEAgT3B0aW9uYWw8
UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsK
KyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRo
R3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGll
bnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRp
ZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0
aEdyYWRpZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+
IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3
LDcgKzIwMTUsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdp
dGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjYsMzcg
QEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGll
bnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50Ojpj
cmVhdGUoKnJlY3QsIGdyYWRpZW50LT5nZXQoKSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFk
aWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisg
ICAgICAgICwgbV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwg
Y29sb3IsIG9wLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvcjsgfQogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7
IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21w
b3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsK
QEAgLTI1NDAsNyArMjA3Myw3IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9z
aXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk1LDM1IEBA
IE9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRl
KCpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAq
Y29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDog
cHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAg
ICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IsIGJsZW5kTW9kZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkZpbGxSb3VuZGVkUmVjdCgpOwotCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3Io
KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRl
ZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJs
ZW5kTW9kZSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRS
ZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9k
ZTsKQEAgLTI2MDEsNyArMjEzOCw3IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+
IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjYxOCwzMSArMjE1NSwzNSBAQCBPcHRp
b25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9y
LCAqYmxlbmRNb2RlKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9
fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVk
SG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVS
ZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVj
b2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAg
IEZsb2F0Um91bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsK
QEAgLTI2NTcsNyArMjE5OCw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0
OwpAQCAtMjY3NCw3NCArMjIxNSw2MyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU+PiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYg
KCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29s
b3IpOworICAgIHJldHVybiB7eyAqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19Owog
fQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxJbmxpbmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERh
dGEmIHBhdGhEYXRhKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RmlsbElubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOworCisgICAgRmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhE
YXRhKQorICAgICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBh
dGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25zdCBJ
bmxpbmVQYXRoRGF0YSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRp
bmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RC
b3VuZGluZ1JlY3QoKTsgfQogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERh
dGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhE
YXRhOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxp
bmVQYXRoPj4gRmlsbElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhE
YXRhOwotICAgIGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4gRmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwot
fQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYg
cGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5GaWxsUGF0aCgpOworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBh
dGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+
IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBh
dGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9
CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9
OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjc1MSw5MCArMjI4MSw2NSBAQCB2b2lk
IEZpbGxQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVy
ID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIEZpbGxQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZN
b3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRmlsbEVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVs
bGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RmlsbEVsbGlwc2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBk
ZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFz
cyBQdXRJbWFnZURhdGEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRh
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRh
PiBjcmVhdGUoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0
YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92
ZShpbWFnZURhdGEpLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflB1dEltYWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8
SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3Jt
YXQ7IH0KLSAgICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VE
YXRhOyB9CisgICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFn
ZURhdGE7IH0KICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7
IH0KICAgICBJbnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsg
fQogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVzdEZvcm1hdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVf
RVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBS
ZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0K
IAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gRmxvYXRSZWN0KG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBk
ZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAg
IEludFBvaW50IG1fZGVzdFBvaW50OwotICAgIFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOwor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gbV9pbnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZv
cm1hdDsKIH07CkBAIC0yODQzLDE0ICsyMzQ4LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
CiB2b2lkIFB1dEltYWdlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAg
ICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7
CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBt
X3NyY1JlY3Q7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1f
ZGVzdEZvcm1hdDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQ
dXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0Owog
ICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjM4
MywxMDkgQEAgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZv
cm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9y
bWF0KTsKKyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAq
c3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJh
bWVGb3JNZWRpYSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVk
aWEgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRp
YTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5QYWludEZyYW1lRm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAg
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVk
aWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
SWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsg
bV9kZXN0aW5hdGlvbiB9OyB9CiAKK3ByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAg
ZW5jb2RlciA8PCBtX2Rlc3RpbmF0aW9uOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlm
aWVyPiBpZGVudGlmaWVyOwotICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlk
ZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAg
aWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9u
KTsKLX0KLQotY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBT
dHJva2VSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAg
ICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9rZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lV2lkdGg7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBt
X3JlY3Q7CiAgICAgZmxvYXQgbV9saW5lV2lkdGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBTdHJva2VSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJv
a2VSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0g
ICAgZGVjb2RlciA+PiBsaW5lV2lkdGg7Ci0gICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0
LCAqbGluZVdpZHRoKTsKLX0KLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFz
cyBTdHJva2VJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlu
bGluZVBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3Jl
YXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChj
b25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRo
RGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBh
dGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJv
a2VJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpm
cm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBh
dGhEYXRhJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5l
UGF0aERhdGEgbV9wYXRoRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFN0cm9rZUlubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRh
OwotICAgIGRlY29kZXIgPj4gcGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVh
dGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogCi1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IFN0cm9rZVBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTdHJva2VQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBTdHJva2VQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0
aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ry
b2tlUGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ry
b2tlUGF0aCgpOworICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBt
X3BhdGgocGF0aCkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNv
ZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQ
YXRoJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
K3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMzA1MCw3MjEgKzI0OTUsMTE1IEBAIHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U3Ryb2tlUGF0aD4+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8U3Ryb2tlUGF0aD4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAg
aWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0
cm9rZVBhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19
OwogfQogCi1jbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IFN0cm9rZUVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4g
Y3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tl
RWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7
Ci19Ci0KLWNsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVh
clJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6Q2xlYXJSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDog
bV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJl
Y3QocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVj
dCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0g
ICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGVhclJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNp
ZiBVU0UoQ0cpCi1jbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0K
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJv
a2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRl
cm4oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QK
LXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9r
ZVBhdHRlcm4+PiBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICBy
ZXR1cm4gQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxs
UGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm47
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwotCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNv
bnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlG
aWxsUGF0dGVybj4+IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICBy
ZXR1cm4gQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBw
bHlEZXZpY2VTY2FsZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKyAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFj
dG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihzY2FsZUZhY3RvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IHNjYWxlRmFjdG9yKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2Fs
ZUZhY3RvciB7IDEgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV9zY2FsZUZhY3RvcjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNj
YWxlRmFjdG9yOwotICAgIGRlY29kZXIgPj4gc2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZh
Y3RvcikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURl
dmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoKnNjYWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fdHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
YXZlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8VHJhbnNsYXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlJvdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U2NhbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29s
b3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFNldExpbmVDYXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PENsZWFyU2hhZG93PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXA6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PENsaXBPdXQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlw
T3V0VG9QYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxEcmF3SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVk
SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ltYWdlQnVmZmVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZl
cj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZl
SW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlw
c2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PERyYXdGb2N1c1JpbmdSZWN0cz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0Pigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RmlsbElubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxG
aWxsUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFy
UmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJh
bnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxBcHBseUZpbGxQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJ
dGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRl
bVR5cGU+IGl0ZW1UeXBlOwotICAgIGRlY29kZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVt
VHlwZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1U
eXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFNhdmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0
ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gU2NhbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBTZXRDVE06OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENv
bmNhdGVuYXRlQ1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bENvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVT
dHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0U3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
U2V0TGluZUNhcDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0
TGluZURhc2g6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExp
bmVKb2luOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1p
dGVyTGltaXQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFy
U2hhZG93OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
T3V0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5k
czoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdHbHlwaHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0lt
YWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1h
Z2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1h
Z2VCdWZmZXI6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IERyYXdQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3
UmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9y
VGV4dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBEcmF3RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd1BhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9y
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRp
ZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmls
bENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRmlsbElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEZpbGxFbGxpcHNlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gUGFpbnRGcmFtZUZvck1lZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFN0cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5s
aW5lUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFN0cm9rZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENs
ZWFyUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0
cm9rZVBhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhh
bmRsZSk7CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJ
TkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVj
dCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0o
RHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwK
LSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0m
IGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
LQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldENUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25j
YXRlbmF0ZUNUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJ
bmxpbmVGaWxsR3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oU2V0SW5saW5lRmlsbENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldElubGluZVN0cm9rZUNvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFNldFN0cm9rZVRoaWNrbmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldExpbmVKb2luKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3Qp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUHV0SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9r
ZUlubGluZVBhdGgpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykK
LQogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKaW5kZXggYmY1YjgzYjIyYzNmNGM3MjU4MWU2OGI5YTUyZDc3MzAyZDI4Mjk0
ZS4uOTBlYmRlNTVmODk3OTZhODExODc5ZGIwNzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRl
cjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0
YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5kSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0KSk7CisgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGlj
IGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBjaGFuZ2VGbGFncykKQEAgLTg3LDIxICs4NywyMSBAQCBzdGF0aWMgYm9vbCBjb250YWlu
c09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IGNoYQogdm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKIHsKICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0
YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlz
dC5hcHBlbmRJdGVtKFNldFN0YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFn
cykpOworICAgICAgICBhcHBlbmQ8U2V0U3RhdGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxh
Z3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1f
ZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5n
ZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkp
OwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0o
U2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cykpOworICAgICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5h
cHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxs
Q29sb3IuYXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihj
aGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQot
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50Ojpj
cmVhdGUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNl
dElubGluZUZpbGxHcmFkaWVudD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQog
CiB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQpAQCAt
MTM5LDI3ICsxMzksMjcgQEAgdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGEKIAogdm9pZCBSZWNvcmRl
cjo6Y2xlYXJTaGFkb3coKQogewotICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgp
KTsKKyAgICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3Jl
YXRlKGxpbmVDYXApKTsKKyAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNo
QXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGRhc2hBcnJheSwg
ZGFzaE9mZnNldCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxp
bmVKb2luKQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikp
OworICAgIGFwcGVuZDxTZXRMaW5lSm9pbj4obGluZUpvaW4pOwogfQogCiB2b2lkIFJlY29yZGVy
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRN
aXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOworICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0
PihtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTE2OSwxOSArMTY5LDE5IEBAIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpCiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykK
IHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdl
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVu
ZDxEcmF3SW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0
aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFn
ZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9u
LCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAg
IGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
aXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdU
aWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRp
bmdPcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFp
bnRpbmdPcHRpb25zKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9
CiAKQEAgLTE5MCwyMyArMTkwLDIzIEBAIGJvb2wgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYg
KCFtX2RlbGVnYXRlIHx8ICFtX2RlbGVnYXRlLT5sb2NrUmVtb3RlSW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVu
ZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd05hdGl2ZUltYWdl
OjpjcmVhdGUoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsK
KyAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERy
YXdQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+
KGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgYXBwZW5k
SXRlbShTYXZlOjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPFNhdmU+KCk7CiAgICAgbV9zdGF0ZVN0
YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKIH0KIApAQCAt
MjIxLDI1ICsyMjEsMjUgQEAgdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgLy8gSGF2ZSB0
byBhdm9pZCBlbGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3Rh
dGUgY29udGFpbnMgZHJhd2luZyBpdGVtcy4KICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9y
RHJhd2luZyB8PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOwogCi0gICAgYXBwZW5kSXRlbShSZXN0b3Jl
OjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5z
bGF0ZSh4LCB5KTsKLSAgICBhcHBlbmRJdGVtKFRyYW5zbGF0ZTo6Y3JlYXRlKHgsIHkpKTsKKyAg
ICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZs
b2F0IGFuZ2xlSW5SYWRpYW5zKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUlu
UmFkaWFucyk7Ci0gICAgYXBwZW5kSXRlbShSb3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykp
OworICAgIGFwcGVuZDxSb3RhdGU+KGFuZ2xlSW5SYWRpYW5zKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNj
YWxlKHNpemUpOwotICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7CisgICAgYXBw
ZW5kPFNjYWxlPihzaXplKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgdm9pZCBSZWNv
cmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAg
ICByZXR1cm47CiAKICAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICBhcHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBw
ZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRl
KCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgYXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFu
c2Zvcm0pKTsKKyAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFu
c2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkKQEAgLTI2NSwxNTggKzI2NSwxNTggQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7
CisgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lk
IFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRU
cmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lM
YXllcj4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVu
ZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBv
aW50MSwgcG9pbnQyKSk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChE
cmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCks
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8
RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBh
cHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1Bh
dGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQs
IGNvbG9yKSk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNS
aW5nUmVjdHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBl
bmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8RmlsbFJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVt
QW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsK
KyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVu
dDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRp
ZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7
CisgICAgYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1v
ZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUo
cmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJl
Y3QsIGNvbG9yLCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7Cisg
ICAgICAgIGFwcGVuZDxGaWxsSW5saW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChG
aWxsUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsK
KyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0
aCkpOworICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGgu
aW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlu
bGluZURhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5k
PFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0
cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVj
dCkpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9p
ZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5
U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+
KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVu
ZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQ
YXR0ZXJuPigpOwogfQogI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJl
Y3QpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xp
cD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBl
bmQ8Q2xpcE91dD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7
CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7
Ci0gICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAg
YXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6
OmNsaXBCb3VuZHMoKQpAQCAtNDQ0LDE5ICs0NDQsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2Ug
Y28KIAogICAgIGF1dG8gcmVjb3JkaW5nQ29udGV4dCA9IG1ha2VVbmlxdWU8RHJhd2luZ0NvbnRl
eHQ+KGRlc3RpbmF0aW9uLnNpemUoKSwgaW5pdGlhbENUTSk7CiAgICAgZHJhd2luZ0Z1bmN0aW9u
KHJlY29yZGluZ0NvbnRleHQtPmNvbnRleHQoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6OmNyZWF0ZShkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29u
dGV4dC0+dGFrZURpc3BsYXlMaXN0KCkpKTsKKyAgICBhcHBlbmQ8Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzPihkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3Bs
YXlMaXN0KCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBhcHBl
bmRJdGVtKFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKHBsYXllciwgZGVzdGluYXRpb24pKTsK
KyAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0K
IAogdm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvcikKIHsKICAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGlj
aCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KICAgICAvLyBBc3Nl
cnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIGFwcGVuZEl0ZW0oQXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgYXBwZW5k
PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogRmxvYXRS
ZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCkBAIC00NjUsMzAgKzQ2NSw2IEBAIEZsb2F0
UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYXBoaWNzQ29udGV4dDo6CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgUmVjb3JkZXI6
OmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmIGl0ZW0pCi17Ci0g
ICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBpdGVtLmdldCgpOwotICAgIGFwcGVuZEl0ZW0oV1RG
TW92ZShpdGVtKSk7Ci0gICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKLX0KLQotdm9pZCBS
ZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVtKQotewotICAgIEl0ZW0mIG5ld0l0
ZW0gPSBpdGVtLmdldCgpOwotICAgIGF1dG8gdHlwZSA9IG5ld0l0ZW0udHlwZSgpOwotICAgIHdp
bGxBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwotICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1v
dmUoaXRlbSkpOwotICAgIGRpZEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7Ci19Ci0KLXZvaWQgUmVj
b3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Ci17Ci0gICAg
aWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3ND
b250ZXh0KCkpKQotICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMo
cmVjdC52YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0g
aXRlbS5nbG9iYWxCb3VuZHMoKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQocmVjdC52YWx1ZSgp
KTsKLX0KLQogLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQogc3RhdGljIGlubGluZSBm
bG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogewpAQCAtNTA4LDcg
KzQ4NCw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29s
b3Igc2hhZG93Q29sb3I7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBzaGFkb3dFeHRlbnQ9IGJvdW5kczsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9
IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVz
KSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggOTJjMDUxM2E3ZjljNmJjYTUyNTA0NDhmMzA4M2Zk
ZTFjZDY2ZDg5NC4uZmZlMTU5MWJhZmQ0OWRiMzNlOTQzZTk5YzFiYTE0Y2RiYzRjNjAyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRp
bGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgpAQCAtNDgsOCArNDksNiBAQCBzdHJ1Y3Qg
SW1hZ2VQYWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNz
IERyYXdpbmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJ
bXBsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShSZWNvcmRlcik7CkBAIC0xNDgsMTUgKzE0NywzNCBAQCBwcml2YXRlOgogCiAgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJ
dGVtPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1P
ZlR5cGUoVDo6aXRlbVR5cGUpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6
Oml0ZW1UeXBlKTsKKworICAgICAgICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgaWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3
aW5nSXRlbUV4dGVudHMoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBp
dGVtID0gVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBpZiAoYXV0byBy
ZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBt
X2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygq
cmVjdCkpOworICAgICAgICBlbHNlIGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygp
KQorICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1F
eHRlbnQoV1RGOjpudWxsb3B0KTsKKyAgICB9CisKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZU
eXBlKEl0ZW1UeXBlKTsKICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwot
ICAgIHZvaWQgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYpOwog
CiAgICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAg
ICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAog
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRS
ZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5jcHAKaW5kZXggMTJiNWY2MmNjNDI0NTIxNDJkOGI5OGUyZGVmMjU0ZWUxMGQ3ZjE4Mi4u
ZDZiMWE5MjI1NjYyNTBjNTIxY2Q2OTFkMzg5YjFkNTdjNGE0OGYwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTIsMjYgKzUyLDI2IEBAIHN0ZDo6dW5p
cXVlX3B0cjxEaXNwbGF5TGlzdD4gUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGlu
aXRpYWxDbGlwLCBib29sCiAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCiAgICAg
ICAgIHJlcGxheUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0PigpOwogCi0gICAgYXV0byYg
aXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1tpXS5nZXQo
KTsKLQotICAgICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPERyYXdpbmdJdGVt
PihpdGVtKSkgewotICAgICAgICAgICAgY29uc3QgRHJhd2luZ0l0ZW0mIGRyYXdpbmdJdGVtID0g
ZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKGRyYXdpbmdJdGVt
LmV4dGVudEtub3duKCkgJiYgIWRyYXdpbmdJdGVtLmV4dGVudCgpLmludGVyc2VjdHMoaW5pdGlh
bENsaXApKSB7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywg
c3RyZWFtIDw8ICJza2lwcGluZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorI2lmICFMT0dfRElTQUJMRUQKKyAgICBzaXpl
X3QgaSA9IDA7CisjZW5kaWYKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBtX2Rpc3Bs
YXlMaXN0KSB7CisgICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgZXh0ZW50ICYm
ICFleHRlbnQtPmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7CisgICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSsrIDw8ICIg
IiA8PCBpdGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJhcHBseWluZyAiIDw8IGkg
PDwgIiAiIDw8IGl0ZW0pOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBz
dHJlYW0gPDwgImFwcGx5aW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgaWYg
KCFtX2RlbGVnYXRlIHx8ICFtX2RlbGVnYXRlLT5hcHBseShpdGVtLCBtX2NvbnRleHQpKQogICAg
ICAgICAgICAgaXRlbS5hcHBseShtX2NvbnRleHQpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh0
cmFja1JlcGxheUxpc3QpKQotICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5kSXRlbShjb25z
dF9jYXN0PEl0ZW0mPihpdGVtKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxp
c3QpKSB7CisgICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmQoaXRlbSk7CisgICAgICAgICAg
ICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICAgICAgcmVwbGF5TGlzdC0+
YWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGTW92ZShleHRlbnQpKTsKKyAgICAgICAgfQogICAgIH0K
LSAgICAKKwogICAgIHJldHVybiByZXBsYXlMaXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuaAppbmRleCA0MGNkMGZmMGQ0MTY4MGNmYzczZTUwNGRlY2ZjM2RlZjg3
NzUzMjMzLi4wNDVjYWNjZThhMDFjOGQ1ZGNiNjU4YzQwZDYzZTlhMzU4OWI1YjY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkRl
bGVnYXRlKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVtJiwgR3JhcGhpY3ND
b250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0
ZW1IYW5kbGUsIEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgfTsKICAg
ICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGIyNDc4MGNkN2IwNzQ0M2IxNTUwMjZjZjZiMTk4
MWM4MjIyYmQ1MGMuLjc4ZTI2NWRiZjU0ZTliZDI0YjlkNDFiNzM5MDA5NzAyMTQ5MWZhOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlci5oCkBAIC0yNywxNCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAorI2luY2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJ
dGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBS
ZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJh
Y2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdh
dGUgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNv
cmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VDb25j
cmV0ZUltYWdlQnVmZmVyOjpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVm
ZmVyOjptX2JhY2tlbmQ7CkBAIC03MCwxMCArNzMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0s
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKKyAgICBib29sIGFw
cGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5
cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSkgewot
ICAgICAgICAgICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGEmPihpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkgeworICAgICAgICAgICAgYXV0
byYgcHV0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJ
bWFnZURhdGE+KCk7CiAgICAgICAgICAgICBwdXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5p
bnB1dEZvcm1hdCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJ
dGVtLnNyY1JlY3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRh
SXRlbS5kZXN0Rm9ybWF0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
QEAgLTg0LDYgKzg3LDExNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAorICAg
IE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9S
RVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9Q
YXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3SW1hZ2VCdWZmZXI6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d05hdGl2ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQ
YXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
dGVybj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdl
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRh
dGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdy
YWRpZW50PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0
OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJvdW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAg
ICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dEltYWdlRGF0YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwg
aGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xlYXJSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xlYXJTaGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpDbGlwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xp
cE91dDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0Ogor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJO
X1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0
aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICBy
ZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZGYw
ZWQ0N2U1YmVmZDY3OTg0NmE0YzdmNTA2MjAxMzY2NDYwYjY4MC4uNmQ4MDNmZWE3YjhkNDFiMWJi
MDdmOTM2Y2IyZmY0NjAxNDk2ODcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIs
MTAgKzcyLDEwIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFw
cGx5UmVzb3VyY2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3Vy
Y2VJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxj
b25zdCBEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0u
aXM8RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3
SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZm
ZXIoZHJhd0l0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAo
IWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEy
IEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3Qg
RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0
OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0s
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYg
KCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlh
SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAg
YXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJv
Y2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5ICsxMzksNDUgQEAgdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
U2hvdWxkRmx1c2hDb250ZXh0IGZsdXNoQ29udGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlz
dChkaXNwbGF5TGlzdCk7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNw
bGF5TGlzdChbJl0gKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBp
ZGVudGlmaWVyKSAtPiB1aW50OF90KiB7CisgICAgICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9
IG1fc2hhcmVkSXRlbUJ1ZmZlcnMudGFrZShpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0pOworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgewor
ICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpOworICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRl
ZCgpKQorICAgICAgICBkaXNwbGF5TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChkb3duY2FzdDxB
Y2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlcikpOworICAgIGVsc2UKKyAg
ICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQoZG93bmNhc3Q8VW5hY2NlbGVy
YXRlZFJlbW90ZUltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlcikpOworCisgICAgaW1hZ2VCdWZmZXIt
PmZsdXNoRGlzcGxheUxpc3QoKmRpc3BsYXlMaXN0KTsKKworICAgIGlmIChmbHVzaENvbnRleHQg
PT0gU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMpCisgICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENv
bnRleHQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlM
aXN0QW5kQ29tbWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qs
IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQogewotICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVS
ZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3Qp
OwotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIGZsdXNoRGlz
cGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOwotICAgIH0KKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Ok5vKTsKK30KKwordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5kbGUsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRsZSwgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Olllcyk7CisgICAgZmx1
c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBJbnRSZWN0IHNyY1Jl
Y3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjgsNiArMTkzLDEyIEBAIHZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1vdGVSZXNvdXJjZShy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRl
bnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYgaGFuZGxl
KQoreworICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6bWFwKGhhbmRs
ZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpKQorICAgICAgICBt
X3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNoYXJlZE1lbW9yeSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDI4NWUyZjc0YjRkNGZkNmU2YThjNWU5MTAy
NWExYzkyNmY1ZmZiMTUuLjMwNTIwNmI1ZmJmMGMxYWExMWIzZTEwMjk5ZjNlNWRmZTgwYWQ0ZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMzUsNyArMzUsOSBAQAogI2luY2x1ZGUgIk1lc3Nh
Z2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMu
aD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC02Myw4ICs2NSw4IEBAIHB1YmxpYzoK
ICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KCkgY29uc3Q7CiAKICAgICAvLyBSZW5kZXJpbmcgb3BlcmF0aW9ucy4KLSAgICBib29sIGFwcGx5
UmVzb3VyY2VJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIGJv
b2wgYXBwbHlSZXNvdXJjZUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIGJvb2wgYXBwbHlNZWRpYUl0ZW0oV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwog
CiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICB2b2lkIGltYWdlQnVmZmVyQmFja2Vu
ZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtNzMsNiArNzUsOSBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAorICAgIGVudW0gY2xhc3MgU2hvdWxk
Rmx1c2hDb250ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGFwcGx5RGlzcGxheUxp
c3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dCk7CisKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04MywxNCArODgsMTYgQEAgcHJpdmF0ZToKIAogICAgIC8v
IE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1p
dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlzdEZs
dXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNw
bGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIERpc3BsYXlM
aXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
OwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0
YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJl
ZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29u
c3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsKIAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUg
bV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7CisgICAgSGFzaE1hcDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1v
cnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGE4OGUwZmI2MjYyNDkx
ODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMuLmJiOTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVj
MGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBA
IC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJ
bWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
LSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlm
aWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdChXZWJLaXQ6OlNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RB
bmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2Vi
S2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAt
PiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1hZ2VEYXRhKSBTeW5jaHJvbm91cwotICAgIHZv
aWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVkSXRl
bURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZp
ZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKQorICAgIFJlbGVhc2VS
ZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggM2I4MjM2ZGE4
M2Q3YzY2MjM5M2MxNDc3ZjRmOWFlMDU3NzM1MzY3OS4uNDI0NTgwMmQyNTRhNmUwZTBiOTAyMTBj
MWU1MTk3NmYxMDNkYWRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CkBAIC0yMDgsNiArMjA4LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRf
ZGVjbGFyZWQoKToKICAgICAgICAgJ1N0cmluZycsCiAgICAgICAgICdXZWJDb3JlOjpDb2xvclNw
YWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRpY3RhdGlvbkNvbnRleHQnLAorICAgICAgICAnV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE9yV29ya2VySWRlbnRpZmllcics
CkBAIC01ODYsNiArNTg3LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAg
ICdKU0M6Ok1lc3NhZ2VTb3VyY2UnOiBbJzxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4n
XSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSc6IFsnPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAogICAgICAgICAnSW5zcGVjdG9yOjpGcm9udGVu
ZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlJzogWyc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlcklkZW50aWZpZXInOiBbJzxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oPiddLAog
ICAgICAgICAnTWVkaWFUaW1lJzogWyc8d3RmL01lZGlhVGltZS5oPiddLAogICAgICAgICAnTW9u
b3RvbmljVGltZSc6IFsnPHd0Zi9Nb25vdG9uaWNUaW1lLmg+J10sCiAgICAgICAgICdTZWNvbmRz
JzogWyc8d3RmL1NlY29uZHMuaD4nXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWE3NGQ2MTVhYmQzZjRhMzE4NjI1
MmZmMGZkY2I4NzFlNzBmYTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNvbnN0IERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgZGlzcGxheUxpc3Qu
Zm9yRWFjaEl0ZW1CdWZmZXIoWyZdIChhdXRvJiBoYW5kbGUpIHsKKyAgICAgICAgbV9idWZmZXJz
LmFwcGVuZCh7IGhhbmRsZS5pZGVudGlmaWVyLCBoYW5kbGUuY2FwYWNpdHkgfSk7CisgICAgfSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNwbGF5TGlzdChJdGVtQnVmZmVyUHJvdmlkZXImJiBi
dWZmZXJQcm92aWRlcikgY29uc3QKK3sKKyAgICBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRs
ZXMgaGFuZGxlczsKKyAgICBoYW5kbGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9idWZmZXJz
LnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBbaWRlbnRpZmllciwgY2FwYWNpdHldIDogbV9idWZm
ZXJzKSB7CisgICAgICAgIGF1dG8qIGRhdGEgPSBidWZmZXJQcm92aWRlcihpZGVudGlmaWVyKTsK
KyAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgaGFuZGxlcy51bmNoZWNrZWRBcHBlbmQoeyBpZGVudGlmaWVyLCBkYXRhLCBjYXBhY2l0eSB9
KTsKKyAgICB9CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
PihXVEZNb3ZlKGhhbmRsZXMpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MTc1ZTExNGYyM2JjOGZiOGU1N2NkOTBmNjRhMzNiZTI2MmUxZjMxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaApAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZSB7CitwdWJsaWM6CisgICAgdXNpbmcgSXRlbUJ1ZmZlclByb3ZpZGVyID0g
RnVuY3Rpb248dWludDhfdCooV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyKT47CisKKyAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBjcmVhdGVEaXNwbGF5TGlzdChJdGVtQnVmZmVyUHJvdmlk
ZXImJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRl
OgorICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBzaXplX3Q+PiYmIGJ1ZmZlcnMpCisg
ICAgICAgIDogbV9idWZmZXJzKFdURk1vdmUoYnVmZmVycykpCisgICAgeworICAgIH0KKworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyLCBzaXplX3Q+PiBtX2J1ZmZlcnM7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYnVmZmVyczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gT3B0aW9uYWw8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU+IFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxWZWN0b3I8
c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6
ZV90Pj4+IGJ1ZmZlcnM7CisgICAgZGVjb2RlciA+PiBidWZmZXJzOworICAgIGlmICghYnVmZmVy
cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBXVEZNb3Zl
KCpidWZmZXJzKSB9fTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRl
eCBlMGFiNzQzNmJhZGMzNDYzNzQ5NDY2MzM0NzE5YjQ1ZWRmZDJiMzA2Li41MGUxMDI0Y2FlMGRj
MDQwY2FjMzIzY2JjZDdlYzVlMTQ3NDQ5NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTE3Myw2ICsxNzMs
NyBAQCBTaGFyZWQvU2VydmljZVdvcmtlckluaXRpYWxpemF0aW9uRGF0YS5jcHAKIFNoYXJlZC9T
ZXNzaW9uU3RhdGUuY3BwCiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcCBAbm8tdW5pZnkKIFNo
YXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKK1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoU3RvcmUuY3BwCiBTaGFyZWQvU2hhcmVkU3Ry
aW5nSGFzaFRhYmxlUmVhZE9ubHkuY3BwCiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNDY2NWNjYjdiYzZhZjdhN2EwODkxNWZkZTQ2NzI2ZDk2N2Y1ZmNiNC4uYzgxZTQ4YWIxODc1
ODQ3YzBmNTY4MDlhNTgyNzBmYWI3MTUxOTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xODczLDYgKzE4NzMsNyBAQAogCQlGNDRE
RkVCMjFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ0REZFQjAxRTlFNzUyRjAwMzhEMTk2
IC8qIFdlYkljb25VdGlsaXRpZXMuaCAqLzsgfTsKIAkJRjQ4RDJBODUyMTU4M0E3RTAwQzY3NTJC
IC8qIEFwcEtpdFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQSS5oICovOyB9OwogCQlG
NDk2QTQzMTFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDk2QTQyRjFGNThB
MjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmggKi87IH07CisJCUY0QTZE
NkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRBNkQ2QkIyNTRDQTNFOTAw
QjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi87IH07CiAJCUY0Q0IwOUU1MjI1
RDVBMDkwMDg5MTQ4NyAvKiBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Q0IwOUU0MjI1RDVBMDMwMDg5MTQ4
NyAvKiBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaCAqLzsgfTsKIAkJRjRENUY1MUQyMDYwODdB
MTAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ1RjUxOTIwNjA4N0EwMDAzOEJC
QTggLyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKIAkJRjRENUY1MUYy
MDYwODdBMTAwMzhCQkE4IC8qIFdLUXVpY2tib2FyZExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1MUIyMDYwODdB
MTAwMzhCQkE4IC8qIFdLUXVpY2tib2FyZExpc3RWaWV3Q29udHJvbGxlci5oICovOyB9OwpAQCAt
NTQ1OSw2ICs1NDYwLDggQEAKIAkJRjQ4RDJBODQyMTU4M0EwMjAwQzY3NTJCIC8qIEFwcEtpdFNQ
SS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBcHBLaXRTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsgcGF0aCA9IGlv
cy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRjQ5NkE0MzAxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgcGF0
aCA9IGlvcy9EcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZCRDI1NENBNTIyMDBCNjVGQUEgLyogU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEFDNjU1RTIyQTMx
NDBFMDBBMDU2MDcgLyogV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFs
dWVzSU9TLm1tOyBwYXRoID0gaW9zL1dlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRCMzc4RDAyMUREQkJBQjAwOTVBMzc4IC8q
IFdlYlVuZG9TdGVwSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVW5kb1N0ZXBJRC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vic2l0
ZU1lZGlhU291cmNlUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVNZWRpYVNvdXJjZVBv
bGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjE2Niw2ICs2MTY5LDggQEAK
IAkJCQkxQTY0MjBFMzEyRENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmggKi8sCiAJ
CQkJNTEyMTc0NUUxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCAqLywK
IAkJCQk1MTIxNzQ1RjE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAqLywK
KwkJCQlGNEE2RDZCRDI1NENBNTIyMDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
Y3BwICovLAorCQkJCUY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oICovLAogCQkJCTgzMTNGN0VBMUY3REFFMDQwMEI5NDRFQiAvKiBTaGFyZWRTdHJp
bmdIYXNoU3RvcmUuY3BwICovLAogCQkJCTgzMTNGN0U5MUY3REFFMDMwMEI5NDRFQiAvKiBTaGFy
ZWRTdHJpbmdIYXNoU3RvcmUuaCAqLywKIAkJCQk4MzEzRjdFODFGN0RBRTAzMDBCOTQ0RUIgLyog
U2hhcmVkU3RyaW5nSGFzaFRhYmxlLmNwcCAqLywKQEAgLTExMzE1LDYgKzExMzIwLDcgQEAKIAkJ
CQk1MTIxNzQ2MTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUExODM0OTQyMjRFRjQ2NzgwMEJEQzlBOCAvKiBTaGFyZWRCdWZmZXJDb3B5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREMxOEZGNkVGMkEzMTMwQzEzMDE3NjcgLyogU2hhcmVk
QnVmZmVyRGF0YVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjRBNkQ2QkMyNTRDQTNF
OTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTI0QkVENTEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRDRCNEQ5RDFFNzY1RTAwMDBEMjcwOTIgLyogU2hhcmVkUmluZ0J1ZmZlclN0b3Jh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMTNGN0VDMUY3REFFMDgwMEI5NDRFQiAvKiBTaGFy
ZWRTdHJpbmdIYXNoU3RvcmUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaAppbmRleCBmNzdmMzdlZTQ3MTdmMzcxMWJkZTNmYWZkZDg4MDgyYzZhYWIwODkwLi43NWU0
MDE0Yzc2OGE3MDVjZDg3OGEzM2VkZmU0NWQ3MmNmOWIzNjhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaApAQCAtMjcsNiArMjcsMTAgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdFJlY29yZGVyLmg+CkBAIC0zNiw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
QmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlIHsKK2NsYXNzIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUs
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgewog
ICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOwogICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjptX2RyYXdpbmdDb250ZXh0OwpAQCAtNzcsNiArODEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkobWFrZVdlYWtQdHIocmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSk7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3Qo
KS5zZXRJdGVtQnVmZmVyQ2xpZW50KHRoaXMpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRp
c3BsYXlMaXN0KCkuc2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGZhbHNlKTsKICAgICB9CiAK
ICAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVu
dGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KQEAgLTE4Niw2ICsxOTIsMTEw
IEBAIHByb3RlY3RlZDoKICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKICAgICB9CiAKKyAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVy
KHNpemVfdCBjYXBhY2l0eSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAgICAgICAgIHJldHVybiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+Y3JlYXRlSXRlbUJ1ZmZlcihjYXBhY2l0eSk7CisKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVm
UHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUhhbmRsZSBpdGVtKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChpdGVtLnR5cGUoKSkgeworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVu
Y29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KCkpOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFBhdGg6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXBQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+
KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2Rl
U2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+
KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ds
eXBocz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KCkpOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoK
KyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZl
SW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RHJhd1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNv
ZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJu
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4g
SVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5j
b2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJl
Y3Q+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmpl
Y3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpF
bmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aENvbG9yPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNv
ZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkp
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVT
aW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xl
T2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFn
ZURhdGE+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0TGluZURhc2g6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5n
bGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
YXRlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KCkpOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZVBhdGg+KCkpOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgor
I2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGlwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcE91dDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2Fw
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpv
aW46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6
CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0
cm9rZVJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpU
cmFuc2xhdGU6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorCiAgICAgdm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZSB0eXBlKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKHR5
cGUgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggZjlhN2RjNWRlMDI4
NzcxNGU2NmVjYjE3MTc0MWMyZTg5NTM4ZTkxMi4uNzdiNzA2MDA0MjJmYjQwNGVmNjI1YjgxNjVj
N2Y0OGM5OWU4MzYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTE2LDEzICsx
MTgsMTUgQEAgUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGkKIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3QoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0LCByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0KHsgZGlzcGxheUxp
c3QgfSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5jbGVhcigpOwogfQogCiBEaXNwbGF5
TGlzdEZsdXNoSWRlbnRpZmllciBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlz
cGxheUxpc3RBbmRDb21taXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKIHsKICAgICBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlm
aWVyID0gRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7Ci0gICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdEFuZENvbW1p
dChkaXNwbGF5TGlzdCwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCh7IGRp
c3BsYXlMaXN0IH0sIHNlbnRGbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVkSXRlbUJ1
ZmZlcnMuY2xlYXIoKTsKICAgICByZXR1cm4gc2VudEZsdXNoSWRlbnRpZmllcjsKIH0KIApAQCAt
MTU1LDYgKzE1OSwyMyBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hE
aXNwbGF5TGlzdFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSQogICAgICAgICBkb3duY2Fz
dDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXJQcm94eT4oKmltYWdlQnVmZmVyKS5jb21t
aXRGbHVzaERpc3BsYXlMaXN0KGZsdXNoSWRlbnRpZmllcik7CiB9CiAKK0Rpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySGFuZGxlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1
ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZGVm
YXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplID0gMSA8PCAxNjsKKworICAgIGF1dG8gc2hhcmVkTWVt
b3J5ID0gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzdGQ6Om1heChkZWZhdWx0U2hhcmVkSXRlbUJ1
ZmZlclNpemUsIGNhcGFjaXR5KSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgc2hhcmVk
TWVtb3J5SGFuZGxlOworICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKHNoYXJlZE1lbW9y
eUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEo
aWRlbnRpZmllciwgeyBXVEZNb3ZlKHNoYXJlZE1lbW9yeUhhbmRsZSksIHNoYXJlZE1lbW9yeS0+
c2l6ZSgpIH0pLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0
ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBzaGFyZWRNZW1vcnkuY29weVJlZigpKTsKKworICAg
IHJldHVybiB7IGlkZW50aWZpZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1l
bW9yeS0+ZGF0YSgpKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkgfTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaAppbmRleCBlOTllM2Q3MWNhOTI2MjZhNjk2MmNjOTQ4Nzdh
N2MxMWI4NWVkYmE3Li5kYzhiZWIyMjFhMzJhNDJhZTI0ODA2OGZjZjA0YjM2NTQyMTM0ZjhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5LmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC02MCw2
ICs2MSw3IEBAIHB1YmxpYzoKICAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CiAK
ICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkmIHJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSgp
IHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5OyB9CisgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOwogCiAg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKQEAgLTcyLDYgKzc0LDcgQEAgcHVibGlj
OgogICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1l
bW9yeTo6SVBDSGFuZGxlJik7CiAgICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVs
ZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAKQEAgLTg1LDYgKzg4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGltYWdlQnVmZmVyQmFja2Vu
ZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdFdhc0Nv
bW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKIAorICAgIEhhc2hNYXA8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyLCBSZWZQdHI8U2hhcmVkTWVtb3J5Pj4gbV9zaGFyZWRJdGVtQnVm
ZmVyczsKICAgICBSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkgbV9yZW1vdGVSZXNvdXJjZUNhY2hl
UHJveHkgeyAqdGhpcyB9OwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJh
dGUoKSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggOGYyNDU4NTYzNWY0NzA4M2QxZGIyN2E1YjM5NjY2NWYzMTVlYmNi
MC4uOWYyNmEyMzBjZjY4YjBiZjg4MDkyOGI3Y2VmYmJkODdmODUzNDRkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTIzLDgg
KzIzLDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKLSAgICB2b2lkIEltYWdlQnVmZmVy
QmFja2VuZFdhc0NyZWF0ZWQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3Jl
OjpJbnRTaXplIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKQotICAgIHZvaWQgRmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChXZWJL
aXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBGbHVzaERpc3BsYXlMaXN0V2FzQ29t
bWl0dGVkKFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCmluZGV4IDNmNWE3M2JlYzNiZjI4NmU1Mjk4MWRlNDhi
OTBjMzFkMDE5ZDhjM2QuLjBmOWE2ZThmMTllMWQ5ODU2OWZlZDFiYmM0MWQwNzY4M2VhY2YxYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzc3YzY4ODJiYWYx
MWY2OTAzMDg3NjU5OWU3NTRjNWU4YTRkNzI3MC4uMTEyMjcxNzI2OGQ0OWZjM2NjYTg4M2U4NjI4
NjRiOGIxNjQxNzE3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTEwLTMwICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRp
c3BsYXkgbGlzdHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFy
ZWQgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTg0MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWJhc2VsaW5lIHNldmVyYWwgZXhpc3RpbmcgKG5vbi1HUFUtcHJvY2VzcykgZGlzcGxheSBs
aXN0IHRlc3RzIHRvIGFjY291bnQgZm9yIGEgc2xpZ2h0IHR3ZWFrIGluIHRoZSBmb3JtYXQgaW4K
KyAgICAgICAgd2hpY2ggZGlzcGxheSBsaXN0cyBhcmUgZHVtcGVkIGFzIHRleHQuIE1vcmUgc3Bl
Y2lmaWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgbm93IGR1bXBlZCBhZnRlciBlYWNo
CisgICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0aGVyIHRoYW4gYmVmb3JlLgorCisgICAgICAgICog
ZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAq
IGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3Rl
ZC50eHQ6CisKIDIwMjAtMTEtMDMgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gTGF5b3V0IFRlc3Qgd2ViYXVkaW8vY29kZWMtdGVzdHMvbXAzLzEyOGti
cHMtNDRraHouaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDMyODg0ODA2Mjcw
MTlkNTQwMmQ5NDI1ZmM0YTEzMTM3NzBlY2IzMWEuLjE0NTFiMTkyNTNjMzIzODkyOGJiZDlmNWU1
ZGViYjkyNzRjNTBkNTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52
YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTYsMTAgKzYsOCBAQAogICAo
ZmlsbC1jb2xvciAjQzgwMDAwKQogICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChm
aWxsLXJlY3QKLSAgKGV4dGVudCBhdCAoMTAsMTQwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAo
MTAsMTApIHNpemUgNTV4NTApKQorICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApIGV4dGVu
dCBhdCAoMTAsMTQwKSBzaXplIDU1eDUwKQogKHNldC1pbmxpbmUtZmlsbC1jb2xvcgogICAoY29s
b3IgIzAwMDBDODgwKSkKIChmaWxsLXJlY3QKLSAgKGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1
eDUwKQotICAocmVjdCBhdCAoMzAsMzApIHNpemUgNTV4NTApKQorICAocmVjdCBhdCAoMzAsMzAp
IHNpemUgNTV4NTApIGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUwKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhw
ZWN0ZWQudHh0CmluZGV4IGU5ZjU0MDQxN2JkNmU1ZGM3Nzg2MTVlNWYzNzk0OTc2ZTQxOTVmOGQu
LjU5MGI5M2Y1Yzg5MmNhZTM3ZjQyNDYwOWE4ZmU0ODAzM2U2NjgzNjggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQKQEAgLTksOSArOSw4IEBACiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhl
aWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3Np
dGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQg
KDUwLDUwKSBzaXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9w
ZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1v
ZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNm
b3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1
ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CmluZGV4IGUwNDUyYTE3M2ExYWZlMjM3ZjcyOGQz
MGJjMjdlYzYwZWVjOTYyM2QuLjI4Y2NmNGMwMTg1OWRlMTkwYjBhOWEyN2ZhMmZlYzAwNjNlZDhl
MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMt
dHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dApAQCAtMTEsMTEgKzExLDEwIEBA
CiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxl
Z2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNy4x
NCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEw
MCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVy
KQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBh
dCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUpCiAocmVzdG9yZSkKIChzZXQtY3RtCiAg
IChzZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1l
eHBlY3RlZC50eHQKaW5kZXggYmQ4NzZkZjQwM2E0YWRkMGJjMzkxZjdjNjJhYzJiNGMzYmNmN2Rh
MC4uYmMxN2I1MTE0OTlmODI1NmM5OTI5MGRhZTg2MTRkNDg5NGNhZjljYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQu
dHh0CkBAIC0zLDI5ICszLDI0IEBACiAgICh4IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwtY29t
cG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogICAocmVjdCBh
dCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChjb2xvciAjMDA4MDAwKQogICAoY29tcG9zaXRlLW9w
ZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1v
ZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogKHNldC1zdGF0ZQogICAo
Y2hhbmdlLWZsYWdzIDMyOTYwKQogICAoZmlsbC1jb2xvciAjMDAwMEZGKQogICAoc3Ryb2tlLXN0
eWxlIDApCiAgIChzaG91bGQtYW50aWFsaWFzIDApKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0
ICgwLDApIHNpemUgMTA0eDIpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDIpCi0gIChib3Jk
ZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQg
KDAsMCkgc2l6ZSAxMDR4MikKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwxMDIpIHNpemUg
MTA0eDIpCiAgIChyZWN0IGF0ICgwLDEwMikgc2l6ZSAxMDR4MikKLSAgKGJvcmRlci10aGlja25l
c3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMCwxMDIpIHNp
emUgMTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKICAg
KHJlY3QgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisg
IChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDJ4MTA0KQogKGRy
YXctcmVjdAotICAoZXh0ZW50IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDEw
MiwwKSBzaXplIDJ4MTA0KQotICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10
aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgxMDIsMCkgc2l6ZSAyeDEwNCkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVj
dC1leHBlY3RlZC50eHQKaW5kZXggYWRkZDJjYTQyNTBjMjRhMGM5ZWUyMjU1ZDQyNzVhNzZmNjA0
M2VlZC4uYmI1OTNkMjBmNmRhNjQ4NjI5MmQzNmMwMjIwZTJhOWQ4NzJmODJiOSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBw
ZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTMsMTEgKzMsMTAgQEAgcmVjb3JkZWQ6CiAgICh4IDAu
MDApCiAgICh5IDAuMDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDQx
MiwwKSBzaXplIDEwMHgxMDApCiAgIChyZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAo
Y29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChi
bGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIs
MCkgc2l6ZSAxMDB4MTAwKQogCiByZXBsYXllZDoKICgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413130</attachid>
            <date>2020-11-03 17:34:33 -0800</date>
            <delta_ts>2020-11-03 17:50:18 -0800</delta_ts>
            <desc>More WIP</desc>
            <filename>bug-218406-20201103173432.patch</filename>
            <type>text/plain</type>
            <size>368648</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRmNGU3MWQ2ODFlMmZj
MDFhY2FiNDZkMTk1MmE4ZjJiNGJlYzk3Ny4uYTg0MjAzMDI4NGU2ZjJlNzUxMmVlYTgwY2Q2NTI4
YjljN2E5YzQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwNyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZSBpdGVtIGRhdGEgKHdoZXRoZXIgZW5jb2RlZCwgb3IgYXMgYW4g
aW5saW5lCisgICAgICAgIG9iamVjdCkuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgZGlzcGxheSBsaXN0
cyBvdXRzaWRlIG9mIHRoaXMgY29udGV4dCAoZS5nLiBpbiBvdGhlciBwYXJ0cyBvZiBXZWJDb3Jl
LCBzdWNoIGFzIHRoZQorICAgICAgICBnbHlwaCBkcmF3aW5nIGNhY2hlKSwgd2UgZG9uJ3QgaGF2
ZSBhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGAuIFRvIGhhbmRsZSB0aGlzLCB0aGUgaXRlbSBi
dWZmZXIgaW5zdGVhZAorICAgICAgICBhbGxvY2F0ZXMgaXRzIG93biAobm9uLXNoYXJlZC1tZW1v
cnkpIGJ1ZmZlcnMsIHdoaWNoIGl0IG1hbmFnZXMgYW5kIGRlbGV0ZXMgd2hlbiBpdCBpcyBkb25l
LiBJZiBhbnkgb3V0LW9mLWxpbmUKKyAgICAgICAgaXRlbXMgYXJlIGNvbnN0cnVjdGVkIHdpdGhp
biB0aGVzZSBidWZmZXJzLCBgSXRlbUJ1ZmZlcmAgd2lsbCBhZGRpdGlvbmFsbHkgY2FsbCB0aGVp
ciBkZXN0cnVjdG9ycyBwcmlvciB0bworICAgICAgICBkZWxldGluZyB0aGVzZSBidWZmZXJzLgor
CisgICAgICAgIFNlZSBwZXItY2hhbmdlIGNvbW1lbnRzIGJlbG93IGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPSk6CisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIG1vdmUgY29uc3RydWN0b3IgYnkgZXhj
aGFuZ2luZyBvd25lcnNoaXAgb2YgdGhlIGl0ZW0gYnVmZmVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNUZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZHVtcCBjb25zdCk6CisKKyAgICAg
ICAgQWRqdXN0IHRoZSBmb3JtYXQgd2hlbiBwcmludGluZyBkaXNwbGF5IGxpc3RzIHRvIGBUZXh0
U3RyZWFtYC4gTm93IHRoYXQgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHRyYWNrZWQgb24gdGhl
CisgICAgICAgIGRpc3BsYXkgbGlzdCByYXRoZXIgdGhhbiBiZWluZyBvbiBlYWNoIGRyYXdpbmcg
aXRlbSwgd2UgcHJpbnQgdGhlbSBvdXQgYWZ0ZXIgZWFjaCBpdGVtIChhcyBvcHBvc2VkIHRvIGJl
aW5nIGluCisgICAgICAgIHRoZSBtaWRkbGUgb2YgZWFjaCBpdGVtKS4KKworICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisKKyAg
ICAgICAgVGFsbHkgdXAgdGhlIHNpemUgb2YgdGhlIGRpc3BsYXkgbGlzdCBieSB0YWtpbmcgdGhl
IHN1bSBvZiB0aGUgc2l6ZXMgb2YgZWFjaCByZWFkb25seSBzZWdtZW50LCBhcyB3ZWxsIGFzIHRo
ZQorICAgICAgICB3cml0YWJsZSBidWZmZXIgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNvbnN0KToKKworICAgICAgICBBIERpc3Bs
YXlMaXN0IGlzIGVtcHR5IGlmIGl0IGNvbnRhaW5zIG5vIGl0ZW0gZGF0YTogaW4gb3RoZXIgd29y
ZHMsIHRoZXJlIGFyZSBubyByZWFkb25seSBidWZmZXIgc2VnbWVudHMsIGFuZAorICAgICAgICB0
aGVyZSBpcyBhbHNvIG5vdGhpbmcgd3JpdHRlbiB0byB0aGUgd3JpdGFibGUgYnVmZmVyIHNlZ21l
bnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNldEl0
ZW1CdWZmZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIHRv
IGl0ZXJhdGUgb3ZlciBlYWNoIEl0ZW1CdWZmZXJIYW5kbGUgaW4gdGhlIGRpc3BsYXkgbGlzdC4g
VGhpcyBpbmNsdWRlcyBhbGwgcmVhZG9ubHkgaGFuZGxlcywgYW5kCisgICAgICAgIHRoZW4gdGhl
IHdyaXRhYmxlIGhhbmRsZSAoaWYgaXQgZXhpc3RzKS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMpOgorCisg
ICAgICAgIEFkZCBhbiBvcHRpb24gdG8gYWxsb3cgdGhlIGRpc3BsYXkgbGlzdCB0byB0cmFjayBk
cmF3aW5nIGl0ZW0gZXh0ZW50cy4gQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFsd2F5cyB0cmFj
aworICAgICAgICBleHRlbnRzIGZvciBkcmF3aW5nIGl0ZW1zOyBob3dldmVyLCB3aGVuIHByb3Bh
Z2F0aW5nIGRpc3BsYXkgbGlzdHMgdG8gdGhlIEdQVSBwcm9jZXNzIGZvciBwbGF5YmFjaywgdGhl
c2UKKyAgICAgICAgZXh0ZW50cyB3ZXJlIG5ldmVyIHNlbnQgYWxvbmcgd2l0aCBJUEMsIGFuZCBz
byB0aGlzIGVuZGVkIHVwIGp1c3QgYmVpbmcgdW5uZWNlc3Nhcnkgd29yay4gQWRkaXRpb25hbGx5
LCB0aGUKKyAgICAgICAgaW5pdGlhbCBjbGlwIGluIHRoZSBHUFUgcHJvY2VzcyBpcyBhbHNvIG5l
dmVyIHNldCwgc28gY29tcHV0aW5nIHRoZXNlIGV4dGVudHMgbmV2ZXIgaGVscGVkLgorCisgICAg
ICAgIFRoYXQgc2FpZCwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHN0aWxsIHByaW50ZWQgb3V0
IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZywgc28gd2UgbmVlZCB0byBrZWVwIHRoaXMKKyAg
ICAgICAgbG9naWMgaW50YWN0OyB0aGlzIHJlZmFjdG9yaW5nIG9ubHkgZGlzYWJsZXMgZXh0ZW50
IGNvbXB1dGF0aW9uIGZvciBkaXNwbGF5IGxpc3RzIGJlaW5nIHNlbnQgdG8gdGhlIEdQVSBwcm9j
ZXNzCisgICAgICAgIHZpYSByZW1vdGUgaW1hZ2UgYnVmZmVycy4gSW4gYSBmdXR1cmUgcGF0Y2gs
IHdlIGNvdWxkIHJlZmFjdG9yIHRoaXMgc28gdGhhdCBkcmF3aW5nIGl0ZW1zIGNvbnRhaW4gZXh0
ZW50IHJlY3RzCisgICAgICAgIGFzIGlubGluZSBkYXRhIHRoYXQgY2FuIGJlIGNvbnN1bHRlZCBp
biB0aGUgR1BVIHByb2Nlc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6YXBwZW5kKToKKworICAgICAgICBEaXNwbGF5IGxpc3QgaXRlbXMgYXJlIG5vIGxv
bmdlciBjb25zdHJ1Y3RlZCBhaGVhZCBvZiB0aW1lLCBhbmQgdGhlbiBhcHBlbmRlZCB0byB0aGUg
ZGlzcGxheSBsaXN0LiBJbnN0ZWFkLAorICAgICAgICBgYXBwZW5kYCBub3cgdGFrZXMgdGhlIHR5
cGUgb2YgdGhlIGl0ZW0gdG8gYXBwZW5kIGFzIGEgdGVtcGxhdGUgdHlwZW5hbWUgYXJndW1lbnQs
IGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50cyB0aGF0CisgICAgICAgIHdpbGwgYmUgdXNlZCB0byBj
b25zdHJ1Y3QgdGhlIGl0ZW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6
Y2xlYXJDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6Oml0ZXJhdG9yOjptb3ZlVG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZm
ZXIpOgorCisgICAgICAgIEltcGxlbWVudCBhIEMrKyBpdGVyYXRvciBmb3IgRGlzcGxheUxpc3Qu
IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gd3JpdGUgY29kZSBsaWtlIHRoaXM6CisgICAgICAg
IGBgYAorICAgICAgICAvLyBTdXBwb3NlIGRpc3BsYXlMaXN0IGlzIGFuIGluc3RhbmNlIG9mIERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdC4KKyAgICAgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRd
IDogZGlzcGxheUxpc3QpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyB0aGluZ3Mgd2l0aCBpdGVt
LCB3aGljaCBpcyBhIERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLgorICAgICAgICAgICAgICAgIC8v
IE1heWJlIGRvIHRoaW5ncyB3aXRoIGV4dGVudCwgd2hpY2ggaXMgYW4gT3B0aW9uYWw8RmxvYXRS
ZWN0Pi4KKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRv
cjo6fml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRl
bUJ1ZmZlcklmRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6YWRkRHJhd2luZ0l0ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW06OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUF0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVjb2RlKTogRGVsZXRlZC4KKworICAg
ICAgICBSZW1vdmUgdGhlIGFiaWxpdHkgdG8gYGVuY29kZWAgYW5kIGBkZWNvZGVgIGRpc3BsYXkg
bGlzdHMsIGZvciB0aGUgdGltZSBiZWluZy4gRm9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4g
dGhlCisgICAgICAgIHdlYiBhbmQgR1BVIHByb2Nlc3Nlcywgd2Ugbm93IHVzZSBgU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVgLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lcyBtZWFu
IHRoYXQgdGhlIGV4dGFudCBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCBkaXNwbGF5IGxpc3QgaXRl
bSB3aWxsIGJlIGJyb2tlbiBmb3IgdGhlCisgICAgICAgIHRpbWUgYmVpbmcuIEluIGEgZm9sbG93
dXAgcGF0Y2gsIEkgcGxhbiB0byByZWltcGxlbWVudCBgRGlzcGxheUxpc3Q6OmVuY29kZWAgYW5k
IGBkZWNvZGVgIGluIHRoZSBuZXcgaW5saW5lIGl0ZW0KKyAgICAgICAgbW9kZWwgYnkgZW5jb2Rp
bmcgZWFjaCBpdGVtIChlaXRoZXIgYXMgaW5saW5lIGRhdGEgb3IgdmlhIGBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdGApLiBIb3dldmVyLCB0aGlzIGlzCisgICAgICAgIGNvbnRpbmdl
bnQgb24gYWxsIGRpc3BsYXkgbGlzdCBpdGVtIHR5cGVzIChlLmcuIGBEcmF3SW1hZ2VgIGFuZCBg
RHJhd0dseXBoYCkgbm90IHJlbHlpbmcgb24gYElQQzo6QXR0YWNobWVudGAKKyAgICAgICAgZm9y
IGVuY29kaW5nLCBzbyBzdXBwb3J0IGZvciBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCB3aWxsIG5l
ZWQgdG8gd2FpdCB1bnRpbCBhZnRlciBmb250cyBhbmQgaW1hZ2VzIGFyZSB3b3JraW5nLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgdG8gdXNlIHRoZSBuZXcgdGVtcGxhdGVkIGBE
aXNwbGF5TGlzdDo6YXBwZW5kYCBtZXRob2QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojp0YWtlRGlzcGxheUxpc3QpOgorCisg
ICAgICAgIFVzZSBgc3RkOjpleGNoYW5nZWAgaW5zdGVhZCBvZiBgV1RGTW92ZWAuIFRoaXMgaXMg
YWN0dWFsbHkgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyAoaS5lLiBu
bworICAgICAgICBsZWFrcyBvciBkb3VibGUtZnJlZWluZyksIHNpbmNlIHRoZSBgRGlzcGxheUxp
c3RgIGluc3RhbmNlIHRoYXQgaXMgYmVpbmcgbW92ZWQgZnJvbSBuZWVkcyB0byBiZSBlbXB0eSBz
byB0aGF0IGl0CisgICAgICAgIGRvZXMgbm90IHRyeSB0byBjYWxsIGRlc3RydWN0b3JzIG9uIHRo
ZSBpdGVtcyBmb3JtZXJseSBpbnNpZGUgb2YgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ryb3kpOgorCisgICAgICAgIEFk
ZCBoZWxwZXIgbWV0aG9kcyB0byBhcHBseSBhIGRpc3BsYXkgbGlzdCBpdGVtIHRvIGEgYEdyYXBo
aWNzQ29udGV4dGAgYW5kIGNhbGwgdGhlIGRpc3BsYXkgbGlzdCBpdGVtJ3MKKyAgICAgICAgZGVz
dHJ1Y3RvciwgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Om1fYWxsb2NhdGVkQnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgaXMgbm8gYG1fd3JpdGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2lu
ZyBpbi1wcm9jZXNzIGBEaXNwbGF5TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFp
bnRpbmcpLCB0aGUgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBj
cmVhdGluZyBhbmQgbWFuYWdpbmcgZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBu
ZWVkcyB0byByZW1lbWJlciB0byBmcmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdo
ZW4gYXBwZW5kaW5nLCBhbmQgbXVzdCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAg
ICAgIGRpc3BsYXkgbGlzdCBpdGVtcyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1
Y3RvcnMpIHdoZW4gaXQgaXMgZmluaXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjptX3JlYWRPbmx5QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
bV93cml0YWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0
dGVuTnVtYmVyT2ZCeXRlcyk6CisKKyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFi
b3ZlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5n
dGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50
Ojp+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlC
dWZmZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlz
IGZpbGUgbWFrZSB1cCBtb3N0IG9mIHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0
aGUgY2hhbmdlcyBhcmUgbW9zdGx5IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRo
aXMgcGF0Y2g6CisgICAgICAgIC0gQWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1U
eXBlYCBvZiBlYWNoIGRpc3BsYXkgbGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIg
b3Igbm90IGVhY2ggY2xhc3MKKyAgICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIg
b3Igbm90IGVhY2ggY2xhc3MgaXMgYSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBl
bmNvZGVgIGFuZCBgZGVjb2RlYCBtZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAg
ICAgICAgLSBSZW1vdmUgYWxsIG92ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1w
bGVtZW50cyBpbmRpdmlkdWFsIG1ldGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAg
IGBnbG9iYWxCb3VuZHNgIChpZiBhcHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRz
YCAoYWdhaW4sIGlmIGFwcGxpY2FibGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBk
dW1waW5nIGhlbHBlcnMsIHNvIHRoYXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5n
SXRlbWAgYmVmb3JlIGR1bXBpbmcgZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0
aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpE
cmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9y
VGV4dDo6RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRp
YTo6UGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtOjpJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
OjpzaXplSW5CeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTYXZlOjpTYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91
dFRvUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBh
dGg6OkNsaXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6
RHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVy
OjpEcmF3SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdSZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
RWxsaXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9y
OjpGaWxsUmVjdFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5k
ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZp
bGxQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRo
OjpTdHJva2VJbmxpbmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tl
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlG
aWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZl
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXN0b3JlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVzdG9yZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VHJhbnNsYXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSb3RhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSb3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRDVE06Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxH
cmFkaWVudDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9y
Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
RmlsbENvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ry
b2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VU
aGlja25lc3M6OnRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGlu
ZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZURhc2g6OlNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxp
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclNoYWRvdzo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsZWFyU2hhZG93OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXA6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXA6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXQ6OkNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBPdXQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdp
bmdDb21tYW5kczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZElt
YWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNj
YWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2VCdWZmZXI6OkRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ltYWdlQnVmZmVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0
aW5hdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdO
YXRpdmVJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5j
eUxheWVyOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JU
ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRy
YXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0VsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0OjpGaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3Q6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9j
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aENvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6
RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Rmls
bElubGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQ
YXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxJbmxpbmVQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlB1dEltYWdlRGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UGFpbnRGcmFtZUZvck1lZGlhOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0
aDo6U3Ryb2tlSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlSW5saW5lUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpyZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQ
YXR0ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdJdGVtOjpzZXRFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdJdGVtOjpleHRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRlbnRLbm93biBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
SXRlbTo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNhdmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2F2ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0
ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2Fs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2Fs
ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTY2FsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29s
b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9y
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
cm9rZVRoaWNrbmVzczo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZUpvaW46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUpvaW46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQ6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xl
YXJTaGFkb3c6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJTaGFkb3c6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0dseXBoczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdF
bGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRo
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxF
bGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZv
ck1lZGlhOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJ
bmxpbmVQYXRoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0
dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpB
cHBseUZpbGxQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNj
YWxlRmFjdG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUpOiBEZWxldGVkLgor
CisgICAgICAgIERlbGV0ZSB0aGUgZ2VuZXJpYyBgSXRlbTo6ZW5jb2RlYCBhbmQgYEl0ZW06OmRl
Y29kZWAgbWV0aG9kcywgc2luY2Ugb25seSBvdXQtb2YtbGluZSBkaXNwbGF5IGxpc3QgaXRlbXMg
aGF2ZQorICAgICAgICBlbmNvZGUgYW5kIGRlY29kZSBmdW5jdGlvbnMgbm93LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNo
YW5nZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVh
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExp
bmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5l
RGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVK
b2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaWxlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVzdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnRyYW5zbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcik6CisKKyAgICAgICAgQ2hhbmdlIHRoZXNlIG1ldGhvZHMgdGhhdCBhcHBlbmQg
ZGlzcGxheSBsaXN0IGl0ZW1zIGVuIG1hc3NlLCBzdWNoIHRoYXQgdGhleSBnbyBmcm9tIHRoaXM6
CisKKyAgICAgICAgICAgICAgICBgbV9kaXNwbGF5TGlzdC5hcHBlbmQoRm9vOjpjcmVhdGUoYXJn
MSwgYXJnMiwgYXJnMykpO2AKKworICAgICAgICAuLi50byB0aGlzOgorCisgICAgICAgICAgICAg
ICAgYG1fZGlzcGxheUxpc3QuYXBwZW5kPEZvbz4oYXJnMSwgYXJnMiwgYXJnMyk7YAorCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudCBjb25zdCk6IERlbGV0ZWQu
CisKKyAgICAgICAgRXh0ZW50cyBhcmUgbm93IGF1dG9tYXRpY2FsbHkgdXBkYXRlZCAodW5sZXNz
IG90aGVyd2lzZSBzcGVjaWZpZWQpIGZvciBhbnkgZHJhd2luZyBpdGVtcyB0aGF0IGFyZSBhcHBl
bmRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxh
eWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlOjphcHBseSk6CisKIDIwMjAtMTEtMDMgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgYWxpZ24tY29udGVudCBzaG91bGQgYmUgYSBk
aXNjcmV0ZSBhbmltYXRhYmxlIHByb3BlcnR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzODhiOWMzYTJhZGE3MTk4
MDJhOTEyN2Y1YTYwNWE1OWY5OGEwODIuLjE2YmQyM2U1MGZjNGJhZGNkNWIyMjAwZTExYWUxMzI4
Njc3MzgxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMjAtMTEtMDMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbmN1cnJlbnQgZGlz
cGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbnRvIHNoYXJl
ZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkanVzdCBmb3IgY2hhbmdlcyB0byBkaXNwbGF5IGxpc3RzIGFuZCBkaXNwbGF5IGxpc3QgaXRl
bXMgaW4gV2ViQ29yZSAoc2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZQorICAg
ICAgICBpbmZvcm1hdGlvbikuIEluIHBhcnRpY3VsYXIsIHdlIGltcGxlbWVudCB0aGUgcmVhZGlu
ZyBhbmQgd3JpdGluZyBjbGllbnQgaG9va3MgY29uc3VsdGVkIGJ5IEl0ZW1CdWZmZXIsIGFuZCB3
ZQorICAgICAgICBhbHNvIGFkZCBhIHRlbXBvcmFyeSBtZWNoYW5pc20gdGhhdCBhbGxvd3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IChpbiB0aGUgd2ViIHByb2Nlc3MpIHRvIHNlbmQgZGlz
cGxheSBsaXN0CisgICAgICAgIGl0ZW0gZGF0YSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgdG8gdGhl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgKGluIHRoZSBHUFUgcHJvY2VzcykuIFRoaXMgdGVtcG9y
YXJ5IG1lY2hhbmlzbQorICAgICAgICBkb2VzIG5vdCBhdHRlbXB0IHRvIG1ha2UgYW55IHJlYWRp
bmcgb3Igd3JpdGluZyBpbiBzaGFyZWQgbWVtb3J5IGNvbmN1cnJlbnQgYmV0d2VlbiB0aGUgR1BV
IGFuZCB3ZWIgcHJvY2Vzc2VzLAorICAgICAgICBhbmQgZXhpc3RzIG9ubHkgdG8gbWFrZSBzdXJl
IHRoYXQgcmVuZGVyaW5nIHdpdGggdGhlIEdQVSBwcm9jZXNzIHN0aWxsIHdvcmtzIHVzaW5nIHRo
ZXNlIG5ldyBkaXNwbGF5IGxpc3QgaXRlbXMuCisKKyAgICAgICAgSW4gdGhlIG5leHQgcGF0Y2gs
IEkgd2lsbCBhZGQgYSBzaW1wbGUgY29uY3VycmVudCByZWFkZXIvd3JpdGVyIG1vZGVsIGZvciBk
aXNwbGF5IGxpc3QgcHJvY2Vzc2luZyBiZXR3ZWVuIHRoZQorICAgICAgICB3ZWIgYW5kIEdQVSBw
cm9jZXNzZXMsIGFuZCAoaW4gZG9pbmcgc28pIHJldmVydCBtb3N0IG9mIHRoZSBjaGFuZ2VzIGlu
IGBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kYCBhbmQKKyAgICAgICAgYFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eWAgYmVsb3cuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBtb3Jl
IGRldGFpbC4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZm
ZXIuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENyZWF0
ZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNv
dXJjZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBs
eU1lZGlhSXRlbSk6CisKKyAgICAgICAgUmVmYWN0b3IgdGhlc2UgdG8gdGFrZSBgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGVgLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRh
KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aDoKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW46CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAg
ICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNw
bGF5TGlzdCBjb25zdCk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxl
Lmg6IEFkZGVkLgorCisgICAgICAgIEFkZCBhIFdlYktpdDIgaGVscGVyIGNsYXNzIHRoYXQgcmVw
cmVzZW50cyBkaXNwbGF5IGxpc3QgZGF0YSBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgcHJvcGFn
YXRlZCBmcm9tIHRoZSB3ZWIKKyAgICAgICAgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuIElu
IHRoZSBuZXh0IHBhdGNoLCB0aGlzIGNsYXNzIHdpbGwgYmUgcmV3cml0dGVuIHRvIHN1cHBvcnQg
Y29uY3VycmVudCBkaXNwbGF5IGxpc3QKKyAgICAgICAgcmVhZGluZyBhbmQgd3JpdGluZywgd2l0
aCBzcGVjaWFsaXplZCBzdWJjbGFzc2VzIGluIHNlcnZpY2Ugb2YgYm90aCB0aGUgcmVhZGVyIChp
LmUuIHRoZSBHUFUgcHJvY2VzcykgYW5kIHRoZQorICAgICAgICB3cml0ZXIgKGkuZS4gdGhlIHdl
YiBwcm9jZXNzKS4KKworICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGU6OmRlY29kZSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlz
cGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJj
ZUNhY2hlUHJveHkuY3BwOgorCiAyMDIwLTExLTAzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gcmVtb3ZlIHN5c2N0bC5vaWRmbXQuIGFjY2Vz
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZWM3MGI0NjQyMzg1MTM2NmE0YTQxNDY0NTg3YjU0NWY1
YjdlM2JlNS4uY2YyMjU5MDUyMzRkMTNiMTdhMTA0MTRkNTQzMzlkZGE5OTMyNjFjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCkBAIC0xMjQyLDYgKzEyNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCA1NTk2ZmI5ZWI4ZTk5NmVkZjc1ZDIwZjJiZTAzY2VhMjEzZTc5MDQxLi42M2IzZWQ2NmUyMzMx
ZjM3ZTc1NGVkYWJhZjRjOWNhODU3YmZlMDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk2MSw2ICsx
OTYxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9O
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MGYzYzgyZWNhYjBkODgyMWExM2RkMmJhMzQyM2RhNWFjNDE3YmQ5NC4uMjM5ZjQ3YjBhMDJjYmY3
ZDNjOGZjOTE5YzJhNGU1Mzg4ZTc1OWRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE2MSw2ICs1MTYxLDcgQEAKIAkJRjNB
QkZFMEMxMzBFOURBMDAwRTdGN0QxIC8qIEluc3RydW1lbnRpbmdBZ2VudHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYzQUJGRTBCMTMwRTlEQTAwMEU3
RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggKi87IH07CiAJCUYzRDQ2MTQ5MTE2MUQ1MzIw
MENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjNENDYxNDcxMTYxRDUzMjAwQ0EwRDA5IC8qIEpTRXJyb3JIYW5k
bGVyLmggKi87IH07CiAJCUY0MDNFNzg3MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MDNFNzg1
MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDIyQjhCODI1M0Y3MUZDMDA0RTc3RTggLyog
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjQyOTI2MTgyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyOTI2MTcyNTI2
NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MzNFOTAzMURCQkRCQTIwMEVGMEQx
NCAvKiBTdGF0aWNQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2Fy
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
Mzc3RDU3MjU1MUM5QzYwMDgwQUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDM3N0Q1NTI1NTFDOUM2MDA4
MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MTg2LDYgKzUxODcsNyBAQAogCQlGNDhEMkE3RTIx
NTcxODI2MDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTcxMjE1NkRDMEEwMEM2NzUyQiAvKiBGb250
QXR0cmlidXRlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUY0OEQyQUE1MjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkFBMzIxNTk3NDBEMDBD
Njc1MkIgLyogQ29sb3JDb2NvYS5oICovOyB9OwogCQlGNDk3ODY4ODFGRjQ1RkE1MDBFMDYwQUIg
LyogUGFzdGVib2FyZEl0ZW1JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVib2FyZEl0ZW1J
bmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
RjRBNkQ2QTQyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkEzMjU0QzUxMkMw
MEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCNDIyQzQyMjBDMDU2ODAwOUUxRTdEIC8qIERP
TVBhc3RlQWNjZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNEI0MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEJGQjk4NTFFMURE
RjlCMDA4NjJDMjQgLyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzIGluIENvcHkgU2NyaXB0cyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4MzFFMURERjJCMDA3NkI3RUEg
LyogRHVtcEVkaXRpbmdIaXN0b3J5LmpzICovOyB9OwogCQlGNEJGQjk4NjFFMURERjlCMDA4NjJD
MjQgLyogRWRpdGluZ0hpc3RvcnlVdGlsLmpzIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDgzODk4NDFFMURERjJCMDA3NkI3RUEgLyogRWRpdGlu
Z0hpc3RvcnlVdGlsLmpzICovOyB9OwpAQCAtMTYzMTYsNiArMTYzMTgsOCBAQAogCQlGM0Q0NjE0
NzExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQw
M0U3ODYyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFbnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDIy
QjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAvKiBNZWRpYVBs
YXllcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5ZXJJZGVudGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0MjE0MDMxRUUwMDJEQ0E3MiAv
KiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9u
dEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2FyZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTYzNzEsNiArMTYzNzUsOCBAQAogCQlGNDhEMkFBNDIxNTk3NDBE
MDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbG9yQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTc4Njg3MUZGNDVGQTUwMEUw
NjBBQiAvKiBQYXN0ZWJvYXJkSXRlbUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEl0
ZW1JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OUU5OEU0MjFERUU2QzEw
MDlBRTU1RSAvKiBFZGl0QWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVkaXRBY3Rpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBMzI1NEM1MTJDMDBCNjVG
QUEgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEl0
ZW1UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkE2MjU0QzUxRTkw
MEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERp
c3BsYXlMaXN0SXRlbVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEI0
MjJDMjIyMEMwMDAwMDA5RTFFN0QgLyogRE9NUGFzdGVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NUGFzdGVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDNUYyMDUy
NDc5RTdFRTAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENsaXBib2FyZEltYWdlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
QzVGMjA4MjQ3OUU5QzgwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDbGlwYm9hcmRJbWFnZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNzYyNiw2ICsxNzYzMiw4IEBACiAJCQkJNTVDMEEyOTUyM0ZFMkNFMDAw
RjJDQjkzIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwICovLAogCQkJCTcyRUEwOUY5
MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJ
NzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywK
KwkJCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNw
cCAqLywKKwkJCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRl
bXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0
ZW1zLmggKi8sCiAJCQkJRjQzNzdENTYyNTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRl
bVR5cGUuY3BwICovLApAQCAtMzE0NTQsNiArMzE0NjIsNyBAQAogCQkJCTFDQUY1NkRCMjUzMDFB
QzgwMDE3QjQ3MiAvKiBEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTVBRDA5NDAyNDA4OTY0MDAwREU0RDJGIC8qIERpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQwOTNFMjQwODk2MzUwMERFNEQyRiAvKiBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDIyQjhCODI1M0Y3
MUZDMDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjQzNzdENTcyNTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRlbVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggOTYzNTNhZGVkZmYxMWVk
NWQ0MTVhZDU3ZmRmZGI0YjI4MGQ1MDRkZC4uMGIzNWFjNjRmYThiOWZmZTBjOTQ0ODVlOTczZjI0
YzJhYTBmMzQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7
CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRl
JiYpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3Jh
cGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIGVudW0gQ2hh
bmdlIDogdWludDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAg
ICAgICAgICAgPSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBmZmQ5ZDZk
ZGZiNjBhYzFhMDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi5kYjEzYWZmMTc4ZDIxY2FkZjY0Mjg1
ZDgwMWU5Y2RiNWRmNTM2YmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI2LDgg
KzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIK
IAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0SXRlbXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVt
cCgpIGNvbnN0CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KERpc3BsYXlM
aXN0JiYgb3RoZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywg
bnVsbHB0cikpCisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVtcyhtYWtlVW5p
cXVlPEl0ZW1CdWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlMaXN0KCkgPSBk
ZWZhdWx0OworCitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShEaXNwbGF5TGlz
dCYmIG90aGVyKQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMs
IG51bGxwdHIpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX2RyYXdpbmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZv
aWQgRGlzcGxheUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsKKyAgICBpZiAo
bV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0
ZW50cy5jbGVhcigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3Mo
QXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3BsYXlMaXN0Ojpz
aG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKIHsK
ICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6
CiAgICAgICAgIGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJh
dGlvbnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBkb3duY2FzdDxT
ZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVt
LmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRy
b3AgdGhlIGl0ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1z
cGVjaWZpYy4KICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2NoYW5nZUZsYWdz
ID09IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFu
Z2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODMsMTAgKzEwOCwxNCBAQCBi
b29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNv
bnN0IEl0ZW0mIGl0ZW0pCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1RleHRGbGFncyBm
bGFncykgY29uc3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFtOjpMaW5lTW9k
ZTo6TXVsdGlwbGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHlsZVJlY3QpOwot
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0
ZW50XSA6ICp0aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdzKGZsYWdzLCBp
dGVtKSkKICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJlYW06Okdyb3Vw
U2NvcGUgZ3JvdXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07CisgICAgICAgIGlm
IChpdGVtLmlzRHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIGV4dGVudCAi
IDw8IGV4dGVudDsKICAgICB9CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7CiB9CkBAIC05
NiwxMCArMTI1LDExIEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0CiAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgImRp
c3BsYXkgbGlzdCI7CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBtX2xpc3Quc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIHNjb3BlKHRzKTsKLSAgICAgICAgdHMgPDwgaSA8PCAiICIgPDwgbV9s
aXN0W2ldLmdldCgpOworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7Cisg
ICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgICAgICB0cyA8PCBp
dGVtOworICAgICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICB0cyA8
PCAiIGV4dGVudCAiIDw8IGV4dGVudDsKICAgICB9CiAgICAgdHMuc3RhcnRHcm91cCgpOwogICAg
IHRzIDw8ICJzaXplIGluIGJ5dGVzOiAiIDw8IHNpemVJbkJ5dGVzKCk7CkBAIC0xMDgsMTMgKzEz
OCwyNzggQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKIAog
c2l6ZV90IERpc3BsYXlMaXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHJl
c3VsdCA9IDA7Ci0gICAgZm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCAr
PSBJdGVtOjpzaXplSW5CeXRlcyhyZWYpOworICAgIHJldHVybiBtX2l0ZW1zID8gbV9pdGVtcy0+
c2l6ZUluQnl0ZXMoKSA6IDA7Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6OmlzRW1wdHkoKSBjb25z
dAoreworICAgIHJldHVybiAhbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCk7Cit9CisKK0l0
ZW1CdWZmZXImIERpc3BsYXlMaXN0OjppdGVtQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXRlbXMp
CisgICAgICAgIG1faXRlbXMgPSBtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KCk7CisgICAgcmV0dXJu
ICptX2l0ZW1zOworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KEl0
ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNldENs
aWVudChjbGllbnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50
KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNl
dENsaWVudChjbGllbnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZl
cihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJiBtYXBGdW5jdGlvbikg
Y29uc3QKK3sKKyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Zm9yRWFjaEl0ZW1C
dWZmZXIoV1RGTW92ZShtYXBGdW5jdGlvbikpOworfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKK3Zv
aWQgRGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhib29sIHZhbHVlKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2l0ZW1zIHx8IG1faXRlbXMtPmlzRW1wdHkoKSk7Cisg
ICAgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBEaXNwbGF5
TGlzdDo6YXBwZW5kKEl0ZW1IYW5kbGUgaXRlbSkKK3sKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgp
KSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZl
PihpdGVtLmdldDxTYXZlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0
ZW0uZ2V0PFRyYW5zbGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2Nh
bGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICByZXR1
cm4gYXBwZW5kPENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4o
aXRlbS5nZXQ8U2V0Q1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVt
LmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+
KGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tl
Q29sb3I+KGl0ZW0uZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tl
VGhpY2tuZXNzPihpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0YXRlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdl
dDxTZXRTdGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5l
RGFzaD4oaXRlbS5nZXQ8U2V0TGluZURhc2g+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVKb2luOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRM
aW5lSm9pbj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxD
bGVhclNoYWRvdz4oaXRlbS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0
PihpdGVtLmdldDxDbGlwT3V0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRo
OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PENsaXBPdXRU
b1BhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICByZXR1cm4g
YXBwZW5kPENsaXBQYXRoPihpdGVtLmdldDxDbGlwUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBTdXBw
b3J0IHRoZSBhYmlsaXR5IHRvIGNsb25lIGRpc3BsYXkgbGlzdHMgKHRoaXMgaXMgY3VycmVudGx5
IG9ubHkgdXNlZCBmb3IgZGlzcGxheSBsaXN0IHRyYWNraW5nKS4KKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdHbHlwaHM+KGl0ZW0uZ2V0
PERyYXdHbHlwaHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxEcmF3SW1hZ2U+KGl0ZW0uZ2V0PERyYXdJbWFnZT4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1Rp
bGVkSW1hZ2U+KGl0ZW0uZ2V0PERyYXdUaWxlZEltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4oaXRlbS5nZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFn
ZT4oaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
UGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJh
d1BhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICByZXR1
cm4gYXBwZW5kPERyYXdSZWN0PihpdGVtLmdldDxEcmF3UmVjdD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0xpbmU+KGl0ZW0uZ2V0
PERyYXdMaW5lPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAg
ICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0uZ2V0PERyYXdMaW5lc0Zv
clRleHQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbS5n
ZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0VsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0VsbGlwc2U+KGl0ZW0uZ2V0PERy
YXdFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxEcmF3UGF0aD4oaXRlbS5nZXQ8RHJhd1BhdGg+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdGb2N1
c1JpbmdQYXRoPihpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdGb2N1
c1JpbmdSZWN0cz4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdD4oaXRlbS5n
ZXQ8RmlsbFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxGaWxsUmVj
dFdpdGhDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PEZp
bGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtLmdl
dDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PEZp
bGxSb3VuZGVkUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0
ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxGaWxsSW5saW5lUGF0aD4oaXRlbS5nZXQ8RmlsbElubGluZVBhdGg+KCkpOwor
I2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RmlsbFBhdGg+KGl0ZW0uZ2V0PEZpbGxQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsRWxsaXBzZT4oaXRlbS5nZXQ8
RmlsbEVsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbS5nZXQ8UGFpbnRGcmFtZUZvck1lZGlhPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5k
PFN0cm9rZVJlY3Q+KGl0ZW0uZ2V0PFN0cm9rZVJlY3Q+KCkpOworI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbS5nZXQ8U3Ryb2tlSW5saW5lUGF0
aD4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPFN0cm9rZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZVBhdGg+KCkpOworICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tl
RWxsaXBzZT4oaXRlbS5nZXQ8U3Ryb2tlRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyUmVjdD4oaXRlbS5nZXQ8Q2xl
YXJSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPihp
dGVtLmdldDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7CisjaWYgVVNFKENHKQorICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBs
eVN0cm9rZVBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBs
eUZpbGxQYXR0ZXJuPihpdGVtLmdldDxBcHBseUZpbGxQYXR0ZXJuPigpKTsKKyNlbmRpZgorICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbS5nZXQ8QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcj4oKSk7CisgICAgfQorfQorCitib29sIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6YXRFbmQo
KSBjb25zdAoreworICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBhdXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7Cisg
ICAgYXV0byBlbmRDdXJzb3IgPSBpdGVtcy5tX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBpdGVtcy5t
X3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgIHJldHVybiBtX2N1cnNvciA9PSBlbmRDdXJzb3I7
Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp1cGRhdGVDdXJyZW50SXRlbSgpCit7
CisgICAgY2xlYXJDdXJyZW50SXRlbSgpOworCisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBh
dXRvIGl0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KG1fY3Vyc29yWzBdKTsKKyAgICBp
ZiAoaXNEcmF3aW5nSXRlbShpdGVtVHlwZSkgJiYgIW1fZGlzcGxheUxpc3QubV9kcmF3aW5nSXRl
bUV4dGVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudEV4dGVudCA9IG1fZGlzcGxh
eUxpc3QubV9kcmF3aW5nSXRlbUV4dGVudHNbbV9kcmF3aW5nSXRlbUluZGV4XTsKKyAgICAgICAg
bV9kcmF3aW5nSXRlbUluZGV4Kys7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudEV4dGVu
dCA9IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8qIGNsaWVudCA9IGl0ZW1zLm1fcmVhZGluZ0Ns
aWVudDsKKyAgICBpZiAoIWlzSW5saW5lSXRlbShpdGVtVHlwZSkgJiYgY2xpZW50KSB7CisgICAg
ICAgIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplT2ZJdGVtSW5CeXRlcyhpdGVtVHlwZSkg
KyBzaXplb2YoSXRlbVR5cGUpOworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRl
bSA9IHNpemVPZlR5cGVBbmRJdGVtIDw9IHNpemVPZkZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1z
ID8gbV9maXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA6IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGZhc3RNYWxsb2Moc2l6ZU9mVHlwZUFuZEl0ZW0pKTsKKyAgICAgICAgbV9jdXJyZW50QnVm
ZmVyRm9yRGVjb2RlZEl0ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihpdGVtVHlwZSk7CisK
KyAgICAgICAgYXV0byBzaXplT2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihtX2N1
cnNvciArIHNpemVvZihJdGVtVHlwZSkpWzBdOworICAgICAgICBhdXRvKiBzdGFydE9mUGFkZGlu
ZyA9IG1fY3Vyc29yICsgc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpOworICAgICAg
ICBzaXplX3QgcGFkZGluZyA9IChhbGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihzdGFydE9mUGFkZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9m
KHVpbnQ2NF90KTsKKyAgICAgICAgYXV0byBkZWNvZGVkSXRlbUhhbmRsZSA9IGNsaWVudC0+ZGVj
b2RlSXRlbShzdGFydE9mUGFkZGluZyArIHBhZGRpbmcsIHNpemVPZkRhdGEsIGl0ZW1UeXBlLCBt
X2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSk7CisgICAgICAgIGlmICghZGVjb2RlZEl0ZW1I
YW5kbGUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGNyYXNoaW5nLCB0aGlz
IG5lZWRzIHRvIGZhaWwgZ3JhY2VmdWxseSBhbmQgaW5mb3JtIHRoZSBjYWxsZXIuCisgICAgICAg
ICAgICAvLyBGb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgYXNzZXJ0aW9uIG1ha2VzIGJ1Z3MgaW4g
aXRlbSBidWZmZXIgZW5jb2RpbmcgbG9naWMgZWFzaWVyCisgICAgICAgICAgICAvLyB0byBjYXRj
aCBieSBhdm9pZGluZyBteXN0ZXJpb3VzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluY29ycmVj
dGx5IGFsaWduZWQgaXRlbXMKKyAgICAgICAgICAgIC8vIGRvd24gdGhlIGxpbmUuCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIG1f
Y3VycmVudEl0ZW0gPSAqZGVjb2RlZEl0ZW1IYW5kbGU7CisgICAgICAgIG1fY3VycmVudEl0ZW1T
aXplSW5CdWZmZXIgPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBwYWRkaW5n
ICsgc2l6ZU9mRGF0YTsKKyAgICAgICAgbV9jdXJyZW50SXRlbUV4aXN0c0luVGVtcG9yYXJ5QnVm
ZmVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRJdGVtID0gSXRlbUhh
bmRsZSB7IG1fY3Vyc29yIH07CisgICAgICAgIG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgPSBt
X2N1cnJlbnRJdGVtLnNpemUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJh
dG9yOjphZHZhbmNlKCkKK3sKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jdXJzb3IgKz0gbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlcjsKKworICAgIGlmIChtX2N1
cnNvciA9PSBtX2N1cnJlbnRFbmRPZkJ1ZmZlciAmJiBtX3JlYWRPbmx5QnVmZmVySW5kZXggPCBt
X2Rpc3BsYXlMaXN0Lm1faXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKSkgeworICAgICAg
ICBtX3JlYWRPbmx5QnVmZmVySW5kZXgrKzsKKyAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1
cnJlbnRCdWZmZXIoKTsKKyAgICB9CisKKyAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworfQorCit2
b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6Y2xlYXJDdXJyZW50SXRlbSgpCit7CisgICAgaWYg
KG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKSB7CisgICAgICAgIG1fY3VycmVudEl0ZW0u
ZGVzdHJveSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QnVmZmVyRm9yRGVjb2Rl
ZEl0ZW0gIT0gbV9maXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcykpCisgICAgICAgICAgICBmYXN0
RnJlZShtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSk7CisgICAgfQorCisgICAgbV9jdXJy
ZW50SXRlbSA9IHsgfTsKKyAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKyAgICBt
X2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50SXRl
bUV4aXN0c0luVGVtcG9yYXJ5QnVmZmVyID0gZmFsc2U7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6
Oml0ZXJhdG9yOjptb3ZlVG9FbmQoKQoreworICAgIGlmIChhdXRvJiBpdGVtcyA9IG1fZGlzcGxh
eUxpc3QubV9pdGVtcykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVm
ZmVyLmRhdGEgKyBpdGVtcy0+bV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICAgICAgbV9jdXJy
ZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvcjsKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlckluZGV4
ID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpCit7
CisgICAgYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgaWYgKCFpdGVt
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBudW1iZXJPZlJlYWRPbmx5QnVmZmVycyA9
IGl0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgaWYgKG1fcmVhZE9ubHlCdWZm
ZXJJbmRleCA8IG51bWJlck9mUmVhZE9ubHlCdWZmZXJzKSB7CisgICAgICAgIGF1dG8mIG5leHRC
dWZmZXJIYW5kbGUgPSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnNbbV9yZWFkT25seUJ1ZmZlcklu
ZGV4XTsKKyAgICAgICAgbV9jdXJzb3IgPSBuZXh0QnVmZmVySGFuZGxlLmRhdGE7CisgICAgICAg
IG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBuZXh0QnVmZmVySGFuZGxlLmNhcGFj
aXR5OworICAgIH0gZWxzZSBpZiAobV9yZWFkT25seUJ1ZmZlckluZGV4ID09IG51bWJlck9mUmVh
ZE9ubHlCdWZmZXJzKSB7CisgICAgICAgIG1fY3Vyc29yID0gaXRlbXMtPm1fd3JpdGFibGVCdWZm
ZXIuZGF0YTsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvciArIGl0ZW1z
LT5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdAogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaAppbmRleCBmOWM5Mzk4ZjBiNzIyMjRmNjkwMmEzOGY3OTU3NTYzMmQxYjFhMzIwLi5hNGQ3
OTc5MDEyMjU1ZDA4MGQ5ZjgwMjhkNTQ1NTU1ODQ2NmZkOWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaApAQCAtMjUsMTEgKzI1LDE0IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NDAsMzQgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogCi1jbGFzcyBJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgot
ICAgIEl0ZW0oKSA9IGRlbGV0ZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmly
dHVhbCBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYg
IWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNv
bnN0IEl0ZW0mKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEl0ZW0+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBl
IG1fdHlwZTsKLX07Ci0KIGVudW0gQXNUZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDAsCiAgICAgSW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9
IDEgPDwgMCwKQEAgLTgwLDg2ICs1NSwxMTAgQEAgY2xhc3MgRGlzcGxheUxpc3QgewogICAgIGZy
aWVuZCBjbGFzcyBSZWNvcmRlcjsKICAgICBmcmllbmQgY2xhc3MgUmVwbGF5ZXI7CiBwdWJsaWM6
Ci0gICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7Ci0gICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgRGlzcGxheUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CiAKLSAgICBEaXNwbGF5TGlz
dCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB+RGlzcGxheUxpc3QoKTsKIAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0
JiYpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Q7IH0KLSAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgbV9saXN0LnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX2xpc3Rb
aW5kZXhdLmdldCgpOwotICAgIH0KKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJ
bkJ5dGVzKCkgY29uc3Q7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xp
c3QuaXNFbXB0eSgpOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0gICAgCiAg
ICAgU3RyaW5nIGFzVGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAogICAg
IFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYpOwotCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0
ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBj
bGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9pZCBhcHBl
bmQoSXRlbUhhbmRsZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CisKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIGNsYXNzIEltbWVkaWF0ZWx5
TW92ZVRvRW5kIHsgTm8sIFllcyB9OworICAgICAgICBpdGVyYXRvcihjb25zdCBEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QsIEltbWVkaWF0ZWx5TW92ZVRvRW5kIGltbWVkaWF0ZWx5TW92ZVRvRW5k
ID0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6Ok5vKQorICAgICAgICAgICAgOiBtX2Rpc3BsYXlMaXN0
KGRpc3BsYXlMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHlNb3Zl
VG9FbmQgPT0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcykKKyAgICAgICAgICAgICAgICBtb3Zl
VG9FbmQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmVDdXJzb3JU
b1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudEl0
ZW0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5pdGVyYXRvcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICZt
X2Rpc3BsYXlMaXN0ID09ICZvdGhlci5tX2Rpc3BsYXlMaXN0ICYmIG1fY3Vyc29yID09IG90aGVy
Lm1fY3Vyc29yOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIHZvaWQgb3BlcmF0b3Ir
KygpIHsgYWR2YW5jZSgpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxJdGVtSGFuZGxlLCBPcHRpb25h
bDxGbG9hdFJlY3Q+PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiB7IG1fY3VycmVudEl0ZW0s
IG1fY3VycmVudEV4dGVudCB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA9IDI1NjsKKwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVm
ZmVyKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvRW5kKCk7CisgICAgICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWR2YW5jZSgpOworICAgICAgICBib29sIGF0RW5kKCkgY29uc3Q7CisKKyAgICAgICAg
Y29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgICAgIHVpbnQ4X3QqIG1fY3Vy
c29yIHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgbV9yZWFkT25seUJ1ZmZlckluZGV4IHsg
MCB9OworICAgICAgICBzaXplX3QgbV9kcmF3aW5nSXRlbUluZGV4IHsgMCB9OworICAgICAgICB1
aW50OF90KiBtX2N1cnJlbnRFbmRPZkJ1ZmZlciB7IG51bGxwdHIgfTsKKworICAgICAgICB1aW50
OF90IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXNbc2l6ZU9mRml4ZWRCdWZmZXJGb3JEZWNv
ZGVkSXRlbXNdIHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRCdWZmZXJGb3JEZWNv
ZGVkSXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgSXRlbUhhbmRsZSBtX2N1cnJlbnRJdGVtOwor
ICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fY3VycmVudEV4dGVudDsKKyAgICAgICAgc2l6
ZV90IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgeyAwIH07CisgICAgICAgIGJvb2wgbV9jdXJy
ZW50SXRlbUV4aXN0c0luVGVtcG9yYXJ5QnVmZmVyIHsgZmFsc2UgfTsKKyAgICB9OworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiB7ICp0aGlzIH07IH0KKyAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiB7ICp0aGlzLCBpdGVyYXRvcjo6SW1tZWRpYXRlbHlNb3Zl
VG9FbmQ6OlllcyB9OyB9CiAKIHByaXZhdGU6Ci0gICAgSXRlbSYgYXBwZW5kKFJlZjxJdGVtPiYm
IGl0ZW0pCi0gICAgewotICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwotICAg
ICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5nZXQoKTsKLSAgICB9CisgICAgSXRlbUJ1ZmZlciog
aXRlbUJ1ZmZlcklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtcy5nZXQoKTsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXImIGl0ZW1CdWZmZXIoKTsKIAotICAgIC8vIExlc3Mg
ZWZmaWNpZW50IGFwcGVuZCwgb25seSB1c2VkIGZvciB0cmFja2luZyByZXBsYXkuCi0gICAgdm9p
ZCBhcHBlbmRJdGVtKEl0ZW0mIGl0ZW0pCisgICAgdm9pZCBhZGREcmF3aW5nSXRlbUV4dGVudChP
cHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50KQogICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVu
ZChpdGVtKTsKKyAgICAgICAgQVNTRVJUKG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKTsKKyAg
ICAgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuYXBwZW5kKFdURk1vdmUoZXh0ZW50KSk7CiAgICAg
fQogCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzLCBjb25z
dCBJdGVtJik7CisgICAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdz
LCBJdGVtSGFuZGxlKTsKIAotICAgIFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgeyByZXR1cm4g
bV9saXN0OyB9Ci0KLSAgICBWZWN0b3I8UmVmPEl0ZW0+PiBtX2xpc3Q7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEl0ZW1CdWZmZXI+IG1faXRlbXM7CisgICAgVmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVj
dD4+IG1fZHJhd2luZ0l0ZW1FeHRlbnRzOworICAgIGJvb2wgbV90cmFja3NEcmF3aW5nSXRlbUV4
dGVudHMgeyB0cnVlIH07CiB9OwogCi0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERp
c3BsYXlMaXN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2xpc3Quc2l6ZSgpKTsKLQotICAgIGZvciAoYXV0
byYgaXRlbSA6IG1fbGlzdCkKLSAgICAgICAgZW5jb2RlciA8PCBpdGVtLmdldCgpOwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4u
IEFyZ3M+Cit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAg
T3B0aW9uYWw8dWludDY0X3Q+IGl0ZW1Db3VudDsKLSAgICBkZWNvZGVyID4+IGl0ZW1Db3VudDsK
LSAgICBpZiAoIWl0ZW1Db3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0OwotCi0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8
ICppdGVtQ291bnQ7IGkrKykgewotICAgICAgICBhdXRvIGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVj
b2Rlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBPbmNlIHdlIGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBm
YWlsaW5nIHRvIGRlY29kZSBhbiBpdGVtIHNob3VsZCB0dXJuIGludG8gYSBkZWNvZGUgZmFpbHVy
ZS4KLSAgICAgICAgLy8gRm9yIG5vdywgd2UganVzdCBoYXZlIHRvIGlnbm9yZSBpdC4KLSAgICAg
ICAgaWYgKCFpdGVtKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0
LmFwcGVuZChXVEZNb3ZlKCppdGVtKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlMaXN0
OworICAgIGl0ZW1CdWZmZXIoKS5hcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKIH0KIAogfSAvLyBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGY3Y2E2
YmJmZmQ5OGZhMGRmNjhhODEzNDhjYWVkNTg2M2FhN2Q1MDMuLjA4MWNlYzc5ZTNjOWFlMmEyODA0
YzAxNTFlZWFmM2M1YjI5Yjk2NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTMzMyw3ICsz
MzMsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRl
cmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENH
R1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRlKSk7CiAgICAgdXBkYXRlU2hhZG93KENHR1N0YXRl
R2V0U3R5bGUoZ3N0YXRlKSk7CiAKLSAgICBtX293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoRHJhd0dseXBoczo6Y3JlYXRlKCptX29yaWdpbmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2
YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5k
YXRhKCksIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBt
X3Ntb290aGluZ01vZGUpKTsKKyAgICBtX293bmVyLmFwcGVuZDxEcmF3R2x5cGhzPigqbV9vcmln
aW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMs
IGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRy
aXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKTsKIAogICAgIG1fb3du
ZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1cCk7CiB9CkBAIC0zNTIsNyArMzUyLDcgQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBtX293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkp
OwogCiAgICAgYXV0byBpbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAg
bV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdl
LCByZWN0LCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5U
b3BMZWZ0IH0pKTsKKyAgICBtX293bmVyLmFwcGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBGbG9hdFJl
Y3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBpbWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09w
dGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pOwogCiAgICAgLy8gVW5k
byB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQuCiAgICAgbV9vd25lci5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhh
cmZCdXp6LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCAyM2FjMzI0
YjdiMDBhOWUxNmE1NmFkNjcwY2UwNGNmYTc3ZmM5ZmE4Li4xNGMwZWM3MmM0MGUwZTg4YjE2M2Ji
Y2E5YTg1ODRlYWFlZjZhNjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCkBAIC00Myw3ICs0Myw3
IEBAIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25l
cikKIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KERyYXdHbHlwaHM6OmNyZWF0ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGds
eXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGlu
Z01vZGUpKTsKKyAgICBtX293bmVyLmFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaEJ1ZmZl
ci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0
YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlz
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlcldpbi5jcHAKaW5kZXggMjNhYzMyNGI3YjAwYTllMTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZh
OC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNiYmNhOWE4NTg0ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3Bw
CkBAIC00Myw3ICs0Myw3IEBAIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVy
KFJlY29yZGVyJiBvd25lcikKIAogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7Ci0gICAgbV9vd25lci5hcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0ZShmb250LCBnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0
UG9pbnQsIHNtb290aGluZ01vZGUpKTsKKyAgICBtX293bmVyLmFwcGVuZDxEcmF3R2x5cGhzPihm
b250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
LCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKaW5kZXggMjJlZDI1NmU4MGFkMjkzYTA1MjA2OWI3NDMwODhhMTM1MWY0N2NjMC4u
OTZlNGIxZWZmOTgxZTQyMjc5ZDc0NmRjNmJiMzljOGFhNTI4ZTE0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1
YmxpYzoKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9CiAgICAgV0VCQ09S
RV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVyKCk7Ci0gICAgRGlzcGxheUxpc3QgdGFrZURpc3Bs
YXlMaXN0KCkgeyByZXR1cm4gV1RGTW92ZShtX2Rpc3BsYXlMaXN0KTsgfQorICAgIERpc3BsYXlM
aXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlz
dCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlz
cGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7
IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheWVk
RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheWVkRGlzcGxheUxpc3QuZ2V0KCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzg5OTA2MmMyNjQzYTdmZTY0OGNhYTU2YmE3MzhmOGJkYjRiOTE3NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1CdWZmZXIuY3BwCkBAIC0wLDAgKzEsNjM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgorCisj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKKyNpZiAh
ZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKK0NTdHJpbmcgSXRlbUhhbmRsZTo6ZGVz
Y3JpcHRpb24oKSBjb25zdAoreworICAgIFRleHRTdHJlYW0gdHM7CisgICAgdHMgPDwgKnRoaXM7
CisgICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Cit9CisjZW5kaWYKKwordm9pZCBJdGVt
SGFuZGxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgc3dpdGNoICh0
eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB7CisgICAgICAgIGdldDxTYXZlPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlJlc3RvcmU6IHsKKyAgICAgICAgZ2V0PFJlc3RvcmU+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB7Cisg
ICAgICAgIGdldDxUcmFuc2xhdGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOiB7CisgICAgICAgIGdldDxSb3RhdGU+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6IHsKKyAgICAgICAgZ2V0PFNjYWxlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB7
CisgICAgICAgIGdldDxDb25jYXRlbmF0ZUNUTT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAgICAgICAgZ2V0
PFNldENUTT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PFNldElu
bGluZUZpbGxHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAgZ2V0
PFNldElubGluZUZpbGxDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAgICAg
ICBnZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB7Cisg
ICAgICAgIGdldDxTZXRTdHJva2VUaGlja25lc3M+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAg
Z2V0PFNldFN0YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHsKKyAgICAgICAgZ2V0PFNldExpbmVDYXA+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZURhc2g6IHsKKyAgICAgICAgZ2V0PFNldExpbmVEYXNoPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVKb2luOiB7CisgICAgICAgIGdldDxTZXRMaW5lSm9pbj4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB7
CisgICAgICAgIGdldDxTZXRNaXRlckxpbWl0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAg
IGdldDxDbGVhclNoYWRvdz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOiB7CisgICAgICAgIGdldDxDbGlwPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXQ6IHsKKyAgICAgICAgZ2V0PENsaXBPdXQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogeworICAg
ICAgICBnZXQ8Q2xpcE91dFRvUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogeworICAgICAgICBnZXQ8Q2xp
cFBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIGdldDxDbGlwVG9E
cmF3aW5nQ29tbWFuZHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczogeworICAgICAgICBnZXQ8RHJhd0dseXBo
cz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZT4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGls
ZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJ
bWFnZUJ1ZmZlcjogeworICAgICAgICBnZXQ8RHJhd0ltYWdlQnVmZmVyPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRp
dmVJbWFnZTogeworICAgICAgICBnZXQ8RHJhd05hdGl2ZUltYWdlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogeworICAgICAgICBn
ZXQ8RHJhd1JlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjogeworICAgICAgICBnZXQ8RHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTogeworICAgICAgICBnZXQ8RHJhd0VsbGlwc2U+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdQYXRoOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dDogeworICAgICAgICBnZXQ8RmlsbFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAg
ICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB7
CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJl
Y3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAgICAgZ2V0
PEZpbGxJbmxpbmVQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsKKyAgICAgICAgZ2V0PEZp
bGxQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIGdldDxGaWxsRWxsaXBzZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6IHsKKyAgICAgICAgZ2V0PFB1dEltYWdlRGF0YT4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6IHsKKyAgICAgICAgZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VSZWN0OiB7CisgICAgICAgIGdldDxTdHJva2VSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZUlubGlu
ZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VQYXRo
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZUVsbGlwc2U6IHsKKyAgICAgICAgZ2V0PFN0cm9rZUVsbGlwc2U+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
Q2xlYXJSZWN0OiB7CisgICAgICAgIGdldDxDbGVhclJlY3Q+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjogeworICAgICAgICBnZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRU
cmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBnZXQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgVVNFKENHKQorICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogeworICAgICAgICBnZXQ8QXBwbHlT
dHJva2VQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5
RmlsbFBhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
ZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB7CisgICAg
ICAgIGdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIH0KK30KKwordm9pZCBJdGVtSGFuZGxlOjpkZXN0cm95KCkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6IHsKKyAgICAgICAgZ2V0PENsaXBPdXRUb1BhdGg+KCkufkNsaXBPdXRUb1BhdGgoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogeworICAg
ICAgICBnZXQ8Q2xpcFBhdGg+KCkufkNsaXBQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIGdl
dDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCkufkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRo
OiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKS5+RHJhd0ZvY3VzUmluZ1BhdGgo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6IHsKKyAgICAgICAgZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKS5+RHJhd0ZvY3Vz
UmluZ1JlY3RzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0dseXBoczogeworICAgICAgICBnZXQ8RHJhd0dseXBocz4oKS5+RHJhd0dseXBocygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogewor
ICAgICAgICBnZXQ8RHJhd0ltYWdlPigpLn5EcmF3SW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAgICAgICAgZ2V0
PERyYXdJbWFnZUJ1ZmZlcj4oKS5+RHJhd0ltYWdlQnVmZmVyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAgICBn
ZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKS5+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogeworICAgICAg
ICBnZXQ8RHJhd05hdGl2ZUltYWdlPigpLn5EcmF3TmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBnZXQ8
RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigpLn5E
cmF3UGF0dGVybigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5+RHJhd1Rp
bGVkSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KCkufkRyYXdUaWxlZFNjYWxlZEltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0
aD4oKS5+RmlsbFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoQ29sb3I+
KCkufkZpbGxSZWN0V2l0aENvbG9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PigpLn5GaWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB7Cisg
ICAgICAgIGdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKS5+RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
Um91bmRlZFJlY3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJvdW5k
ZWRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOiB7CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuflB1dEltYWdlRGF0YSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogeworICAgICAgICBn
ZXQ8U2V0U3RhdGU+KCkuflNldFN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5+
U3Ryb2tlUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlGaWxsUGF0dGVybjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxBcHBseUZpbGxQYXR0ZXJuPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBseVN0
cm9rZVBhdHRlcm4+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2YWx1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxD
bGlwT3V0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkNvbmNhdGVuYXRlQ1RNOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RWxsaXBzZT46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZTogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3
TGluZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxEcmF3UmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxFbmRUcmFuc3BhcmVuY3lMYXll
cj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxGaWxsRWxsaXBzZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5s
aW5lUGF0aDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxGaWxsSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxSZWN0Pjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JN
ZWRpYTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxQYWludEZyYW1lRm9yTWVkaWE+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTYXZlPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxl
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNjYWxlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlNldENUTTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xvcj46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbEdyYWRpZW50Pjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNl
dElubGluZVN0cm9rZUNvbG9yPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUNhcD46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRMaW5lSm9p
bj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0cm9rZVRoaWNr
bmVzcz46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUVsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTdHJva2VJbmxpbmVQYXRoPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJva2VS
ZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgfQorfQorCitib29sIEl0ZW1IYW5kbGU6OmlzRHJhd2luZ0l0ZW0oKSBjb25zdAoreworICAg
IHJldHVybiBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6aXNEcmF3aW5nSXRlbSh0eXBlKCkpOworfQor
CitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAg
ICA6IG1fcmVhZE9ubHlCdWZmZXJzKFdURk1vdmUoaGFuZGxlcykpCit7Cit9CisKK0l0ZW1CdWZm
ZXI6Okl0ZW1CdWZmZXIoKSA9IGRlZmF1bHQ7CisKK0l0ZW1CdWZmZXI6On5JdGVtQnVmZmVyKCkK
K3sKKyAgICBjbGVhcigpOworfQorCitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKEl0ZW1CdWZmZXIm
JiBvdGhlcikKKyAgICA6IG1fcmVhZGluZ0NsaWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVh
ZGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX3dyaXRpbmdDbGllbnQoc3RkOjpleGNoYW5n
ZShvdGhlci5tX3dyaXRpbmdDbGllbnQsIG51bGxwdHIpKQorICAgICwgbV9pdGVtc1RvRGVzdHJv
eUluQWxsb2NhdGVkQnVmZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXNUb0Rlc3Ryb3lJ
bkFsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgLCBtX2FsbG9jYXRlZEJ1ZmZlcnMoc3RkOjpl
eGNoYW5nZShvdGhlci5tX2FsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgLCBtX3JlYWRPbmx5
QnVmZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pKQorICAg
ICwgbV93cml0YWJsZUJ1ZmZlcihzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIs
IHsgfSkpCisgICAgLCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCkpCit7Cit9CisKK0l0ZW1CdWZmZXImIEl0ZW1CdWZm
ZXI6Om9wZXJhdG9yPShJdGVtQnVmZmVyJiYgb3RoZXIpCit7CisgICAgbV9yZWFkaW5nQ2xpZW50
ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRpbmdDbGllbnQsIG51bGxwdHIpOworICAgIG1f
d3JpdGluZ0NsaWVudCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0aW5nQ2xpZW50LCBudWxs
cHRyKTsKKyAgICBtX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pOworICAg
IG1fYWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9hbGxvY2F0ZWRCdWZm
ZXJzLCB7IH0pOworICAgIG1fcmVhZE9ubHlCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5t
X3JlYWRPbmx5QnVmZmVycywgeyB9KTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX3dyaXRhYmxlQnVmZmVyLCB7IH0pOworICAgIG1fd3JpdHRlbk51bWJlck9m
Qnl0ZXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworSXRlbUJ1ZmZlckhhbmRsZSBJdGVtQnVmZmVyOjpjcmVh
dGVJdGVtQnVmZmVyKHNpemVfdCBjYXBhY2l0eSkKK3sKKyAgICBpZiAobV93cml0aW5nQ2xpZW50
KSB7CisgICAgICAgIGlmIChhdXRvIGhhbmRsZSA9IG1fd3JpdGluZ0NsaWVudC0+Y3JlYXRlSXRl
bUJ1ZmZlcihjYXBhY2l0eSkpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKwor
ICAgIGNvbnN0ZXhwciBzaXplX3QgZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSA9IDEgPDwgMTA7
CisKKyAgICBhdXRvIG5ld0J1ZmZlckNhcGFjaXR5ID0gc3RkOjptYXgoY2FwYWNpdHksIGRlZmF1
bHRJdGVtQnVmZmVyQ2FwYWNpdHkpOworICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGZhc3RNYWxsb2MobmV3QnVmZmVyQ2FwYWNpdHkpKTsKKyAgICBtX2FsbG9j
YXRlZEJ1ZmZlcnMuYXBwZW5kKGJ1ZmZlcik7CisgICAgcmV0dXJuIHsgSXRlbUJ1ZmZlcklkZW50
aWZpZXI6OmdlbmVyYXRlKCksIGJ1ZmZlciwgbmV3QnVmZmVyQ2FwYWNpdHkgfTsKK30KKwordm9p
ZCBJdGVtQnVmZmVyOjpmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1C
dWZmZXJIYW5kbGUmKT4mJiBtYXBGdW5jdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGhh
bmRsZSA6IG1fcmVhZE9ubHlCdWZmZXJzKQorICAgICAgICBtYXBGdW5jdGlvbihoYW5kbGUpOwor
CisgICAgaWYgKG1fd3JpdGFibGVCdWZmZXIgJiYgbV93cml0dGVuTnVtYmVyT2ZCeXRlcykKKyAg
ICAgICAgbWFwRnVuY3Rpb24oeyBtX3dyaXRhYmxlQnVmZmVyLmlkZW50aWZpZXIsIG1fd3JpdGFi
bGVCdWZmZXIuZGF0YSwgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyB9KTsKK30KKwordm9pZCBJdGVt
QnVmZmVyOjpjbGVhcigpCit7CisgICAgZm9yIChhdXRvIGl0ZW0gOiBzdGQ6OmV4Y2hhbmdlKG1f
aXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgICAgIGl0ZW0uZGVz
dHJveSgpOworCisgICAgZm9yIChhdXRvKiBidWZmZXIgOiBzdGQ6OmV4Y2hhbmdlKG1fYWxsb2Nh
dGVkQnVmZmVycywgeyB9KSkKKyAgICAgICAgZmFzdEZyZWUoYnVmZmVyKTsKKworICAgIG1fcmVh
ZE9ubHlCdWZmZXJzLmNsZWFyKCk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHsgfTsKKyAgICBt
X3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gMDsKK30KKwordm9pZCBJdGVtQnVmZmVyOjpzd2FwV3Jp
dGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3QgbnVtYmVyT2ZCeXRlcykKK3sKKyAgICBpZiAobV93
cml0dGVuTnVtYmVyT2ZCeXRlcyArIG51bWJlck9mQnl0ZXMgPD0gbV93cml0YWJsZUJ1ZmZlci5j
YXBhY2l0eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuZXh0QnVmZmVyID0gY3JlYXRl
SXRlbUJ1ZmZlcihudW1iZXJPZkJ5dGVzKTsKKyAgICBib29sIGhhZFByZXZpb3VzQnVmZmVyID0g
bV93cml0YWJsZUJ1ZmZlcjsKKyAgICBhdXRvIHByZXZpb3VzQnVmZmVyID0gc3RkOjpleGNoYW5n
ZShtX3dyaXRhYmxlQnVmZmVyLCB7IH0pOworICAgIHByZXZpb3VzQnVmZmVyLmNhcGFjaXR5ID0g
c3RkOjpleGNoYW5nZShtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICBpZiAoaGFkUHJl
dmlvdXNCdWZmZXIpCisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKHBy
ZXZpb3VzQnVmZmVyKSk7CisKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0gV1RGTW92ZShuZXh0QnVm
ZmVyKTsKK30KKwordm9pZCBJdGVtQnVmZmVyOjphcHBlbmREYXRhQW5kTGVuZ3RoKFJlZjxTaGFy
ZWRCdWZmZXI+JiYgZGF0YSwgdWludDhfdCogbG9jYXRpb24pCit7CisgICAgcmVpbnRlcnByZXRf
Y2FzdDxzaXplX3QqPihsb2NhdGlvbilbMF0gPSBkYXRhLT5zaXplKCk7CisKKyAgICBhdXRvKiBz
dGFydE9mUGFkZGluZyA9IGxvY2F0aW9uICsgc2l6ZW9mKHNpemVfdCk7CisgICAgc2l6ZV90IHBh
ZGRpbmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
c3RhcnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRfdCk7
CisgICAgYXV0byogc3RhcnRPZkRhdGEgPSBzdGFydE9mUGFkZGluZyArIHBhZGRpbmc7CisgICAg
bWVtY3B5KHN0YXJ0T2ZEYXRhLCBkYXRhLT5kYXRhQXNVSW50OFB0cigpLCBkYXRhLT5zaXplKCkp
OworCisgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6
ZW9mKHNpemVfdCkgKyBwYWRkaW5nICsgZGF0YS0+c2l6ZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzMmU5NDUzOTA3MjhmYTcxNmI0OTNk
ODQxNWQ3YTE0NTg5M2EwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAgLTAs
MCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0SXRlbVR5cGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitjbGFzcyBEaXNwbGF5TGlzdDsKKworZW51bSBJdGVtQnVmZmVySWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgSXRlbUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPEl0ZW1CdWZmZXJJZGVudGlmaWVyVHlwZT47CisKKy8vIEFuIEl0ZW1CdWZmZXJIYW5k
bGUgd3JhcHMgYSBwb2ludGVyIHRvIGEgYnVmZmVyIHRoYXQgY29udGFpbnMgZGlzcGxheSBsaXN0
IGl0ZW0gZGF0YS4KK3N0cnVjdCBJdGVtQnVmZmVySGFuZGxlIHsKKyAgICBJdGVtQnVmZmVySWRl
bnRpZmllciBpZGVudGlmaWVyOworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAg
c2l6ZV90IGNhcGFjaXR5IHsgMCB9OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhKCp0aGlzKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWRh
dGE7IH0KK307CisKK3VzaW5nIEl0ZW1CdWZmZXJIYW5kbGVzID0gVmVjdG9yPEl0ZW1CdWZmZXJI
YW5kbGUsIDI+OworCisvLyBBbiBJdGVtSGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0byBhbiBJdGVt
VHlwZSwgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYW4gaXRlbSBvZiB0aGF0IHR5cGUuCitzdHJ1
Y3QgSXRlbUhhbmRsZSB7CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgYm9v
bCBpc0RyYXdpbmdJdGVtKCkgY29uc3Q7CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISEoKnRoaXMpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
ZGF0YTsgfQorCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECisgICAgQ1N0
cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisKKyAgICBJdGVtVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KGRhdGFbMF0pOyB9CisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRlbUlu
Qnl0ZXModHlwZSgpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBpcygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUOjppdGVtVHlwZTsgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQmIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXM8VD4oKSk7Cisg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUKj4oJmRhdGFbc2l6ZW9mKEl0ZW1UeXBl
KV0pOworICAgIH0KK307CisKK2NsYXNzIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyV3JpdGluZ0NsaWVudCgpIHsgfQorCisgICAgdmly
dHVhbCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KSA9IDA7CisgICAg
dmlydHVhbCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtKEl0ZW1IYW5kbGUpIGNvbnN0
ID0gMDsKK307CisKK2NsYXNzIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5JdGVtQnVmZmVyUmVhZGluZ0NsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBP
cHRpb25hbDxJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSXRlbShjb25zdCB1
aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgSXRlbVR5cGUsIHVpbnQ4X3QqIGhhbmRs
ZUxvY2F0aW9uKSA9IDA7Cit9OworCisvLyBBbiBJdGVtQnVmZmVyIGNvbnRhaW5zIGRpc3BsYXkg
bGlzdCBpdGVtIGRhdGEsIGFuZCBjb25zaXN0cyBvZiBhIHJlYWR3cml0ZSBJdGVtQnVmZmVySGFu
ZGxlICh0byB3aGljaCBkaXNwbGF5CisvLyBsaXN0IGl0ZW1zIGFyZSBhcHBlbmRlZCkgYXMgd2Vs
bCBhcyBhIG51bWJlciBvZiByZWFkb25seSBJdGVtQnVmZmVySGFuZGxlcy4gSXRlbXMgYXJlIGFw
cGVuZGVkIHRvIHRoZSByZWFkd3JpdGUKKy8vIGJ1ZmZlciB1bnRpbCBhbGwgYXZhaWxhYmxlIGNh
cGFjaXR5IGlzIGV4aGF1c3RlZCwgYXQgd2hpY2ggcG9pbnQgd2Ugd2lsbCBtb3ZlIHRoaXMgd3Jp
dGFibGUgaGFuZGxlIHRvIHRoZSBsaXN0CisvLyBvZiByZWFkb25seSBoYW5kbGVzLgorY2xhc3Mg
SXRlbUJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSXRlbUJ1ZmZlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBEaXNwbGF5TGlz
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB+SXRlbUJ1ZmZlcigpOworICAgIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgSXRlbUJ1ZmZlciYgb3BlcmF0b3I9KEl0ZW1CdWZmZXImJik7CisKKyAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7
CisgICAgICAgIGZvciAoYXV0byBidWZmZXIgOiBtX3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBidWZmZXIuY2FwYWNpdHk7CisgICAgICAgIHJlc3VsdCArPSBtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZv
aWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gIW1fd3JpdHRlbk51bWJlck9mQnl0ZXMgJiYgbV9yZWFkT25seUJ1ZmZlcnMuaXNFbXB0
eSgpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRl
SXRlbUJ1ZmZlcihzaXplX3QpOworCisgICAgLy8gSXRlbUJ1ZmZlcjo6YXBwZW5kPFQ+KC4uLikg
YXBwZW5kcyBhIGRpc3BsYXkgbGlzdCBpdGVtIG9mIHR5cGUgVCB0byB0aGUgZW5kIG9mIHRoZSBj
dXJyZW50CisgICAgLy8gd3JpdGFibGUgYnVmZmVyIGhhbmRsZTsgaWYgcmVtYWluaW5nIGJ1ZmZl
ciBjYXBhY2l0eSBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUgdGhlIGl0ZW0sIGEKKyAgICAvLyBu
ZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIChlaXRoZXIgYnkgdGhlIEl0ZW1CdWZmZXJXcml0
aW5nQ2xpZW50LCBpZiBzZXQsIG9yIGJ5IHRoZSBpdGVtCisgICAgLy8gYnVmZmVyIGl0c2VsZiBp
ZiB0aGVyZSBpcyBubyBjbGllbnQpLiBJdGVtcyBhcmUgcGxhY2VkIGJhY2stdG8tYmFjayBpbiB0
aGVzZSBpdGVtIGJ1ZmZlcnMsCisgICAgLy8gd2l0aCBhbiBJdGVtVHlwZSBzZXBhcmF0aW5nIGVh
Y2ggaXRlbS4KKyAgICAvLworICAgIC8vIElmIGEgd3JpdGluZyBjbGllbnQgaXMgcHJlc2VudCBh
bmQgcmVxdWlyZXMgY3VzdG9tIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0eXBlIFQsIHRo
ZQorICAgIC8vIGl0ZW0gYnVmZmVyIHdpbGwgYXNrIHRoZSBjbGllbnQgZm9yIGFuIG9wYXF1ZSBT
aGFyZWRCdWZmZXIgY29udGFpbmluZyBlbmNvZGVkIGRhdGEgZm9yIHRoZQorICAgIC8vIGl0ZW0u
IFRoaXMgZW5jb2RlZCBkYXRhIGlzIHRoZW4gYXBwZW5kZWQgdG8gdGhlIGl0ZW0gYnVmZmVyLCB3
aXRoIHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQKKyAgICAvLyB0aGUgc3RhcnQgb2YgdGhpcyBkYXRh
IGlzIGFsaWduZWQgdG8gOCBieXRlcywgaWYgbmVjZXNzYXJ5LiBXaGVuIGNvbnN1bWluZyBlbmNv
ZGVkIGl0ZW0KKyAgICAvLyBkYXRhLCBhIGNvcnJlc3BvbmRpbmcgSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQgd2lsbCBiZSByZXF1aXJlZCB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhCisgICAg
Ly8gYmFjayBpbnRvIGFuIGl0ZW0gb2YgdHlwZSBULgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IGNsYXNzLi4uIEFyZ3M+IHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVl
IHx8ICFUOjppc0lubGluZUl0ZW0pOworICAgICAgICBjb25zdGV4cHIgYXV0byBzaXplT2ZUeXBl
QW5kSXRlbSA9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2YoVCk7CisKKyAgICAgICAgaWYgKCFU
Ojppc0lubGluZUl0ZW0gJiYgbV93cml0aW5nQ2xpZW50KSB7CisgICAgICAgICAgICBzdGF0aWMg
dWludDhfdCBpdGVtQnVmZmVyW3NpemVPZlR5cGVBbmRJdGVtXTsKKyAgICAgICAgICAgIGl0ZW1C
dWZmZXJbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgICAg
ICBuZXcgKGl0ZW1CdWZmZXIgKyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgICAgICAgICBpZiAoYXV0byBzaGFyZWRCdWZmZXIgPSBtX3dyaXRp
bmdDbGllbnQtPmVuY29kZUl0ZW0oeyBpdGVtQnVmZmVyIH0pKSB7CisgICAgICAgICAgICAgICAg
c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2hhcmVkQnVmZmVyLT5zaXplKCkgKyBzaXplb2Yo
SXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBhbGlnbm9mKHVpbnQ2NF90KSk7CisgICAgICAg
ICAgICAgICAgbV93cml0YWJsZUJ1ZmZlci5kYXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgICAgIGFwcGVu
ZERhdGFBbmRMZW5ndGgoc2hhcmVkQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIG1fd3JpdGFibGVC
dWZmZXIuZGF0YSArIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBzaXplb2YoSXRlbVR5cGUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVPZlR5cGVBbmRJdGVtKTsKKworICAgICAg
ICBpZiAoIXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUpCisgICAgICAg
ICAgICBtX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzLmFwcGVuZCh7ICZtX3dyaXRh
YmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10gfSk7CisKKyAgICAgICAgdW5j
aGVja2VkQXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisg
ICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqIGNsaWVudCkgeyBtX3dy
aXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVyUmVh
ZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGluZ0NsaWVudCA9IGNsaWVudDsgfQorCitwcml2
YXRlOgorICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGVzJiByZWFkT25seUJ1ZmZlcnMoKSBjb25z
dCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsgfQorICAgIHZvaWQgZm9yRWFjaEl0ZW1CdWZm
ZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYpIGNvbnN0OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3Qg
bnVtYmVyT2ZCeXRlcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRhQW5kTGVu
Z3RoKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ4X3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIHVuY2hlY2tlZEFwcGVuZChBcmdzJiYuLi4gYXJncykK
KyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0T2ZJdGVtID0gJm1fd3JpdGFibGVCdWZmZXIuZGF0
YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXTsKKyAgICAgICAgc3RhcnRPZkl0ZW1bMF0gPSBzdGF0
aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgIG5ldyAoc3RhcnRPZkl0ZW0g
KyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAg
ICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0
ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKTsKKyAgICB9CisKKyAgICBJdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0ciB9OworICAgIEl0ZW1CdWZmZXJXcml0aW5n
Q2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPEl0ZW1IYW5k
bGU+IG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnM7CisgICAgVmVjdG9yPHVpbnQ4
X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZXMgbV9yZWFkT25s
eUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRsZSBtX3dyaXRhYmxlQnVmZmVyOworICAgIHNp
emVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAppbmRleCA1NmI1N2YwN2MzYzNjOTNjZDNmMDE5MGY1ZDRhY2QxYmI2YzJh
NGU5Li43ZjQwN2RjZTlmNzc1NjViMTEzZTYzZmJhYmUwODEyMjkyZDU0MWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC00MywyMDQgKzQzLDE2IEBAIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdCB7CiAvLyBTaG91bGQgbWF0Y2ggUmVuZGVyVGhlbWU6OnBsYXRmb3JtRm9j
dXNSaW5nV2lkdGgoKQogc3RhdGljIGNvbnN0IGZsb2F0IHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgg
PSAzOwogCi0jaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECi1XVEY6OkNTdHJp
bmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIFRleHRTdHJlYW0gdHM7Ci0gICAg
dHMgPDwgKnRoaXM7Ci0gICAgcmV0dXJuIHRzLnJlbGVhc2UoKS51dGY4KCk7Ci19Ci0jZW5kaWYK
LQotSXRlbTo6SXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogbV90eXBlKHR5cGUpCi17Ci19Ci0K
LUl0ZW06On5JdGVtKCkgPSBkZWZhdWx0OwotCi1zaXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29u
c3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3Rh
dGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRDVE0+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZp
bGxHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxs
R3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRNaXRlckxpbWl0Pihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENs
aXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlw
UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
SW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1Bh
dHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdG
b2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRo
Q29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFBhdGg+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1
dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQdXRJbWFnZURhdGE+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTdHJva2VSZWN0PihpdGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBh
dGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJS
ZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSNp
ZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtKSk7Ci0gICAgfQotICAgIHJldHVybiAw
OwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd2luZ0l0ZW0mIGl0ZW0pCi17Ci0gICAgdHMuc3RhcnRHcm91cCgpOwotICAgIHRzIDw8
ICJleHRlbnQgIjsKLSAgICBpZiAoaXRlbS5leHRlbnRLbm93bigpKQotICAgICAgICB0cyA8PCBp
dGVtLmV4dGVudCgpOwotICAgIGVsc2UKLSAgICAgICAgdHMgPDwgInVua25vd24iOwotICAgIAot
ICAgIHRzLmVuZEdyb3VwKCk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1EcmF3aW5nSXRlbTo6RHJh
d2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICA6IEl0ZW0odHlwZSkKLXsKLX0KLQotRHJhd2lu
Z0l0ZW06On5EcmF3aW5nSXRlbSgpID0gZGVmYXVsdDsKLQotU2F2ZTo6U2F2ZSgpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpTYXZlKQotewotfQotCi1TYXZlOjp+U2F2ZSgpID0gZGVmYXVsdDsKLQog
dm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5zYXZlKCk7CiB9CiAKLVJlc3RvcmU6OlJlc3RvcmUoKQotICAgIDogSXRlbShJdGVt
VHlwZTo6UmVzdG9yZSkKLXsKLX0KLQotUmVzdG9yZTo6flJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi1UcmFuc2xhdGU6OlRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQotICAgIDogSXRlbShJdGVtVHlwZTo6VHJhbnNsYXRlKQotICAgICwgbV94KHgp
Ci0gICAgLCBtX3koeSkKLXsKLX0KLQotVHJhbnNsYXRlOjp+VHJhbnNsYXRlKCkgPSBkZWZhdWx0
OwotCiB2b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQudHJhbnNsYXRlKG1feCwgbV95KTsKQEAgLTI1NCwxNCArNjYsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJh
bnNsYXRlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotUm90YXRlOjpSb3RhdGUoZmxvYXQg
YW5nbGUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpSb3RhdGUpCi0gICAgLCBtX2FuZ2xlKGFuZ2xl
KQotewotfQotCi1Sb3RhdGU6On5Sb3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUm90YXRlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5yb3Rh
dGUobV9hbmdsZSk7CkBAIC0yNzQsMTQgKzc4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJvdGF0ZSYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLVNjYWxlOjpTY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTY2FsZSkKLSAgICAsIG1fc2l6ZShzaXplKQotewotfQotCi1TY2FsZTo6flNjYWxl
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNjYWxlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zY2FsZShtX3NpemUpOwpAQCAtMjk0LDE0ICs5MCw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
Y2FsZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldENUTTo6U2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0Q1RNKQot
ICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1TZXRDVE06On5TZXRDVE0oKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzE0LDE0ICsx
MDIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgU2V0Q1RNJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ29uY2F0ZW5hdGVDVE06OkNv
bmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRl
bShJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0pCi0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0p
Ci17Ci19Ci0KLUNvbmNhdGVuYXRlQ1RNOjp+Q29uY2F0ZW5hdGVDVE0oKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LmNvbmNhdENUTShtX3RyYW5zZm9ybSk7CkBAIC0zMzUsOCArMTE1
LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQogfQogCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElu
bGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZ3JhZGllbnQuZGF0
YSgpKQorICAgIDogbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKICAgICAsIG1fZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uKGdyYWRpZW50LmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSkKICAgICAs
IG1fc3ByZWFkTWV0aG9kKGdyYWRpZW50LnNwcmVhZE1ldGhvZCgpKQogICAgICwgbV9jb2xvclN0
b3BDb3VudChzdGF0aWNfY2FzdDx1aW50OF90PihncmFkaWVudC5zdG9wcygpLnNpemUoKSkpCkBA
IC0zNTgsMTQgKzEzNyw4IEBAIFJlZjxHcmFkaWVudD4gU2V0SW5saW5lRmlsbEdyYWRpZW50Ojpn
cmFkaWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGdyYWRpZW50OwogfQogCi1SZWY8U2V0SW5saW5l
RmlsbEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShjb25zdCBHcmFkaWVu
dCYgZ3JhZGllbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdy
YWRpZW50KGdyYWRpZW50KSk7Ci19Ci0KIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5l
RmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50
OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0
YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdy
YWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0
YShkYXRhKQorICAgIDogbV9kYXRhKGRhdGEpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbihncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24pCiAgICAgLCBtX3NwcmVhZE1ldGhv
ZChzcHJlYWRNZXRob2QpCiAgICAgLCBtX2NvbG9yU3RvcENvdW50KGNvbG9yU3RvcENvdW50KQpA
QCAtMzc3LDggKzE1MCw2IEBAIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdy
YWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTCiAgICAgfQogfQogCi1T
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6On5TZXRJbmxpbmVGaWxsR3JhZGllbnQoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9w
Q291bnQpCkBAIC00MDQsMTMgKzE3NSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsR3JhZGllbnQmKQogICAgIHJldHVy
biB0czsKIH0KIAotUmVmPFNldElubGluZUZpbGxDb2xvcj4gU2V0SW5saW5lRmlsbENvbG9yOjpj
cmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldElubGluZUZpbGxDb2xvcihjb2xvckRhdGEpKTsKLX0KLQotU2V0SW5saW5lRmlsbENv
bG9yOjp+U2V0SW5saW5lRmlsbENvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGluZUZp
bGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpAQCAtNDIyLDEzICsxODYsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lRmls
bENvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRJbmxpbmVTdHJva2VD
b2xvcj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRh
dGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lU3Ryb2tlQ29sb3IoY29s
b3JEYXRhKSk7Ci19Ci0KLVNldElubGluZVN0cm9rZUNvbG9yOjp+U2V0SW5saW5lU3Ryb2tlQ29s
b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGNvbG9yKCkpOwpAQCAtNDQwLDEzICsxOTcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lU3Ryb2tlQ29sb3ImIHN0YXRlKQog
ICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gU2V0U3Ryb2tlVGhp
Y2tuZXNzOjpjcmVhdGUoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpKTsKLX0KLQotU2V0U3Ryb2tlVGhpY2tu
ZXNzOjp+U2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldFN0cm9rZVRo
aWNrbmVzczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fdGhpY2tuZXNzKTsKQEAgLTQ1OSwxOSArMjA5LDE1
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogfQogCiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICwg
bV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgOiBtX3N0YXRlKHN0YXRlLCBmbGFncykKIHsKIH0K
IAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBz
dGF0ZUNoYW5nZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0YXRlKQotICAgICwgbV9zdGF0
ZShzdGF0ZUNoYW5nZSkKKyAgICA6IG1fc3RhdGUoc3RhdGVDaGFuZ2UpCiB7CiB9CiAKLVNldFN0
YXRlOjp+U2V0U3RhdGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQp
OwpAQCAtNDgzLDE0ICsyMjksNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAot
U2V0TGluZUNhcDo6U2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwKQotICAgICwgbV9saW5lQ2FwKGxpbmVDYXApCi17Ci19Ci0KLVNldExp
bmVDYXA6On5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldExpbmVDYXA6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVD
YXAobV9saW5lQ2FwKTsKQEAgLTUwMiwxNSArMjQwLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVDYXAmIGxpbmVDYXApCiAgICAg
cmV0dXJuIHRzOwogfQogCi1TZXRMaW5lRGFzaDo6U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaCkKLSAgICAsIG1fZGFzaEFycmF5KGRhc2hBcnJheSkKLSAgICAsIG1fZGFzaE9mZnNl
dChkYXNoT2Zmc2V0KQotewotfQotCi1TZXRMaW5lRGFzaDo6flNldExpbmVEYXNoKCkgPSBkZWZh
dWx0OwotCiB2b2lkIFNldExpbmVEYXNoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lRGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zm
c2V0KTsKQEAgLTUyMywxNCArMjUyLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVEYXNoJiBsaW5lRGFzaCkKICAgICByZXR1cm4g
dHM7CiB9CiAKLVNldExpbmVKb2luOjpTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVKb2luKQotICAgICwgbV9saW5lSm9pbihsaW5lSm9p
bikKLXsKLX0KLQotU2V0TGluZUpvaW46On5TZXRMaW5lSm9pbigpID0gZGVmYXVsdDsKLQogdm9p
ZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5lSm9pbik7CkBAIC01NDIsMTQgKzI2Myw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRM
aW5lSm9pbiYgbGluZUpvaW4pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRNaXRlckxpbWl0OjpT
ZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0KQotICAgICwgbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCi17Ci19Ci0KLVNldE1p
dGVyTGltaXQ6On5TZXRNaXRlckxpbWl0KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldE1pdGVyTGlt
aXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsKQEAgLTU2MSwyNiArMjc0LDExIEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxp
bWl0JiBtaXRlckxpbWl0KQogICAgIHJldHVybiB0czsKIH0KIAotQ2xlYXJTaGFkb3c6OkNsZWFy
U2hhZG93KCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsZWFyU2hhZG93KQotewotfQotCi1DbGVh
clNoYWRvdzo6fkNsZWFyU2hhZG93KCkgPSBkZWZhdWx0OwotCiB2b2lkIENsZWFyU2hhZG93Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwogfQogCi1DbGlwOjpDbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNsaXApCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotQ2xpcDo6
fkNsaXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcChtX3JlY3QpOwpAQCAtNTkyLDE0ICsy
OTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ2xpcCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBPdXQ6OkNsaXBPdXQoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dCkKLSAgICAs
IG1fcmVjdChyZWN0KQotewotfQotCi1DbGlwT3V0Ojp+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQog
dm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7CkBAIC02MTEsMTQgKzMwMSw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0JiBpdGVt
KQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAs
IG1fcGF0aChwYXRoKQotewotfQotCi1DbGlwT3V0VG9QYXRoOjp+Q2xpcE91dFRvUGF0aCgpID0g
ZGVmYXVsdDsKLQogdm9pZCBDbGlwT3V0VG9QYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwT3V0KG1fcGF0aCk7CkBAIC02MzAsMTUg
KzMxMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcFBhdGg6
OkNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQotICAgIDogSXRl
bShJdGVtVHlwZTo6Q2xpcFBhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1fd2luZFJ1
bGUod2luZFJ1bGUpCi17Ci19Ci0KLUNsaXBQYXRoOjp+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwgbV93aW5kUnVsZSk7CkBAIC02NTEsMTYgKzMy
NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDbGlwUGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBUb0RyYXdpbmdDb21t
YW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMpCi0gICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCi0gICAg
LCBtX2RyYXdpbmdDb21tYW5kcyhXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpCi17Ci19Ci0KLUNs
aXBUb0RyYXdpbmdDb21tYW5kczo6fkNsaXBUb0RyYXdpbmdDb21tYW5kcygpID0gZGVmYXVsdDsK
LQogdm9pZCBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBUb0RyYXdpbmdDb21tYW5kcyhtX2Rlc3Rp
bmF0aW9uLCBtX2NvbG9yU3BhY2UsIFsmXSAoR3JhcGhpY3NDb250ZXh0JiBjbGlwcGluZ0NvbnRl
eHQpIHsKQEAgLTY3Nyw4ICszNDAsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBpdGVtKQogfQogCiBE
cmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZl
ckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYg
YWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMp
Ci0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFr
ZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2dseXBocyhXVEZNb3Zl
KGdseXBocykpCiAgICAgLCBtX2FkdmFuY2VzKFdURk1vdmUoYWR2YW5jZXMpKQogICAgICwgbV9s
b2NhbEFuY2hvcihsb2NhbEFuY2hvcikKQEAgLTY4OCw4ICszNTAsNyBAQCBEcmF3R2x5cGhzOjpE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+
JiYgZ2x5cGhzLAogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkp
CisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAg
LCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQogICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290
aGluZ01vZGUpCiB7CkBAIC03MDIsMTkgKzM2MywxNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
RwogICAgIGNvbXB1dGVCb3VuZHMoKTsKIH0KIAotRHJhd0dseXBoczo6fkRyYXdHbHlwaHMoKSA9
IGRlZmF1bHQ7Ci0KIGlubGluZSBHbHlwaEJ1ZmZlciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBo
QnVmZmVyKCkgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciByZXN1bHQ7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZCht
X2dseXBoc1tpXSwgbV9mb250LmdldCgpLCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9P
ZmZzZXQpOworICAgICAgICByZXN1bHQuYWRkKG1fZ2x5cGhzW2ldLCAqbV9mb250LCBtX2FkdmFu
Y2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IHZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewotICAgIGNvbnRleHQuZHJhd0dseXBocyhtX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwg
MCwgbV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOworICAg
IGNvbnRleHQuZHJhd0dseXBocygqbV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1f
Z2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9p
ZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKQEAgLTczNCwxNCArMzkzLDggQEAgdm9pZCBE
cmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKICAgICB9CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0dseXBoczo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9ib3VuZHM7Ci19Ci0KIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1
bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0u
bG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVt
LmFuY2hvclBvaW50KCkpOwpAQCAtNzUwLDE3ICs0MDMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZTo6RHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1f
aW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdJ
bWFnZTo6fkRyYXdJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdJbWFnZSht
X2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0
aW9ucyk7CkBAIC03NjgsMjYgKzQxMCwxMiBAQCB2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVj
dCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRl
bS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZEltYWdlOjpE
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCi0g
ICAgLCBtX3NwYWNpbmcoc3BhY2luZykKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1h
Z2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1h
Z2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1h
Z2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzk1LDcgKzQyMyw2IEBAIHZvaWQgRHJhd1Rp
bGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZElt
YWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CkBAIC04MDQsMjAg
KzQzMSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0
aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkK
LSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQot
ICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxl
RmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkKLSAgICAsIG1fdlJ1bGUodlJ1bGUpCi0gICAg
LCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1E
cmF3VGlsZWRTY2FsZWRJbWFnZTo6fkRyYXdUaWxlZFNjYWxlZEltYWdlKCkgPSBkZWZhdWx0Owot
CiB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBt
X2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1
bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtODI1LDI1ICs0MzgsMTMgQEAgdm9pZCBE
cmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRl
bS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3Vy
Y2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9u
KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZm
ZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCi0gICAgLCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uUmVj
dChkZXN0UmVjdCkKLSAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQotICAgICwgbV9vcHRpb25zKG9w
dGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZUJ1ZmZlcjo6fkRyYXdJbWFnZUJ1ZmZlcigpID0gZGVm
YXVsdDsKLQotdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0CitOT19SRVRVUk4gdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODUxLDcgKzQ1Miw2IEBAIHZvaWQgRHJhd0lt
YWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRlbnRpZmllciIsIGl0ZW0u
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291
cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVj
dCIsIGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODU5LDggKzQ1OSw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2VCdWZm
ZXImIGl0ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5h
dGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJh
d05hdGl2ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2Up
CiAgICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChk
ZXN0UmVjdCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY4LDggKzQ2Nyw2IEBAIERy
YXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJbWFnZTo6fkRyYXdOYXRp
dmVJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFn
ZShtX2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3QsIG1fc3JjUmVjdCwgbV9v
cHRpb25zKTsKQEAgLTg3Nyw3ICs0NzQsNiBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8g
RklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0
IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVt
LmRlc3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg4NSw4ICs0ODEsNyBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVt
KQogfQogCiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFn
ZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0o
cGF0dGVyblRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCiAgICAgLCBtX2Rl
c3RpbmF0aW9uKGRlc3RSZWN0KQpAQCAtODk2LDggKzQ5MSw2IEBAIERyYXdQYXR0ZXJuOjpEcmF3
UGF0dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjCiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24s
IG1fdGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29w
dGlvbnMpOwpAQCAtOTA1LDcgKzQ5OCw2IEBAIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJu
LXRyYW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTUsMTUgKzUwNyw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0
dGVybiYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0OjpEcmF3UmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9ib3Jk
ZXJUaGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3UmVjdDo6fkRyYXdSZWN0
KCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhp
Y2tuZXNzKTsKQEAgLTkzMSwyMSArNTE0LDExIEBAIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNr
bmVzcyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJh
d0xpbmU6OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICwg
bV9wb2ludDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQotewotfQotCi1EcmF3TGlu
ZTo6fkRyYXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5l
Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0
UmVjdCBib3VuZHM7CkBAIC05NjAsMTUgKzUzMywxMyBAQCB2b2lkIERyYXdMaW5lOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9p
bnQtMiIsIGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRHJhd0xpbmVzRm9y
VGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBj
b25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAgLCBtX2Jsb2NrTG9jYXRp
b24oYmxvY2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQog
ICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fd2lkdGhzKHdpZHRocykK
ICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3Nyw4ICs1NDgsNiBAQCBEcmF3TGlu
ZXNGb3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRp
b24sIGNvbnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9y
VGV4dCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0
KHBvaW50KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5l
cyk7CkBAIC05OTgsNyArNTY3LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JU
ZXh0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9y
VGV4dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2Nr
TG9jYXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxv
Y2FsQW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkp
OwpAQCAtMTAxMCwxNSArNTc4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgcmV0dXJuIHRz
OwogfQogCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikK
LSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkKLXsKLX0KLQotRHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihtX3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMSwxOSArNTkwLDEwIEBAIE9wdGlvbmFsPEZs
b2F0UmVjdD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0VsbGlw
c2U6OkRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1EcmF3
RWxsaXBzZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdFbGxpcHNlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3
RWxsaXBzZShtX3JlY3QpOwpAQCAtMTA1NSwxNCArNjA1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkK
LXsKLX0KLQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0
aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogI2lmIFVTRShDRykK
QEAgLTEwNzIsMjQgKzYxNCwxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVtKQorc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMu
ZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcg
Zm9yIHBhdGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgcmV0
dXJuIHRzOwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQotICAgICwg
bV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwgbV9vZmZzZXQob2Zmc2V0
KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3VzUmluZ1BhdGg6On5EcmF3
Rm9jdXNSaW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0Zv
Y3VzUmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExMDQsNyAr
NjM0LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAvLyAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9n
Z2luZyBmb3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgo
KSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTEx
MTMsMTYgKzY0MiwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAKIERyYXdGb2N1c1JpbmdS
ZWN0czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAsIG1fcmVjdHMocmVj
dHMpCisgICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLURyYXdGb2N1c1Jp
bmdSZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9j
dXNSaW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29s
b3IpOwpAQCAtMTEzOSw3ICs2NjUsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1Jp
bmdSZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29ucwogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3Vz
UmluZ1JlY3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExNDcsMTQgKzY3Miw2IEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdDo6Rmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkZpbGxSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxSZWN0Ojp+RmlsbFJl
Y3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7CkBAIC0xMTYy
LDIwICs2NzksMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
RHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJl
Y3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RX
aXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCi0gICAgLCBtX3JlY3Qo
cmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aENvbG9yOjp+
RmlsbFJlY3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZp
bGxSZWN0KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTgzLDIxICs2OTAsMTcgQEAgdm9pZCBGaWxs
UmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJl
Y3RXaXRoQ29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgcmV0dXJu
IHRzOwogfQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBtX3JlY3QocmVjdCkKKyAg
ICA6IG1fcmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAotRmls
bFJlY3RXaXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgpID0gZGVmYXVsdDsKLQog
dm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgp
KTsKQEAgLTEyMDUsMjMgKzcwOCwxMSBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRl
bSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwog
ICAgIC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0Iiwg
aXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENvbXBvc2l0ZWRSZWN0OjpG
aWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0
KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9k
ZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6fkZpbGxDb21wb3NpdGVk
UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVj
dCwgbV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIyOSw3ICs3MjAsNiBAQCB2b2lk
IEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
ZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CkBAIC0xMjM3LDE2ICs3MjcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAg
ICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fYmxlbmRNb2Rl
KGJsZW5kTW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+RmlsbFJvdW5kZWRSZWN0KCkg
PSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NCwyMyArNzM0LDEyIEBAIHZvaWQgRmlsbFJv
dW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRl
ZFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0
czsKIH0KIAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fcm91
bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19
Ci0KLUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtMTI3OCw3ICs3
NDcsNiBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5k
ZWQtaG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg3LDE0ICs3NTUsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxJ
bmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCi0gICAgLCBtX3Bh
dGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRo
KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOwpAQCAt
MTMwMiwyMSArNzYyLDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAsIG1fcGF0
aChwYXRoKQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lk
IEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNCwxOSArNzc1LDEwIEBAIHZvaWQgRmls
bFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsK
IH0KIAotRmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0
KQotewotfQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lk
IEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NCwxNCArNzg2LDEyIEBAIHZv
aWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxF
bGxpcHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAg
IHJldHVybiB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJ
bWFnZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNS
ZWN0KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoaW1h
Z2VEYXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8g
cHJlc2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KICAgICAsIG1faW5wdXRG
b3JtYXQoaW5wdXRGb3JtYXQpCkBAIC0xMzYwLDggKzgwMCw3IEBAIFB1dEltYWdlRGF0YTo6UHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURh
dGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQog
ICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShp
bWFnZURhdGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNjksOSAr
ODA4LDcgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1QdXRJbWFnZURhdGE6On5Q
dXRJbWFnZURhdGEoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdAorTk9fUkVUVVJOIHZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRo
ZSBkZWxlZ2F0ZS4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEzNzksNyArODE2LDYg
QEAgdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFn
ZURhdGEmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlucHV0Rm9ybWF0IiwgaXRlbS5pbnB1dEZv
cm1hdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlRGF0YVNpemUiLCBpdGVtLmltYWdl
RGF0YSgpLnNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNS
ZWN0KCkpOwpAQCAtMTM4OCwzMyArODI0LDEzIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6OmNy
ZWF0ZShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRl
c3RpbmF0aW9uKSk7Ci19Ci0KLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVGb3JN
ZWRpYTo6Y3JlYXRlKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJh
bWVGb3JNZWRpYShpZGVudGlmaWVyLCBkZXN0aW5hdGlvbikpOwotfQotCiBQYWludEZyYW1lRm9y
TWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJh
bWVGb3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQotICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLXsKLX0KLQotUGFpbnRGcmFtZUZvck1lZGlh
OjpQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
UGFpbnRGcmFtZUZvck1lZGlhKQotICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAg
OiBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKICAgICAsIG1fZGVzdGluYXRpb24o
ZGVzdGluYXRpb24pCiB7CiB9CiAKLVBhaW50RnJhbWVGb3JNZWRpYTo6flBhaW50RnJhbWVGb3JN
ZWRpYSgpID0gZGVmYXVsdDsKLQotdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0CitOT19SRVRVUk4gdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQg
YnkgdGhlIGRlbGVnYXRlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQyMiwyMCAr
ODM4LDEwIEBAIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUGFpbnRGcmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0aW5h
dGlvbiIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJva2VS
ZWN0OjpTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3JlY3QocmVj
dCkKLSAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVjdDo6flN0
cm9rZVJlY3QoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUmVjdDo6
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJl
Y3QgYm91bmRzID0gbV9yZWN0OwpAQCAtMTQ1MCw3ICs4NTYsNiBAQCB2b2lkIFN0cm9rZVJlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0pCiB7
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpAQCAtMTQ3
MywxOSArODc4LDEwIEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0
ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OlN0cm9rZUVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tlRWxsaXBz
ZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ry
b2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tu
ZXNzKCk7CkBAIC0xNTAyLDcgKzg5OCw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBAIC0xNTI2
LDM3ICs5MjEsMTIgQEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tlSW5saW5l
UGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0
aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJbmxpbmVQ
YXRoKCkgPSBkZWZhdWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAK
LVN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLVN0
cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Q2xl
YXJSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNsZWFyUmVj
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpAQCAtMTU2
NCwxOSArOTM0LDEwIEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29u
c3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVt
LnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjpC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShvcGFjaXR5
KQotewotfQotCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVuY3lMYXll
cigpID0gZGVmYXVsdDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG1fb3BhY2l0eSk7CkBAIC0xNTg0LDU3ICs5NDUsMjggQEAgdm9pZCBCZWdpblRy
YW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBCZWdp
blRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5IiwgaXRl
bS5vcGFjaXR5KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6
OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpFbmRU
cmFuc3BhcmVuY3lMYXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5FbmRUcmFu
c3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tlUGF0dGVy
bjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybikKLXsKLX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQYXR0ZXJu
KCkgPSBkZWZhdWx0OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQYXR0ZXJu
KCk7CiB9CiAKLUFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAgIDogSXRl
bShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0dGVybjo6
fkFwcGx5RmlsbFBhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0dGVybjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBw
bHlGaWxsUGF0dGVybigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3RvcihzY2FsZUZh
Y3RvcikKLXsKLX0KLQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NDYsNyArOTc4LDcgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3ImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3N0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBlKQog
ewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8ICJz
YXZlIjsgYnJlYWs7CkBAIC0xNzE3LDE3MiArMTA0OSwxNzAgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQogICAgIHJl
dHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgSXRlbSYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIEl0
ZW1IYW5kbGUgaXRlbSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsK
ICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8gd2hp
Y2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCiAgICAg
c3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8VHJhbnNsYXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0ZW5h
dGVDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlj
a25lc3M+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVEYXNo
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExp
bmVKb2luPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dFRv
UGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8Q2xpcFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhz
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdUaWxl
ZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd05h
dGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdl
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxEcmF3UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGluZT4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0xpbmVzRm9yVGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0Zv
Y3VzUmluZ1JlY3RzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0
V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29s
b3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAgICAgIHRz
IDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxG
aWxsUm91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91bmRl
ZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsSW5saW5l
UGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNlPihp
dGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0SW1h
Z2VEYXRhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1l
Rm9yTWVkaWE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9r
ZVJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJv
a2VJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlRWxs
aXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0Ogot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBp
dGVtLmdldDxDbGVhclJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdpblRyYW5z
cGFyZW5jeUxheWVyPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmljZVNj
YWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5vIGFkZGl0
aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IGYwMTViZTVl
ODY2MDZlY2MyZjZjZTg1N2MxZjcxMTY3Njk0ZmU4ZTMuLjJhNDYyNmU4ZWIzMTUwZDgxODU0Y2Zi
MmFlMmFiNjNlMzJjMGE3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAt
NTEsMzIwICs1MSwxNjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFNhdmUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OlNhdmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0
IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3QmIGV4
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJvb2wgZXh0
ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7IH0K
LQotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBsb2Nh
bCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFuc2Zv
cm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJbWFnZURh
dGEpIG9wZXJhdGUgaW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMsIG92ZXJy
aWRlIHRoaXMgbWV0aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4gdmFsdWUg
bmVlZHMgdG8gaW5jbHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywgZXRjLgot
ICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0ZW0o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBhbmQg
dHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFJlc3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflNhdmUoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2F2ZT4+
IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2F2ZSgp
OwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+IFNhdmU6
OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19Ci0KLWNs
YXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflJlc3RvcmUoKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFJlc3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBS
ZXN0b3JlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNvZGVyJikK
LXsKLSAgICByZXR1cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVibGljIEl0
ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBtX3go
eCkKKyAgICAgICAgLCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
VHJhbnNsYXRlKCk7Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAgICAg
ZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94OwotICAgIGZs
b2F0IG1feTsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0IG1feSB7
IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0ZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7Ci0gICAg
ZW5jb2RlciA8PCBtX3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8VHJhbnNsYXRlPj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxmbG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4KQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAg
ZGVjb2RlciA+PiB5OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFzcyBSb3Rh
dGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkKKyAg
ICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+Um90YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5nbGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPFJvdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgUm90YXRlKGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAK
LSAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBmbG9hdCBt
X2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgUm90YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fYW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8Um90YXRlPj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDxmbG9hdD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBpZiAoIWFu
Z2xlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJvdGF0ZTo6
Y3JlYXRlKCphbmdsZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2NhbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTY2FsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwor
CisgICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6ZShzaXpl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBjb25zdCBG
bG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9h
dFNpemUgbV9zaXplOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2NhbGU6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zaXpl
OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxlPj4gU2Nh
bGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0U2l6ZT4g
c2NhbGU7Ci0gICAgZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNjYWxlKTsK
LX0KLQotY2xhc3MgU2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
bWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6U2V0Q1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAg
ICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDogbV90
cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0Q1RNKG1hdHJpeCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNl
dENUTSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9ybSBt
X3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldENUTTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3RyYW5z
Zm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRDVE0+
PiBTZXRDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmlu
ZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlm
ICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IFNldENUTTo6Y3JlYXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0ZUNUTSA6
IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRy
aXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwor
CisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisg
ICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNhdGVuYXRl
Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBD
b25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwog
fTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFuc2Zvcm07
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0ZW5hdGVD
VE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0cmFuc2Zv
cm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xh
c3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5l
RmlsbEdyYWRpZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBt
YXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFk
aWVudD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJbmxpbmUo
Y29uc3QgR3JhZGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVudCgp
OwotCi0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNldElubGlu
ZUZpbGxHcmFkaWVudD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBT
UkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBjb25zdCBH
cmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNl
VHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhf
dCBjb2xvclN0b3BDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dElubGluZUZpbGxHcmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50U3BhY2VU
cmFuc2Zvcm1hdGlvbiwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAgIH0KLQor
ICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENv
dW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3Jh
ZGllbnQ6OkRhdGEmLAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9w
Q291bnQpOwogCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50Jik7Cisg
ICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8R3JhZGll
bnQ+IGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisKK3By
aXZhdGU6CiAgICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAgICBTUkdC
QTx1aW50OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGllbnQ6OkRh
dGEgbV9kYXRhOwpAQCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWludDhfdCBt
X2NvbG9yU3RvcENvdW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50OF90IGkg
PSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgbV9v
ZmZzZXRzW2ldOwotICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xv
cnNbaV0gfS52YWx1ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAgZW5jb2Rl
ciA8PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8IG1fc3By
ZWFkTWV0aG9kOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNl
dElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291bnQ7Ci0g
ICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENvdW50KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BDb3VudCA+
IG1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
ZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhfdD4gY29s
b3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAqY29s
b3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0OwotICAg
ICAgICBkZWNvZGVyID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBjb2xv
cjsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikKLSAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0gYXNTUkdC
QShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tpXSA9ICpv
ZmZzZXQ7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7Ci0gICAg
ZGVjb2RlciA+PiBkYXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uOwotICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOwot
ICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNwcmVhZE1l
dGhvZDsKLSAgICBkZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVhZE1ldGhv
ZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNldElubGlu
ZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkgfTsKLX0K
LQotY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5s
aW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNl
dElubGluZUZpbGxDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8dWlu
dDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xv
ckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4geyBtX2NvbG9yRGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
IAorcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7
IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7Ci0gICAg
ZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JHQkEo
UGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxpbmVTdHJv
a2VDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9yIHsKIHB1
YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9rZUNvbG9y
PiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi1wcml2YXRlOgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNv
bG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcikK
LSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRhdGEo
Y29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7Ci19
OworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9y
OjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PFNldElubGluZVN0cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAgICBkZWNv
ZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0g
ICAgcmV0dXJuIFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNrZWRDb2xv
cjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4X3Q+IG1f
Y29sb3JEYXRhOworfTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGljIEl0ZW0g
eworY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNrbmVzcyk7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3MoKTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0cm9r
ZVRoaWNrbmVzczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0g
ICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KLQotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0cm9rZVRo
aWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdHJv
a2VUaGlja25lc3MpCi0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAgICAgICA6
IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhpY2tuZXNz
IHsgMCB9OwotfTsKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNr
bmVzczsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VUaGlja25l
c3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90
aGlja25lc3M7Ci19CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+
PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPGZsb2F0PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7Ci0gICAg
aWYgKCF0aGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNldFN0
cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAgICBmbG9h
dCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0g
eworY2xhc3MgU2V0U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNy
ZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJl
ZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0
ZUNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0
YXRlQ2hhbmdlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVfRVhQT1JU
IFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAgCiAgICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQogCkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0U3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UgbV9z
dGF0ZTsKIH07CiAKQEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09w
dGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNoYW5n
ZUZsYWdzOwogICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYyMCw1NSBA
QCBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMg
PSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNldFN0YXRl
OjpjcmVhdGUoc3RhdGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07CiB9CiAK
LWNsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2FwIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVDYXAp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBT
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGluZUNhcCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNhcCkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAoKTsKLSAg
ICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVD
YXA+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNl
dExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRl
OgogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+PiBsaW5l
Q2FwOwotICAgIGlmICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFzcyBTZXRM
aW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNoQXJy
YXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFy
cmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJheSkK
KyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0KICAgICBj
b25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5OyB9
CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGlu
ZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAg
IERhc2hBcnJheSBtX2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9OwpAQCAt
OTcwLDcgKzY4MSw3IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExp
bmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRhc2hBcnJh
eTsKQEAgLTk4MiwyMTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gU2V0
TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9mZnNldCkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5lRGFzaDo6
Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRhc2hBcnJh
eSwgKmRhc2hPZmZzZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0ZW0g
eworY2xhc3MgU2V0TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUpv
aW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKKyAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVKb2luIGxp
bmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2luKExpbmVK
b2luKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGluZUpv
aW4gbV9saW5lSm9pbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExp
bmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fbGluZUpvaW47Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGluZUpvaW47
Ci0gICAgaWYgKCFsaW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNzIFNldE1p
dGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldE1p
dGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQobWl0ZXJM
aW1pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGltaXQo
bGltaXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRNaXRlckxp
bWl0KCk7Ci0KICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRlckxp
bWl0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1pdGVyTGlt
aXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBtaXRl
ckxpbWl0OwotICAgIGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVyTGltaXQp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0ZXJMaW1p
dDo6Y3JlYXRlKCptaXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVh
clNoYWRvdz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENs
ZWFyU2hhZG93KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclNo
YWRvdygpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBDbGVhclNoYWRvdygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2RlciYpIGNv
bnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJT
aGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBDbGVh
clNoYWRvdzo6Y3JlYXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5nSXRlbT8K
LWNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2luZyBp
dGVtPworY2xhc3MgQ2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBjcmVhdGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOworCisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJlY3Qp
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7CisgICAgY29u
c3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9h
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsK
IAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+
IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQgOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBP
dXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IENsaXBPdXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkNsaXBPdXQoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBDbGlwT3V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxDbGlwT3V0Pj4gQ2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJl
Y3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcE91dDo6
Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIENsaXBPdXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91dFRv
UGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRoJiYgcGF0
aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9QYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAog
ICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+
PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQ
YXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAwLDM3ICs4
MzQsNDcgQEAgdm9pZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0VG9Q
YXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxD
bGlwT3V0VG9QYXRoPiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAo
IXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xpcE91
dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07
CiB9CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBhdGggewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOworCisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2luZFJ1bGUo
d2luZFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0aChw
YXRoLCB3aW5kUnVsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwUGF0aCgp
OworICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAg
ICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisgICAg
eworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7
IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBQ
YXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBQYXRo
PiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgor
ICAgIFBhdGggbV9wYXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBAIC0xMjQy
LDcgKzg4Niw3IEBAIHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4g
Q2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBhdGg+IENs
aXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBw
YXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCwzNSBAQCBPcHRpb25h
bDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
aWYgKCF3aW5kUnVsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBDbGlwUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7eyBXVEZN
b3ZlKCpwYXRoKSwgKndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHMgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYm
IGRyYXdpbmdDb21tYW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3BsYXlMaXN0
JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
CisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9kcmF3aW5n
Q29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNw
YWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7Ci0KICAgICBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAgIGNvbnN0
IERpc3BsYXlMaXN0JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdD
b21tYW5kczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNl
LCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIENvbG9y
U3BhY2UgbV9jb2xvclNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1hbmRzOwpA
QCAtMTI4OCwxMSArOTM3LDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGluYXRpb247
CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2RyYXdpbmdD
b21tYW5kczsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBpbi1tZW1v
cnkgZGlzcGxheSBsaXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5hdGlvbjsK
QEAgLTEzMDQsMjcgKzk1MywxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
Pj4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIGlmICgh
Y29sb3JTcGFjZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFs
PERpc3BsYXlMaXN0PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3aW5nQ29t
bWFuZHM7Ci0gICAgaWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoKmRlc3Rp
bmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMu
CisgICAgRGlzcGxheUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAqZGVzdGlu
YXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9CiAKLWNs
YXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0dseXBocyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxB
bmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIGNv
dW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBS
ZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZl
ckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYg
YWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9k
ZSBzbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d0dseXBocyhmb250LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBsb2NhbEFu
Y2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkRyYXdHbHlwaHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5NzEsMjEgQEAgcHVibGljOgog
ICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25zdCB7
IHJldHVybiBtX2dseXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShEZWNv
ZGVyJik7CiAKLXByaXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwogICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlwaEJ1ZmZl
ckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29uc3Qg
RmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZvaWQg
Y29tcHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZHM7IH0KIAorcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBHbHlwaEJ1
ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4gbV9mb250
OworICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgs
IDEyOD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiBtX2Fk
dmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArOTk2LDcgQEAgcHJp
dmF0ZToKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9mb250OworICAgIGVu
Y29kZXIgPDwgbWFrZVJlZigqbV9mb250KTsKICAgICBlbmNvZGVyIDw8IG1fZ2x5cGhzOwogICAg
IGVuY29kZXIgPDwgbV9hZHZhbmNlczsKICAgICBlbmNvZGVyIDw8IG1fbG9jYWxBbmNob3I7CkBA
IC0xMzY2LDcgKzEwMDQsNyBAQCB2b2lkIERyYXdHbHlwaHM6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERy
YXdHbHlwaHM+PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PERyYXdHbHlwaHM+IERyYXdHbHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPFJlZjxGb250Pj4gZm9udDsKICAgICBkZWNvZGVyID4+IGZvbnQ7CkBAIC0xMzk2
LDMyICsxMDM0LDM1IEBAIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFzbW9vdGhpbmdNb2RlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdHbHlwaHM6OmNyZWF0ZShmb250
LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAqbG9jYWxBbmNo
b3IsICpzbW9vdGhpbmdNb2RlKTsKKyAgICByZXR1cm4ge3sgZm9udC0+Z2V0KCksIFdURk1vdmUo
KmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwgKmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9k
ZSB9fTsKIH0KLQotY2xhc3MgRHJhd0ltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IERyYXdJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3SW1hZ2U+IGNyZWF0ZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpE
cmF3SW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IERyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rl
c3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAg
ICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlv
biwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkRyYXdJbWFnZSgpOwotCiAgICAgY29uc3QgSW1hZ2UmIGltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdJbWFnZT4gZGVj
b2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAK
K3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3
aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBz
aG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9u
OwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE0NDEsNyArMTA4Miw3IEBAIHZvaWQgRHJh
d0ltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1hZ2U6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ltYWdlPiBEcmF3SW1hZ2U6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRs
ZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTQ2MywxNyArMTEwNCwxNCBAQCBP
cHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1h
Z2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zKTsKKyAgICBy
ZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1h
Z2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZEltYWdlIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdUaWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdUaWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOwotICAgIH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZEltYWdlKCk7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgSW1hZ2UmIGlt
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UG9pbnQgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTE0ODIsMTYgKzExMjAsMjUgQEAg
cHVibGljOgogICAgIEZsb2F0U2l6ZSB0aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVNp
emU7IH0KICAgICBGbG9hdFNpemUgc3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2luZzsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJh
d1RpbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIERyYXdUaWxlZEltYWdlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAg
ICAgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRp
b24pCisgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNpemUodGls
ZVNpemUpCisgICAgICAgICwgbV9zcGFjaW5nKHNwYWNpbmcpCisgICAgICAgICwgbV9pbWFnZVBh
aW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICB7CisgICAgfQogCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7
CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBE
cmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhp
cyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0
aW9uOwogICAgIEZsb2F0UG9pbnQgbV9zb3VyY2U7CkBAIC0xNTE0LDcgKzExNjEsNyBAQCB2b2lk
IERyYXdUaWxlZEltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IERyYXdU
aWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZElt
YWdlPiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5k
bGU7CkBAIC0xNTQ2LDMyICsxMTkzLDM5IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+
IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWltYWdl
UGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIERyYXdUaWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0
aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMp
OworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3Vy
Y2UsICp0aWxlU2l6ZSwgKnNwYWNpbmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAot
Y2xhc3MgRHJhd1RpbGVkU2NhbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RHJhd1RpbGVkU2NhbGVkSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBE
cmF3VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2Fs
ZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAg
OiBtX2ltYWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisg
ICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRp
bGVTY2FsZUZhY3RvcikKKyAgICAgICAgLCBtX2hSdWxlKGhSdWxlKQorICAgICAgICAsIG1fdlJ1
bGUodlJ1bGUpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5n
T3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZFNj
YWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOwotCiAgICAgY29uc3QgSW1h
Z2UmIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIEZsb2F0UmVj
dCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogICAgIEZsb2F0UmVjdCBkZXN0
aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAogICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdl
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3
VGlsZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rvciwg
SW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8g
RklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dy
ZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAgICAgRmxvYXRSZWN0IG1f
ZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAtMTU5Niw3ICsxMjUwLDcg
QEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVk
U2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCitPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBp
bWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTYzMSwzMyArMTI4
NSwzNyBAQCBPcHRpb25hbDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZQogICAgIGlmICghaW1hZ2VQYWludGluZ09w
dGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24s
ICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhSdWxlLCB2UnVsZSwgKmltYWdlUGFpbnRpbmdP
cHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9u
LCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBhaW50aW5n
T3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd0ltYWdlQnVmZmVyIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIERyYXdJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxE
cmF3SW1hZ2VCdWZmZXI+IGNyZWF0ZShSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
SW1hZ2VCdWZmZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKwor
ICAgIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorICAg
ICAgICA6IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcikKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAgICAgICAg
LCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsKLQogICAg
IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQogICAgIEZs
b2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0K
ICAgICBJbWFnZVBhaW50aW5nT3B0aW9ucyBvcHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRp
b25zOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxEcmF3SW1hZ2VCdWZmZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVj
dDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ltYWdlQnVm
ZmVyPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvblJlY3Q7CiAgICAgRmxvYXRSZWN0IG1fc3JjUmVjdDsKQEAgLTE2NzQsNyAr
MTMzMiw3IEBAIHZvaWQgRHJhd0ltYWdlQnVmZmVyOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3SW1h
Z2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8RHJhd0ltYWdlQnVmZmVyPiBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcj4gcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIGRlY29kZXIgPj4gcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyOwpAQCAtMTY5NiwzMSArMTM1NCwyOSBAQCBPcHRpb25hbDxSZWY8RHJhd0lt
YWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAg
ICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gRHJhd0ltYWdlQnVmZmVyOjpjcmVhdGUoKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwg
KmRlc3RpbmF0aW9uLCAqc291cmNlLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICpyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMgfX07
CiB9CiAKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBEcmF3TmF0aXZlSW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd05hdGl2ZUlt
YWdlPiBjcmVhdGUoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7Ci0KLSAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29u
c3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9Ci0gICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBz
ZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4gZGVjb2RlKERl
Y29kZXImKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3JjUmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNp
emUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRp
b25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxE
cmF3TmF0aXZlSW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgTmF0aXZl
SW1hZ2VQdHIgbV9pbWFnZTsKICAgICBGbG9hdFNpemUgbV9pbWFnZVNpemU7CiAgICAgRmxvYXRS
ZWN0IG1fZGVzdGluYXRpb25SZWN0OwpAQCAtMTczOSw3ICsxMzk1LDcgQEAgdm9pZCBEcmF3TmF0
aXZlSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJ
bWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+
IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8TmF0aXZlSW1hZ2VQdHI+IGltYWdlOwogICAgIGRlY29kZXIgPj4gaW1hZ2U7CkBAIC0xNzY2
LDE3ICsxNDIyLDE2IEBAIE9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBEcmF3TmF0aXZl
SW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3TmF0aXZlSW1hZ2U6OmNy
ZWF0ZSgqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0
aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVj
dCwgKnNyY1JlY3QsICpvcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3UGF0dGVybiA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0dGVybiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7
Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd1BhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXR0ZXJuKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9CkBAIC0x
Nzg1LDE2ICsxNDQwLDE1IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9waGFzZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdHRlcm4+IGRlY29k
ZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7
IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBw
cm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEFmZmluZVRy
YW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CkBA
IC0xODE5LDcgKzE0NzMsNyBAQCB2b2lkIERyYXdQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxE
cmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlv
bmFsPERyYXdQYXR0ZXJuPiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4g
aW1hZ2VIYW5kbGU7CkBAIC0xODU2LDE4MiArMTUxMCwxMDAgQEAgT3B0aW9uYWw8UmVmPERyYXdQ
YXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICgh
b3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3
UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnRpbGVS
ZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3BhY2luZywgKm9wdGlvbnMpOworICAg
IHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICp0aWxlUmVjdCwg
KnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcsICpvcHRpb25zIH19OwogfQogCi0v
LyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5
ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMuCi1jbGFzcyBCZWdpblRyYW5zcGFyZW5j
eUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3Jl
YXRlKGZsb2F0IG9wYWNpdHkpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJhd2luZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUg
b2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4K
KworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBt
X29wYWNpdHkob3BhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQogICAgIGZsb2F0IG9wYWNp
dHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQog
Citwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9vcGFjaXR5OwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBCZWdp
blRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRp
b25hbDxmbG9hdD4gb3BhY2l0eTsKLSAgICBkZWNvZGVyID4+IG9wYWNpdHk7Ci0gICAgaWYgKCFv
cGFjaXR5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0eSk7Ci19Ci0KLWNsYXNzIEVuZFRyYW5z
cGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEVuZFRyYW5zcGFyZW5j
eUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBj
cmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJl
bmN5TGF5ZXIpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkVuZFRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVuZFRy
YW5zcGFyZW5jeUxheWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBFbmRUcmFuc3BhcmVuY3lMYXllcigpOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVy
Pj4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4g
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBEcmF3UmVjdCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RHJhd1JlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwor
CisgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAg
ICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJU
aGlja25lc3MpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5EcmF3UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KICAgICBmbG9hdCBib3JkZXJUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX2Jv
cmRlclRoaWNrbmVzczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8RHJhd1JlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBmbG9h
dCBtX2JvcmRlclRoaWNrbmVzczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IERyYXdSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fYm9yZGVyVGhpY2tuZXNzOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gRHJhd1JlY3Q6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsK
LSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IGJvcmRlclRoaWNrbmVzczsKLSAgICBk
ZWNvZGVyID4+IGJvcmRlclRoaWNrbmVzczsKLSAgICBpZiAoIWJvcmRlclRoaWNrbmVzcykKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3UmVjdDo6Y3JlYXRl
KCpyZWN0LCAqYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkRyYXdMaW5lOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikKKyAg
ICAgICAgOiBtX3BvaW50MShwb2ludDEpCisgICAgICAgICwgbV9wb2ludDIocG9pbnQyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIp
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZSgpOwotCiAg
ICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJldHVybiBtX3BvaW50MTsgfQogICAgIEZs
b2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDI7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9wb2ludDE7CiAgICAgRmxvYXRQb2ludCBt
X3BvaW50MjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdMaW5lOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQx
OwotICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3TGluZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQxOwotICAgIGRlY29kZXIgPj4g
cG9pbnQxOwotICAgIGlmICghcG9pbnQxKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQyOwotICAgIGRlY29kZXIgPj4gcG9pbnQy
OwotICAgIGlmICghcG9pbnQyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIERyYXdMaW5lOjpjcmVhdGUoKnBvaW50MSwgKnBvaW50Mik7Ci19Ci0KLWNsYXNzIERy
YXdMaW5lc0ZvclRleHQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmVzRm9y
VGV4dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUo
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKLSAgICB9CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9h
dFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQgc2V0Qmxv
Y2tMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2Nh
dGlvbiA9IGJsb2NrTG9jYXRpb247IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQyLDE2ICsxNjE0
LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3By
aW50aW5nOyB9CiAgICAgYm9vbCBkb3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91Ymxl
TGluZXM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7CiAKK3By
aXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRTaXplIG1f
bG9jYWxBbmNob3I7CiAgICAgRGFzaEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3Miw3ICsxNjQzLDcg
QEAgdm9pZCBEcmF3TGluZXNGb3JUZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
IH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JU
ZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25h
bDxEcmF3TGluZXNGb3JUZXh0PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwogICAgIGRl
Y29kZXIgPj4gYmxvY2tMb2NhdGlvbjsKQEAgLTIxMDQsMTE5ICsxNjc1LDgzIEBAIE9wdGlvbmFs
PFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFkb3VibGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2NrTG9jYXRp
b24sICpsb2NhbEFuY2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91Ymxl
TGluZXMpOworICAgIHJldHVybiB7eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhp
Y2tuZXNzLCAqd2lkdGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAotY2xhc3Mg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5
bGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIocmVjdCwgc3R5bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5E
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKKworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
KTsKKyAgICBGbG9hdFJlY3QgbV9yZWN0OworICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1f
c3R5bGU7Cit9OworCitjbGFzcyBEcmF3RWxsaXBzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgeworICAgIH0K
KworICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9h
dFJlY3QgbV9yZWN0OwotICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxlIG1fc3R5bGU7CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVj
dDsKLSAgICBlbmNvZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+IERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGU+IHN0eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7Ci0gICAgaWYgKCFzdHlsZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19Ci0KLWNsYXNzIERyYXdFbGxp
cHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1Bh
dGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgfkRyYXdFbGxpcHNlKCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQotCi0gICAgRmxvYXRSZWN0IG1fcmVj
dDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdFbGxpcHNlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RWxsaXBzZT4+IERy
YXdFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBEcmF3RWxsaXBzZTo6Y3JlYXRl
KCpyZWN0KTsKLX0KLQotY2xhc3MgRHJhd1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQor
ICAgIERyYXdQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgp
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdQYXRoKCk7Ci0KICAgICBj
b25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdGgoY29uc3Qg
UGF0aCYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3
UGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3Qo
KTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5n
UmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBt
X3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjIyNiwyNCArMTc2MSwz
NyBAQCB2b2lkIERyYXdQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IERyYXdQYXRo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXRoPiBEcmF3UGF0aDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAg
ICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVy
biB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJh
d0ZvY3VzUmluZ1BhdGgoUGF0aCYmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIENv
bG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1f
d2lkdGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29s
b3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNS
aW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgRHJhd0ZvY3VzUmlu
Z1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3Ig
Y29sb3IpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAg
ICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aDsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMjI1
MSwxNiArMTc5OSwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0
aD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3
Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBt
X3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIGZsb2F0IG1fd2lkdGg7CiAg
ICAgZmxvYXQgbV9vZmZzZXQ7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTIyNzYsNyArMTgyMyw3
IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1Jp
bmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8RHJhd0ZvY3VzUmluZ1BhdGg+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4g
cGF0aDsKQEAgLTIyOTgsMzMgKzE4NDUsMzEgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQ
YXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlm
ICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJh
d0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSgqcGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOwor
ICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07
CiB9CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0Zv
Y3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3
Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpOwogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7
IHJldHVybiBtX3JlY3RzOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dp
ZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAg
ICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5n
UmVjdHM+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1Jp
bmdSZWN0cz4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBWZWN0b3I8RmxvYXRS
ZWN0PiBtX3JlY3RzOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CkBA
IC0yMzQxLDcgKzE4ODYsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gRHJhd0ZvY3VzUmlu
Z1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxWZWN0b3I8
RmxvYXRSZWN0Pj4gcmVjdHM7CiAgICAgZGVjb2RlciA+PiByZWN0czsKQEAgLTIzNjMsNzEgKzE5
MDgsNTUgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdS
ZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmNy
ZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJl
Y3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3QgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZp
bGxSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmls
bFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxS
ZWN0Pj4gRmlsbFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0OjpjcmVh
dGUoKnJlY3QpOwotfQotCi0vLyBGSVhNRTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJl
Y3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rmls
bFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2Nv
bG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RX
aXRoQ29sb3IocmVjdCwgY29sb3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5GaWxsUmVjdFdpdGhDb2xvcigpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgog
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKIH07CkBAIC0yNDQwLDcg
KzE5NjksNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxs
UmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAg
IGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0NTIsMjkgKzE5ODEsMjggQEAgT3B0aW9uYWw8UmVmPEZp
bGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gRmlsbFJlY3RXaXRoQ29sb3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsKKyAgICBy
ZXR1cm4ge3sgKnJlY3QsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGll
bnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7
Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aEdyYWRp
ZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKTsKIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3Jh
ZGllbnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3LDcgKzIw
MTUsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxs
UmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFk
aWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjYsMzcgQEAgT3B0
aW9uYWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUo
KnJlY3QsIGdyYWRpZW50LT5nZXQoKSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+
Z2V0KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
ICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAg
ICwgbV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3Is
IG9wLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5G
aWxsQ29tcG9zaXRlZFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9vcDsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVy
biBtX2JsZW5kTW9kZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21wb3NpdGVk
UmVjdD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0
OwogICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKQEAgLTI1
NDAsNyArMjA3Myw3IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk1LDM1IEBAIE9wdGlv
bmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKCpyZWN0
LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3Is
ICpvcCwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxGaWxsUm91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwg
bV9jb2xvcihjb2xvcikKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3Is
IGJsZW5kTW9kZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxS
b3VuZGVkUmVjdCgpOwotCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+
IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9k
ZSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdC5yZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1f
cmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKQEAg
LTI2MDEsNyArMjEzOCw3IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsUm91bmRlZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+IHJlY3Q7
CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjYxOCwzMSArMjE1NSwzNSBAQCBPcHRpb25hbDxS
ZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqYmxl
bmRNb2RlKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKIH0K
IAotY2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJl
Y3Qocm91bmRlZEhvbGVSZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9
CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERl
Y29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIEZsb2F0
Um91bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTI2
NTcsNyArMjE5OCw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAt
MjY3NCw3NCArMjIxNSw2MyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
PiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYgKCFjb2xv
cikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29sb3IpOwor
ICAgIHJldHVybiB7eyAqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19OwogfQogCiAj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZpbGxJbmxpbmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBh
dGhEYXRhKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RmlsbElubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgRmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQor
ICAgICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGaWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBj
b25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQ
YXRoRGF0YSYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0
KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGlu
Z1JlY3QoKTsgfQogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRo
Pj4gRmlsbElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwot
ICAgIGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gRmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAj
ZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYgcGF0aCkK
KyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5GaWxsUGF0aCgpOworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisg
ICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+IGRlY29k
ZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBhdGgoY29u
c3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAg
ICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjc1MSw5MCArMjI4MSw2NSBAQCB2b2lkIEZpbGxQ
YXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBh
dGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIEZpbGxQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpw
YXRoKSB9fTsKIH0KIAotY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRmlsbEVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RmlsbEVsbGlwc2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVy
ID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBQdXRJ
bWFnZURhdGEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRhIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBkZXN0Rm9ybWF0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVh
dGUoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92ZShpbWFn
ZURhdGEpLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflB1dEltYWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VE
YXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0K
LSAgICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9
CisgICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7
IH0KICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAg
ICBJbnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQogICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dEZvcm1hdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8UHV0SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JU
IFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1h
Z2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4ge3sgbV9kZXN0UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0KIAotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gRmxvYXRSZWN0KG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUo
RGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIEludFBv
aW50IG1fZGVzdFBvaW50OwotICAgIFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
bV9pbnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsK
IH07CkBAIC0yODQzLDE0ICsyMzQ4LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lk
IFB1dEltYWdlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5j
b2RlciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7CisgICAg
ZW5jb2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBtX3NyY1Jl
Y3Q7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZv
cm1hdDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQdXRJbWFn
ZURhdGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
UHV0SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9w
dGlvbmFsPFJlZjxJbWFnZURhdGE+PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjM4MywxMDkg
QEAgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZvcm1hdCwg
V1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0KTsK
KyAgICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVj
dCwgKmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJhbWVGb3JN
ZWRpYSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5QYWludEZyYW1lRm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9
CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X2lkZW50aWZpZXI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNy
ZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24p
OwotCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbik7Ci0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRp
ZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0
aW5hdGlvbiB9OyB9CiAKK3ByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIG1faWRl
bnRpZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAgZW5jb2Rl
ciA8PCBtX2Rlc3RpbmF0aW9uOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBp
ZGVudGlmaWVyOwotICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlkZW50aWZp
ZXIpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBQ
YWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9uKTsKLX0K
LQotY2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VS
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflN0cm9rZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9saW5lV2lkdGg7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7
CiAgICAgZmxvYXQgbV9saW5lV2lkdGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBTdHJva2VSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJva2VSZWN0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJl
Y3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0gICAgZGVj
b2RlciA+PiBsaW5lV2lkdGg7Ci0gICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGlu
ZVdpZHRoKTsKLX0KLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJv
a2VJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlubGluZVBh
dGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRlKGNv
bnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJ
bmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0
aERhdGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxp
bmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1f
cGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRh
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERh
dGEgbV9wYXRoRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9r
ZUlubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAg
IGRlY29kZXIgPj4gcGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUoV1RG
TW92ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogCi1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9r
ZVBhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0
IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTdHJva2VQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CisKKyAgICBTdHJva2VQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZN
b3ZlKHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0
aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUGF0
aCgpOworICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgo
cGF0aCkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8U3Ryb2tlUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7
CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQYXRoJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZh
dGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAt
MzA1MCw3MjEgKzI0OTUsMTE1IEBAIHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
U3Ryb2tlUGF0aD4+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9u
YWw8U3Ryb2tlUGF0aD4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFw
YXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0cm9rZVBh
dGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQog
Ci1jbGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9r
ZUVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB+U3Ryb2tlRWxsaXBzZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBz
ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAg
ICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0K
LWNsYXNzIENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVhclJlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVj
dCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVjdCgpOwor
ICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVj
b2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBDbGVhclJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNpZiBVU0Uo
Q0cpCi1jbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0
ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRlcm4oKTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9rZVBhdHRl
cm4+PiBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4g
QXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxsUGF0dGVy
biA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwotCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlGaWxsUGF0
dGVybj4+IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4g
QXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3Jl
YXRlKGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZUZhY3RvcikKKyAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihzY2FsZUZhY3RvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoKTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgZmxvYXQgbV9zY2FsZUZhY3RvcjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2FsZUZhY3Rv
ciB7IDEgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgbV9zY2FsZUZhY3RvcjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFj
dG9yOwotICAgIGRlY29kZXIgPj4gc2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURldmljZVNj
YWxlRmFjdG9yOjpjcmVhdGUoKnNjYWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fdHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTYXZlPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8VHJhbnNsYXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlJvdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U2NhbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0Q1RNOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNl
dExpbmVDYXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZURhc2g6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENs
ZWFyU2hhZG93PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXA6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PENsaXBPdXQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0VG9Q
YXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRo
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxE
cmF3SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
QnVmZmVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PERyYXdSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdMaW5lOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RHJhd1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJh
d0ZvY3VzUmluZ1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdG
b2N1c1JpbmdSZWN0cz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
RmlsbElubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUGF0
aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBz
ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxTdHJva2VSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFN0cm9rZUVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFy
ZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJhbnNwYXJl
bmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxBcHBseVN0cm9rZVBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxB
cHBseUZpbGxQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJdGVtPj4g
SXRlbTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRlbVR5cGU+
IGl0ZW1UeXBlOwotICAgIGRlY29kZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVtVHlwZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1UeXBlKSB7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNhdmU6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpSZXN0b3JlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5z
bGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gU2NhbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRD
VE06OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENvbmNhdGVu
YXRlQ1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9y
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVTdHJva2VD
b2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNl
dFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
U2V0U3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGlu
ZUNhcDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURh
c2g6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVKb2lu
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1pdGVyTGlt
aXQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0Ogot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBDbGlwUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlw
aHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2VCdWZm
ZXI6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TmF0
aXZlSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQ
YXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UmVjdDo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TGluZXNGb3JUZXh0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBEcmF3RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRHJhd1BhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50Ojpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbENvbXBv
c2l0ZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IEZpbGxFbGxpcHNlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
UHV0SW1hZ2VEYXRhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gUGFpbnRGcmFtZUZvck1lZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFN0cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5saW5lUGF0
aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9r
ZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tl
RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyUmVj
dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBh
dHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBw
bHlGaWxsUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
I2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotfQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhhbmRsZSk7
CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVN
KFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyBy
ZXR1cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2lu
Z0l0ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0p
IHsgcmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
VG9WYWx1ZVR5cGVOYW1lOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNjYWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dENUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0
ZUNUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVG
aWxsR3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0
SW5saW5lRmlsbENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFNldElubGluZVN0cm9rZUNvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldFN0cm9rZVRoaWNrbmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTZXRMaW5lQ2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFNldExpbmVEYXNoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dExpbmVKb2luKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1p
dGVyTGltaXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEZpbGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUHV0SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGlu
ZVBhdGgpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
dHJva2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9r
ZUVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJS
ZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5k
VHJhbnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQogbmFt
ZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKaW5kZXggYmY1YjgzYjIyYzNmNGM3MjU4MWU2OGI5YTUyZDc3MzAyZDI4Mjk0ZS4uOTBl
YmRlNTVmODk3OTZhODExODc5ZGIwNzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRlcjo6flJl
Y29yZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1h
Z2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpCiB7Ci0gICAgYXBwZW5kSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhOjpjcmVhdGUoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBk
ZXN0Rm9ybWF0KSk7CisgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdl
RGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wg
Y29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBj
aGFuZ2VGbGFncykKQEAgLTg3LDIxICs4NywyMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJ
bmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQog
dm9pZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBjaGFuZ2VGbGFncykKIHsKICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hh
bmdlcyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBl
bmRJdGVtKFNldFN0YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncykpOwor
ICAgICAgICBhcHBlbmQ8U2V0U3RhdGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9z
dGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVT
dHJva2VDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOwogCiAg
ICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ry
b2tlVGhpY2tuZXNzOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwor
ICAgICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJ
dGVtKFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3Iu
YXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihjaGFuZ2Vz
Lm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAg
ICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUo
KmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGlu
ZUZpbGxHcmFkaWVudD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQogCiB2b2lk
IFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQpAQCAtMTM5LDI3
ICsxMzksMjcgQEAgdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGEKIAogdm9pZCBSZWNvcmRlcjo6Y2xl
YXJTaGFkb3coKQogewotICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKKyAg
ICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3JlYXRlKGxp
bmVDYXApKTsKKyAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNo
T2Zmc2V0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXks
IGRhc2hPZmZzZXQpKTsKKyAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGRhc2hBcnJheSwgZGFzaE9m
ZnNldCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2lu
KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworICAg
IGFwcGVuZDxTZXRMaW5lSm9pbj4obGluZUpvaW4pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRNaXRlckxp
bWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOworICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0PihtaXRl
ckxpbWl0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKQEAgLTE2OSwxOSArMTY5LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmRy
YXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCB1bnNpCiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3
SW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7
CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdS
ZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNp
emUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVu
ZDxEcmF3VGlsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBz
cGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZElt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6
VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRp
b25zKSk7CisgICAgYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpbWFnZSwgZGVzdGluYXRp
b24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKQEAg
LTE5MCwyMyArMTkwLDIzIEBAIGJvb2wgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFtX2Rl
bGVnYXRlIHx8ICFtX2RlbGVnYXRlLT5sb2NrUmVtb3RlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KERyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3
SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd05hdGl2ZUltYWdlOjpjcmVh
dGUoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBh
cHBlbmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXR0
ZXJuOjpjcmVhdGUoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdl
LCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgYXBwZW5kSXRlbShT
YXZlOjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPFNhdmU+KCk7CiAgICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKIH0KIApAQCAtMjIxLDI1
ICsyMjEsMjUgQEAgdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgLy8gSGF2ZSB0byBhdm9p
ZCBlbGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29u
dGFpbnMgZHJhd2luZyBpdGVtcy4KICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2lu
ZyB8PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOwogCi0gICAgYXBwZW5kSXRlbShSZXN0b3JlOjpjcmVh
dGUoKSk7CisgICAgYXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4
LCB5KTsKLSAgICBhcHBlbmRJdGVtKFRyYW5zbGF0ZTo6Y3JlYXRlKHgsIHkpKTsKKyAgICBhcHBl
bmQ8VHJhbnNsYXRlPih4LCB5KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFu
cyk7Ci0gICAgYXBwZW5kSXRlbShSb3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykpOworICAg
IGFwcGVuZDxSb3RhdGU+KGFuZ2xlSW5SYWRpYW5zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNp
emUpOwotICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7CisgICAgYXBwZW5kPFNj
YWxlPihzaXplKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgdm9pZCBSZWNvcmRlcjo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICByZXR1
cm47CiAKICAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBl
bmRJdGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPENv
bmNhdGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRlKCkuc2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgYXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFuc2Zvcm0p
KTsKKyAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0g
UmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKQEAg
LTI2NSwxNTggKzI2NSwxNTggQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7CisgICAg
YXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRUcmFuc3Bh
cmVuY3lMYXllcjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4o
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChE
cmF3UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVuZDxEcmF3
UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7
Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwg
cG9pbnQyKSk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGlu
ZXNGb3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8RHJhd0xp
bmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBlbmQ8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8
RHJhd0VsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdGg6OmNy
ZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KSk7CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUmVj
dHM6OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJh
d0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8
RmlsbFJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsKKyAgICBh
cHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7
Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3Jl
YXRlKHJlY3QsIGdyYWRpZW50KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50Pihy
ZWN0LCBncmFkaWVudCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxD
b21wb3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CisgICAg
YXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwg
Y29sb3IsIGJsZW5kTW9kZSkpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNv
bG9yLCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIGNvbG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBp
ZiAocGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAg
IGFwcGVuZDxGaWxsSW5saW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUGF0
aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpOwor
ICAgIGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5l
RGF0YSgpKSk7CisgICAgICAgIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlubGluZURh
dGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPFN0cm9r
ZVBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUVs
bGlwc2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpOwor
ICAgIGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9pZCBSZWNv
cmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5U3Ryb2tl
UGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZEl0ZW0o
QXBwbHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJu
PigpOwogfQogI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOwot
ICAgIGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcD4ocmVj
dCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xp
cE91dD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAg
YXBwZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJyZW50U3Rh
dGUoKS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAg
YXBwZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAgYXBwZW5k
PENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6OmNsaXBC
b3VuZHMoKQpAQCAtNDQ0LDE5ICs0NDQsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY28KIAog
ICAgIGF1dG8gcmVjb3JkaW5nQ29udGV4dCA9IG1ha2VVbmlxdWU8RHJhd2luZ0NvbnRleHQ+KGRl
c3RpbmF0aW9uLnNpemUoKSwgaW5pdGlhbENUTSk7CiAgICAgZHJhd2luZ0Z1bmN0aW9uKHJlY29y
ZGluZ0NvbnRleHQtPmNvbnRleHQoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwVG9EcmF3aW5nQ29t
bWFuZHM6OmNyZWF0ZShkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+
dGFrZURpc3BsYXlMaXN0KCkpKTsKKyAgICBhcHBlbmQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihk
ZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0
KCkpOwogfQogCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBhcHBlbmRJdGVt
KFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKHBsYXllciwgZGVzdGluYXRpb24pKTsKKyAgICBh
cHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cikKIHsKICAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxs
IGludmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KICAgICAvLyBBc3NlcnQgdGhh
dCBpdCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIGFwcGVuZEl0ZW0oQXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcjo6Y3JlYXRlKGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgYXBwZW5kPEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I+KGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogRmxvYXRSZWN0IFJl
Y29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhp
Y3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCkBAIC00NjUsMzAgKzQ2NSw2IEBAIEZsb2F0UmVjdCBS
ZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBo
aWNzQ29udGV4dDo6CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmIGl0ZW0pCi17Ci0gICAgRHJh
d2luZ0l0ZW0mIG5ld0l0ZW0gPSBpdGVtLmdldCgpOwotICAgIGFwcGVuZEl0ZW0oV1RGTW92ZShp
dGVtKSk7Ci0gICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKLX0KLQotdm9pZCBSZWNvcmRl
cjo6YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVtKQotewotICAgIEl0ZW0mIG5ld0l0ZW0gPSBp
dGVtLmdldCgpOwotICAgIGF1dG8gdHlwZSA9IG5ld0l0ZW0udHlwZSgpOwotICAgIHdpbGxBcHBl
bmRJdGVtT2ZUeXBlKHR5cGUpOwotICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1vdmUoaXRl
bSkpOwotICAgIGRpZEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6
OnVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0
KCkpKQotICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMocmVjdC52
YWx1ZSgpKSk7Ci0gICAgZWxzZSBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5n
bG9iYWxCb3VuZHMoKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQocmVjdC52YWx1ZSgpKTsKLX0K
LQogLy8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQogc3RhdGljIGlubGluZSBmbG9hdCBz
aGFkb3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogewpAQCAtNTA4LDcgKzQ4NCw3
IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkgY29uc3QKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29sb3Igc2hh
ZG93Q29sb3I7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFk
b3dFeHRlbnQ9IGJvdW5kczsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5k
czsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hh
ZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CiAg
ICAgICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmgKaW5kZXggOTJjMDUxM2E3ZjljNmJjYTUyNTA0NDhmMzA4M2ZkZTFjZDY2
ZDg5NC4uZmZlMTU5MWJhZmQ0OWRiMzNlOTQzZTk5YzFiYTE0Y2RiYzRjNjAyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEltcGwuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxl
LgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgpAQCAtNDgsOCArNDksNiBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdp
bmdJdGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
ZWNvcmRlcik7CkBAIC0xNDgsMTUgKzE0NywzNCBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJdGVtPiYm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgYXBw
ZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUo
VDo6aXRlbVR5cGUpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6OmZvcndh
cmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1U
eXBlKTsKKworICAgICAgICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRl
bUV4dGVudHMoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVtID0g
VChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBpZiAoYXV0byByZWN0ID0g
aXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBtX2Rpc3Bs
YXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkp
OworICAgICAgICBlbHNlIGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQorICAg
ICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQo
V1RGOjpudWxsb3B0KTsKKyAgICB9CisKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0
ZW1UeXBlKTsKICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwotICAgIHZv
aWQgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYpOwogCiAgICAg
dm9pZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICBGbG9h
dFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAg
IHZvaWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBj
bGlwQm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5j
cHAKaW5kZXggMTJiNWY2MmNjNDI0NTIxNDJkOGI5OGUyZGVmMjU0ZWUxMGQ3ZjE4Mi4uZDZiMWE5
MjI1NjYyNTBjNTIxY2Q2OTFkMzg5YjFkNTdjNGE0OGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTIsMjYgKzUyLDI2IEBAIHN0ZDo6dW5pcXVlX3B0
cjxEaXNwbGF5TGlzdD4gUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBib29sCiAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCiAgICAgICAgIHJl
cGxheUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0PigpOwogCi0gICAgYXV0byYgaXRlbXMg
PSBtX2Rpc3BsYXlMaXN0Lmxpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1tpXS5nZXQoKTsKLQot
ICAgICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPERyYXdpbmdJdGVtPihpdGVt
KSkgewotICAgICAgICAgICAgY29uc3QgRHJhd2luZ0l0ZW0mIGRyYXdpbmdJdGVtID0gZG93bmNh
c3Q8RHJhd2luZ0l0ZW0+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKGRyYXdpbmdJdGVtLmV4dGVu
dEtub3duKCkgJiYgIWRyYXdpbmdJdGVtLmV4dGVudCgpLmludGVyc2VjdHMoaW5pdGlhbENsaXAp
KSB7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFt
IDw8ICJza2lwcGluZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQorI2lmICFMT0dfRElTQUJMRUQKKyAgICBzaXplX3QgaSA9
IDA7CisjZW5kaWYKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBtX2Rpc3BsYXlMaXN0
KSB7CisgICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgZXh0ZW50ICYmICFleHRl
bnQtPmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSsrIDw8ICIgIiA8PCBp
dGVtKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJhcHBseWluZyAiIDw8IGkgPDwgIiAi
IDw8IGl0ZW0pOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0g
PDwgImFwcGx5aW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgaWYgKCFtX2Rl
bGVnYXRlIHx8ICFtX2RlbGVnYXRlLT5hcHBseShpdGVtLCBtX2NvbnRleHQpKQogICAgICAgICAg
ICAgaXRlbS5hcHBseShtX2NvbnRleHQpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1Jl
cGxheUxpc3QpKQotICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5kSXRlbShjb25zdF9jYXN0
PEl0ZW0mPihpdGVtKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKSB7
CisgICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmQoaXRlbSk7CisgICAgICAgICAgICBpZiAo
aXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICAgICAgcmVwbGF5TGlzdC0+YWRkRHJh
d2luZ0l0ZW1FeHRlbnQoV1RGTW92ZShleHRlbnQpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIHJldHVybiByZXBsYXlMaXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuaAppbmRleCA0MGNkMGZmMGQ0MTY4MGNmYzczZTUwNGRlY2ZjM2RlZjg3NzUzMjMz
Li4wNDVjYWNjZThhMDFjOGQ1ZGNiNjU4YzQwZDYzZTlhMzU4OWI1YjY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAg
IGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkRlbGVnYXRl
KCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVtJiwgR3JhcGhpY3NDb250ZXh0
JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5k
bGUsIEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgfTsKICAgICAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVJbWFnZUJ1ZmZlci5oCmluZGV4IGIyNDc4MGNkN2IwNzQ0M2IxNTUwMjZjZjZiMTk4MWM4MjIy
YmQ1MGMuLjc4ZTI2NWRiZjU0ZTliZDI0YjlkNDFiNzM5MDA5NzAyMTQ5MWZhOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
ci5oCkBAIC0yNywxNCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2lu
Y2x1ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgewor
Y2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6
OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNv
bmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUlt
YWdlQnVmZmVyOjpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpt
X2JhY2tlbmQ7CkBAIC03MCwxMCArNzMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0K
IAotICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKKyAgICBib29sIGFwcGx5KFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5cGUoKSA9
PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSkgewotICAgICAg
ICAgICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQdXRJbWFnZURhdGEmPihpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkgeworICAgICAgICAgICAgYXV0byYgcHV0
SW1hZ2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURh
dGE+KCk7CiAgICAgICAgICAgICBwdXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5pbnB1dEZv
cm1hdCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJdGVtLnNy
Y1JlY3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5k
ZXN0Rm9ybWF0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTg0
LDYgKzg3LDExNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAorICAgIE9wdGlv
bmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4g
ZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXI6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
SW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNz
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxs
aXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNF
RF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsK
KyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1cm4g
e3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZGYwZWQ0N2U1
YmVmZDY3OTg0NmE0YzdmNTA2MjAxMzY2NDYwYjY4MC4uYzUwMDQ2NDE2MWYwM2VlZGQxODU2MjI4
ZTEwOGU4OTRhMzA4ODQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTAgKzcy
LDEwIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVz
b3VyY2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVt
KERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1h
Z2VCdWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBE
aXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0uaXM8RGlz
cGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3SXRlbSA9
IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJh
d0l0ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEyIEBAIGJv
b2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxh
eUxpc3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVt
JiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVt
LmlzPERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlM
aXN0OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9
IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBw
cm9jZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5ICsxMzksNDUgQEAgdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxk
Rmx1c2hDb250ZXh0IGZsdXNoQ29udGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpKQotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNw
bGF5TGlzdCk7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlz
dChbJl0gKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlm
aWVyKSAtPiB1aW50OF90KiB7CisgICAgICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IG1fc2hh
cmVkSXRlbUJ1ZmZlcnMudGFrZShpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0pOworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAg
ICAvLyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9j
ZXNzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpOworICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQor
ICAgICAgICBkaXNwbGF5TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChzdGF0aWNfY2FzdDxBY2Nl
bGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyKj4oaW1hZ2VCdWZmZXIpKTsKKyAgICBlbHNlCisgICAg
ICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVyQ2xpZW50KHN0YXRpY19jYXN0PFVuYWNjZWxl
cmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcio+KGltYWdlQnVmZmVyKSk7CisKKyAgICBpbWFnZUJ1ZmZl
ci0+Zmx1c2hEaXNwbGF5TGlzdCgqZGlzcGxheUxpc3QpOworCisgICAgaWYgKGZsdXNoQ29udGV4
dCA9PSBTaG91bGRGbHVzaENvbnRleHQ6OlllcykKKyAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNo
Q29udGV4dCgpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxh
eUxpc3RBbmRDb21taXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlz
dCwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90
ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlz
dCk7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgZmx1c2hE
aXNwbGF5TGlzdFdhc0NvbW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcik7Ci0gICAgfQorICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dDo6Tm8pOworfQorCit2b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3Qg
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQoreworICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKTsKKyAgICBm
bHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3Jj
UmVjdCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTE2OCw2ICsxOTMsMTIgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHIKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNl
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6ZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5k
bGUpCit7CisgICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFu
ZGxlLmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCisgICAgICAg
IG1fc2hhcmVkSXRlbUJ1ZmZlcnMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc2hhcmVkTWVtb3J5
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggMjg1ZTJmNzRiNGQ0ZmQ2ZTZhOGM1ZTkx
MDI1YTFjOTI2ZjVmZmIxNS4uMzA1MjA2YjVmYmYwYzFhYTExYjNlMTAyOTlmM2U1ZGZlODBhZDRl
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiTWVz
c2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVt
cy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYzLDggKzY1LDggQEAgcHVibGlj
OgogICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoKSBjb25zdDsKIAogICAgIC8vIFJlbmRlcmluZyBvcGVyYXRpb25zLgotICAgIGJvb2wgYXBw
bHlSZXNvdXJjZUl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGFwcGx5TWVkaWFJdGVtKGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAg
Ym9vbCBhcHBseVJlc291cmNlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7
CiAKICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNr
ZW5kV2FzQ3JlYXRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkBAIC03Myw2ICs3NSw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91
bGRGbHVzaENvbnRleHQgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5
TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0KTsKKwogICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTgzLDE0ICs4OCwxNiBAQCBwcml2YXRlOgogCiAgICAg
Ly8gTWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0QW5kQ29t
bWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIERpc3BsYXlMaXN0
Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwor
ICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBmbHVzaERp
c3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiwgRGlzcGxh
eUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7CiAgICAgdm9pZCBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VE
YXRhUmVmZXJlbmNlJiYpPiYmKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkQ3JlYXRlU2hh
cmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBj
b25zdCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNo
ZSBtX3JlbW90ZVJlc291cmNlQ2FjaGU7CiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKKyAgICBIYXNoTWFwPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1l
bW9yeT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggYTg4ZTBmYjYyNjI0
OTE4OWQ4ZjViM2EzOWI5YjY2NDI4NjIyY2FkMy4uYmI5MTVhYjE5NWFkMzc3NzIwYjY5MTUwYTNi
ZWMwYzk5M2M1YWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4K
QEAgLTIzLDExICsyMywxMiBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMg
LT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIHsKLSAgICB2b2lkIENyZWF0
ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxp
c3QoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQotICAgIHZvaWQgRmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIENyZWF0ZUltYWdlQnVmZmVyKFdl
YkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29s
b3JTcGFjZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcikKKyAgICBGbHVzaERpc3BsYXlMaXN0KFdlYktpdDo6U2hhcmVkRGlz
cGxheUxpc3RIYW5kbGUgZGlzcGxheUxpc3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlz
dEFuZENvbW1pdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBX
ZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKICAgICBHZXRJbWFnZURhdGEoZW51bTp1aW50OF90IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
IC0+IChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSBpbWFnZURhdGEpIFN5bmNocm9ub3VzCi0gICAg
dm9pZCBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBEaWRDcmVhdGVTaGFyZWRJ
dGVtRGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRp
ZmllciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpCisgICAgUmVsZWFz
ZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCAzYjgyMzZk
YTgzZDdjNjYyMzkzYzE0NzdmNGY5YWUwNTc3MzUzNjc5Li4yODYxNTVhOTE3ZTRiMzE3NTBiY2U2
MGQyODY3OWJiMGFhNWI3YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKQEAgLTIwOCw2ICsyMDgsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2Fy
ZF9kZWNsYXJlZCgpOgogICAgICAgICAnU3RyaW5nJywKICAgICAgICAgJ1dlYkNvcmU6OkNvbG9y
U3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RGljdGF0aW9uQ29udGV4dCcsCisgICAgICAgICdX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVy
JywKQEAgLTU4Niw2ICs1ODcsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAg
ICAgJ0pTQzo6TWVzc2FnZVNvdXJjZSc6IFsnPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5o
PiddLAogICAgICAgICAnSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlJzogWyc8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVySWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4nXSwKICAgICAgICAg
J01lZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAgICAgJ01vbm90b25pY1Rp
bWUnOiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAnU2Vjb25kcyc6IFsnPHd0
Zi9TZWNvbmRzLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5
TGlzdEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhNzRkNjE1YWJkM2Y0YTMxODYyNTJmZjBmZGNi
ODcxZTcwZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShjb25zdCBEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmZvckVhY2hJ
dGVtQnVmZmVyKFsmXSAoYXV0byYgaGFuZGxlKSB7CisgICAgICAgIG1fYnVmZmVycy5hcHBlbmQo
eyBoYW5kbGUuaWRlbnRpZmllciwgaGFuZGxlLmNhcGFjaXR5IH0pOworICAgIH0pOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYgYnVmZmVyUHJv
dmlkZXIpIGNvbnN0Cit7CisgICAgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGVzIGhhbmRs
ZXM7CisgICAgaGFuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYnVmZmVycy5zaXplKCkp
OworICAgIGZvciAoYXV0byYgW2lkZW50aWZpZXIsIGNhcGFjaXR5XSA6IG1fYnVmZmVycykgewor
ICAgICAgICBhdXRvKiBkYXRhID0gYnVmZmVyUHJvdmlkZXIoaWRlbnRpZmllcik7CisgICAgICAg
IGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGhhbmRs
ZXMudW5jaGVja2VkQXBwZW5kKHsgaWRlbnRpZmllciwgZGF0YSwgY2FwYWNpdHkgfSk7CisgICAg
fQorICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4oV1RGTW92
ZShoYW5kbGVzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3NWUxMTRm
MjNiYzhmYjhlNTdjZDkwZjY0YTMzYmUyNjJlMWYzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUgeworcHVibGljOgorICAgIHVzaW5nIEl0ZW1CdWZmZXJQcm92aWRlciA9IEZ1bmN0aW9u
PHVpbnQ4X3QqKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcik+Owor
CisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdD4gY3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYpIGNv
bnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZShWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4mJiBidWZmZXJzKQorICAgICAgICA6
IG1fYnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6
ZV90Pj4gbV9idWZmZXJzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCBtX2J1ZmZlcnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9w
dGlvbmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFp
cjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+PiBi
dWZmZXJzOworICAgIGRlY29kZXIgPj4gYnVmZmVyczsKKyAgICBpZiAoIWJ1ZmZlcnMpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqYnVmZmVy
cykgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZTBhYjc0
MzZiYWRjMzQ2Mzc0OTQ2NjMzNDcxOWI0NWVkZmQyYjMwNi4uNTBlMTAyNGNhZTBkYzA0MGNhYzMy
M2NiY2Q3ZWM1ZTE0NzQ0OTRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNzMsNiArMTczLDcgQEAgU2hh
cmVkL1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBTaGFyZWQvU2Vzc2lvblN0
YXRlLmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVuaWZ5CiBTaGFyZWQvU2hh
cmVhYmxlUmVzb3VyY2UuY3BwCitTaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCiBT
aGFyZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hU
YWJsZVJlYWRPbmx5LmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ2NjVj
Y2I3YmM2YWY3YTdhMDg5MTVmZGU0NjcyNmQ5NjdmNWZjYjQuLmM4MWU0OGFiMTg3NTg0N2MwZjU2
ODA5YTU4MjcwZmFiNzE1MTk4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTg3Myw2ICsxODczLDcgQEAKIAkJRjQ0REZFQjIxRTlF
NzUyRjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJ
Y29uVXRpbGl0aWVzLmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0UwMEM2NzUyQiAvKiBBcHBL
aXRTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsgfTsKIAkJRjQ5NkE0MzEx
RjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMx
NzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9OworCQlGNEE2RDZCQzI1NENB
M0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAv
KiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNENCMDlFNTIyNUQ1QTA5MDA4
OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vi
c2l0ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJCUY0RDVGNTFEMjA2MDg3QTEwMDM4QkJB
OCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1MTkyMDYwODdBMDAwMzhCQkE4IC8qIFdL
VGV4dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CiAJCUY0RDVGNTFGMjA2MDg3QTEw
MDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTFCMjA2MDg3QTEwMDM4QkJB
OCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTU0NTksNiAr
NTQ2MCw4IEBACiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZB
NDMwMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3Mv
RHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1NUUyMkEzMTQwRTAwQTA1
NjA3IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5t
bTsgcGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1QTM3OCAvKiBXZWJVbmRv
U3RlcElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNv
dXJjZVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxNjYsNiArNjE2OSw4IEBACiAJCQkJMUE2
NDIwRTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5oICovLAogCQkJCTUxMjE3
NDVFMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEy
MTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8sCisJCQkJRjRB
NkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLywK
KwkJCQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
aCAqLywKIAkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0
b3JlLmNwcCAqLywKIAkJCQk4MzEzRjdFOTFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5n
SGFzaFN0b3JlLmggKi8sCiAJCQkJODMxM0Y3RTgxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0
cmluZ0hhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMTMxNSw2ICsxMTMyMCw3IEBACiAJCQkJNTEyMTc0
NjExNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVmZmVyQ29weS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRh
dGFSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZB
QSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJF
RDUxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q0QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5n
SGFzaFN0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5k
ZXggZjc3ZjM3ZWU0NzE3ZjM3MTFiZGUzZmFmZGQ4ODA4MmM2YWFiMDg5MC4uNzVlNDAxNGM3Njhh
NzA1Y2Q4NzhhMzNlZGZlNDVkNzJjZjliMzY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgKQEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNs
dWRlICJFbmNvZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgi
CisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RSZWNvcmRlci5oPgpAQCAtMzYsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
IDogcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4s
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKICAgICB1c2lu
ZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI6Om1fYmFja2VuZDsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9k
cmF3aW5nQ29udGV4dDsKQEAgLTc3LDYgKzgxLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRl
bUJ1ZmZlckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlz
dCgpLnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7CiAgICAgfQogCiAgICAgYm9v
bCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAh
PSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CkBAIC0xODYsNiArMTkyLDExMCBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CiAgICAgfQogCisgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3Qg
Y2FwYWNpdHkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpCisgICAgICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHktPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHkpOworCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGVuY29kZUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1I
YW5kbGUgaXRlbSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaXRlbS50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXBPdXRUb1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5n
bGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdD
b21tYW5kczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtLmdl
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRo
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ZvY3VzUmluZ1JlY3RzPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPigpKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJ
bWFnZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmds
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3TGluZXNGb3JUZXh0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVu
Y29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2
ZUltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRo
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAg
ICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdUaWxlZEltYWdlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5j
b2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVu
Y29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6
ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xv
cj4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPigpKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xl
T2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVj
dDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJ
UEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0
SW1hZ2VEYXRhPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVE
YXNoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldExpbmVEYXNoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rl
cjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgICAgICBy
ZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRo
PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6CisjaWYgVVNFKENHKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNsZWFyUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNsZWFyU2hhZG93OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6Q2xpcDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXBPdXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25j
YXRlbmF0ZUNUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbElubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNhdmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2VuZGlm
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRl
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIHZvaWQgZGlkQXBwZW5kSXRlbU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGUgdHlwZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICh0eXBlID09IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGY5YTdkYzVkZTAyODc3MTRlNjZl
Y2IxNzE3NDFjMmU4OTUzOGU5MTIuLjc3YjcwNjAwNDIyZmI0MDRlZjYyNWI4MTY1YzdmNDhjOTll
ODM2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTM0
LDYgKzM0LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIK
ICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTExNiwxMyArMTE4LDE1IEBA
IFJlZlB0cjxJbWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlz
cGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Rmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdCh7IGRpc3BsYXlMaXN0IH0sIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMuY2xlYXIoKTsKIH0KIAogRGlzcGxheUxpc3RGbHVz
aElkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0
QW5kQ29tbWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7
CiAgICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgc2VudEZsdXNoSWRlbnRpZmllciA9IERp
c3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoZGlzcGxh
eUxpc3QsIHNlbnRGbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciks
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoeyBkaXNwbGF5TGlz
dCB9LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLmNs
ZWFyKCk7CiAgICAgcmV0dXJuIHNlbnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NSw2ICsx
NTksMjMgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxp
c3RXYXNDb21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2Nl
bGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hE
aXNwbGF5TGlzdChmbHVzaElkZW50aWZpZXIpOwogfQogCitEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6
ZV90IGNhcGFjaXR5KQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFy
ZWRJdGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7CisKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFNo
YXJlZE1lbW9yeTo6YWxsb2NhdGUoc3RkOjptYXgoZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXpl
LCBjYXBhY2l0eSkpOworICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byBpZGVudGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpOworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIHNoYXJlZE1lbW9yeUhh
bmRsZTsKKyAgICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShzaGFyZWRNZW1vcnlIYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKGlkZW50aWZp
ZXIsIHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVy
cy5zZXQoaWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LmNvcHlSZWYoKSk7CisKKyAgICByZXR1cm4g
eyBpZGVudGlmaWVyLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRh
dGEoKSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgKaW5kZXggZTk5ZTNkNzFjYTkyNjI2YTY5NjJjYzk0ODc3YTdjMTFiODVl
ZGJhNy4uZGM4YmViMjIxYTMyYTQyYWUyNDgwNjhmY2YwNGIzNjU0MjEzNGY4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5o
IgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjAsNiArNjEsNyBA
QCBwdWJsaWM6CiAgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOwogCiAgICAgUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5JiByZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVy
biBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eTsgfQorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KTsKIAogICAgIC8vIElQ
Qzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC03Miw2ICs3NCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYpOwogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoRGlzcGxheUxp
c3RBbmRDb21taXQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbGVhc2VSZW1v
dGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogCkBAIC04
NSw2ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVh
dGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQo
RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiAKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
SWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9yeT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiAg
ICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsg
KnRoaXMgfTsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCmluZGV4IDhmMjQ1ODU2MzVmNDcwODNkMWRiMjdhNWIzOTY2NjVmMzE1ZWJjYjAuLjlmMjZh
MjMwY2Y2OGIwYmY4ODA5MjhiN2NlZmJiZDg3Zjg1MzQ0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMyw4ICsyMyw4IEBA
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmRX
YXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6
ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNw
bGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgSW1h
Z2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUs
IFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChX
ZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29y
ZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3Vy
Y2VDYWNoZVByb3h5LmNwcAppbmRleCAzZjVhNzNiZWMzYmYyODZlNTI5ODFkZTQ4YjkwYzMxZDAx
OWQ4YzNkLi4wZjlhNmU4ZjE5ZTFkOTg1NjlmZWQxYmJjNDFkMDc2ODNlYWNmMWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwo=
</data>
<flag name="commit-queue"
          id="429678"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413131</attachid>
            <date>2020-11-03 17:50:06 -0800</date>
            <delta_ts>2020-11-05 13:14:22 -0800</delta_ts>
            <desc>More WIP</desc>
            <filename>bug-218406-20201103175005.patch</filename>
            <type>text/plain</type>
            <size>373970</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI2M2FiMjg5MTBjMTNk
MWNhZTZjOWI3NzY1ZmNmZTY2ZTYwMmZmNi4uMWMyMTNmYmUyZTdlMWFjMjk2MjRhNDdjYWY3M2Ji
MTE3MmM1ZGM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwNyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZSBpdGVtIGRhdGEgKHdoZXRoZXIgZW5jb2RlZCwgb3IgYXMgYW4g
aW5saW5lCisgICAgICAgIG9iamVjdCkuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgZGlzcGxheSBsaXN0
cyBvdXRzaWRlIG9mIHRoaXMgY29udGV4dCAoZS5nLiBpbiBvdGhlciBwYXJ0cyBvZiBXZWJDb3Jl
LCBzdWNoIGFzIHRoZQorICAgICAgICBnbHlwaCBkcmF3aW5nIGNhY2hlKSwgd2UgZG9uJ3QgaGF2
ZSBhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGAuIFRvIGhhbmRsZSB0aGlzLCB0aGUgaXRlbSBi
dWZmZXIgaW5zdGVhZAorICAgICAgICBhbGxvY2F0ZXMgaXRzIG93biAobm9uLXNoYXJlZC1tZW1v
cnkpIGJ1ZmZlcnMsIHdoaWNoIGl0IG1hbmFnZXMgYW5kIGRlbGV0ZXMgd2hlbiBpdCBpcyBkb25l
LiBJZiBhbnkgb3V0LW9mLWxpbmUKKyAgICAgICAgaXRlbXMgYXJlIGNvbnN0cnVjdGVkIHdpdGhp
biB0aGVzZSBidWZmZXJzLCBgSXRlbUJ1ZmZlcmAgd2lsbCBhZGRpdGlvbmFsbHkgY2FsbCB0aGVp
ciBkZXN0cnVjdG9ycyBwcmlvciB0bworICAgICAgICBkZWxldGluZyB0aGVzZSBidWZmZXJzLgor
CisgICAgICAgIFNlZSBwZXItY2hhbmdlIGNvbW1lbnRzIGJlbG93IGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPSk6CisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIG1vdmUgY29uc3RydWN0b3IgYnkgZXhj
aGFuZ2luZyBvd25lcnNoaXAgb2YgdGhlIGl0ZW0gYnVmZmVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNUZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZHVtcCBjb25zdCk6CisKKyAgICAg
ICAgQWRqdXN0IHRoZSBmb3JtYXQgd2hlbiBwcmludGluZyBkaXNwbGF5IGxpc3RzIHRvIGBUZXh0
U3RyZWFtYC4gTm93IHRoYXQgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHRyYWNrZWQgb24gdGhl
CisgICAgICAgIGRpc3BsYXkgbGlzdCByYXRoZXIgdGhhbiBiZWluZyBvbiBlYWNoIGRyYXdpbmcg
aXRlbSwgd2UgcHJpbnQgdGhlbSBvdXQgYWZ0ZXIgZWFjaCBpdGVtIChhcyBvcHBvc2VkIHRvIGJl
aW5nIGluCisgICAgICAgIHRoZSBtaWRkbGUgb2YgZWFjaCBpdGVtKS4KKworICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisKKyAg
ICAgICAgVGFsbHkgdXAgdGhlIHNpemUgb2YgdGhlIGRpc3BsYXkgbGlzdCBieSB0YWtpbmcgdGhl
IHN1bSBvZiB0aGUgc2l6ZXMgb2YgZWFjaCByZWFkb25seSBzZWdtZW50LCBhcyB3ZWxsIGFzIHRo
ZQorICAgICAgICB3cml0YWJsZSBidWZmZXIgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNvbnN0KToKKworICAgICAgICBBIERpc3Bs
YXlMaXN0IGlzIGVtcHR5IGlmIGl0IGNvbnRhaW5zIG5vIGl0ZW0gZGF0YTogaW4gb3RoZXIgd29y
ZHMsIHRoZXJlIGFyZSBubyByZWFkb25seSBidWZmZXIgc2VnbWVudHMsIGFuZAorICAgICAgICB0
aGVyZSBpcyBhbHNvIG5vdGhpbmcgd3JpdHRlbiB0byB0aGUgd3JpdGFibGUgYnVmZmVyIHNlZ21l
bnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNldEl0
ZW1CdWZmZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIHRv
IGl0ZXJhdGUgb3ZlciBlYWNoIEl0ZW1CdWZmZXJIYW5kbGUgaW4gdGhlIGRpc3BsYXkgbGlzdC4g
VGhpcyBpbmNsdWRlcyBhbGwgcmVhZG9ubHkgaGFuZGxlcywgYW5kCisgICAgICAgIHRoZW4gdGhl
IHdyaXRhYmxlIGhhbmRsZSAoaWYgaXQgZXhpc3RzKS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMpOgorCisg
ICAgICAgIEFkZCBhbiBvcHRpb24gdG8gYWxsb3cgdGhlIGRpc3BsYXkgbGlzdCB0byB0cmFjayBk
cmF3aW5nIGl0ZW0gZXh0ZW50cy4gQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFsd2F5cyB0cmFj
aworICAgICAgICBleHRlbnRzIGZvciBkcmF3aW5nIGl0ZW1zOyBob3dldmVyLCB3aGVuIHByb3Bh
Z2F0aW5nIGRpc3BsYXkgbGlzdHMgdG8gdGhlIEdQVSBwcm9jZXNzIGZvciBwbGF5YmFjaywgdGhl
c2UKKyAgICAgICAgZXh0ZW50cyB3ZXJlIG5ldmVyIHNlbnQgYWxvbmcgd2l0aCBJUEMsIGFuZCBz
byB0aGlzIGVuZGVkIHVwIGp1c3QgYmVpbmcgdW5uZWNlc3Nhcnkgd29yay4gQWRkaXRpb25hbGx5
LCB0aGUKKyAgICAgICAgaW5pdGlhbCBjbGlwIGluIHRoZSBHUFUgcHJvY2VzcyBpcyBhbHNvIG5l
dmVyIHNldCwgc28gY29tcHV0aW5nIHRoZXNlIGV4dGVudHMgbmV2ZXIgaGVscGVkLgorCisgICAg
ICAgIFRoYXQgc2FpZCwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHN0aWxsIHByaW50ZWQgb3V0
IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZywgc28gd2UgbmVlZCB0byBrZWVwIHRoaXMKKyAg
ICAgICAgbG9naWMgaW50YWN0OyB0aGlzIHJlZmFjdG9yaW5nIG9ubHkgZGlzYWJsZXMgZXh0ZW50
IGNvbXB1dGF0aW9uIGZvciBkaXNwbGF5IGxpc3RzIGJlaW5nIHNlbnQgdG8gdGhlIEdQVSBwcm9j
ZXNzCisgICAgICAgIHZpYSByZW1vdGUgaW1hZ2UgYnVmZmVycy4gSW4gYSBmdXR1cmUgcGF0Y2gs
IHdlIGNvdWxkIHJlZmFjdG9yIHRoaXMgc28gdGhhdCBkcmF3aW5nIGl0ZW1zIGNvbnRhaW4gZXh0
ZW50IHJlY3RzCisgICAgICAgIGFzIGlubGluZSBkYXRhIHRoYXQgY2FuIGJlIGNvbnN1bHRlZCBp
biB0aGUgR1BVIHByb2Nlc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6YXBwZW5kKToKKworICAgICAgICBEaXNwbGF5IGxpc3QgaXRlbXMgYXJlIG5vIGxv
bmdlciBjb25zdHJ1Y3RlZCBhaGVhZCBvZiB0aW1lLCBhbmQgdGhlbiBhcHBlbmRlZCB0byB0aGUg
ZGlzcGxheSBsaXN0LiBJbnN0ZWFkLAorICAgICAgICBgYXBwZW5kYCBub3cgdGFrZXMgdGhlIHR5
cGUgb2YgdGhlIGl0ZW0gdG8gYXBwZW5kIGFzIGEgdGVtcGxhdGUgdHlwZW5hbWUgYXJndW1lbnQs
IGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50cyB0aGF0CisgICAgICAgIHdpbGwgYmUgdXNlZCB0byBj
b25zdHJ1Y3QgdGhlIGl0ZW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6
Y2xlYXJDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6Oml0ZXJhdG9yOjptb3ZlVG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZm
ZXIpOgorCisgICAgICAgIEltcGxlbWVudCBhIEMrKyBpdGVyYXRvciBmb3IgRGlzcGxheUxpc3Qu
IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gd3JpdGUgY29kZSBsaWtlIHRoaXM6CisgICAgICAg
IGBgYAorICAgICAgICAvLyBTdXBwb3NlIGRpc3BsYXlMaXN0IGlzIGFuIGluc3RhbmNlIG9mIERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdC4KKyAgICAgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRd
IDogZGlzcGxheUxpc3QpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyB0aGluZ3Mgd2l0aCBpdGVt
LCB3aGljaCBpcyBhIERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLgorICAgICAgICAgICAgICAgIC8v
IE1heWJlIGRvIHRoaW5ncyB3aXRoIGV4dGVudCwgd2hpY2ggaXMgYW4gT3B0aW9uYWw8RmxvYXRS
ZWN0Pi4KKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRv
cjo6fml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRl
bUJ1ZmZlcklmRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6YWRkRHJhd2luZ0l0ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW06OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUF0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVjb2RlKTogRGVsZXRlZC4KKworICAg
ICAgICBSZW1vdmUgdGhlIGFiaWxpdHkgdG8gYGVuY29kZWAgYW5kIGBkZWNvZGVgIGRpc3BsYXkg
bGlzdHMsIGZvciB0aGUgdGltZSBiZWluZy4gRm9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4g
dGhlCisgICAgICAgIHdlYiBhbmQgR1BVIHByb2Nlc3Nlcywgd2Ugbm93IHVzZSBgU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVgLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lcyBtZWFu
IHRoYXQgdGhlIGV4dGFudCBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCBkaXNwbGF5IGxpc3QgaXRl
bSB3aWxsIGJlIGJyb2tlbiBmb3IgdGhlCisgICAgICAgIHRpbWUgYmVpbmcuIEluIGEgZm9sbG93
dXAgcGF0Y2gsIEkgcGxhbiB0byByZWltcGxlbWVudCBgRGlzcGxheUxpc3Q6OmVuY29kZWAgYW5k
IGBkZWNvZGVgIGluIHRoZSBuZXcgaW5saW5lIGl0ZW0KKyAgICAgICAgbW9kZWwgYnkgZW5jb2Rp
bmcgZWFjaCBpdGVtIChlaXRoZXIgYXMgaW5saW5lIGRhdGEgb3IgdmlhIGBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdGApLiBIb3dldmVyLCB0aGlzIGlzCisgICAgICAgIGNvbnRpbmdl
bnQgb24gYWxsIGRpc3BsYXkgbGlzdCBpdGVtIHR5cGVzIChlLmcuIGBEcmF3SW1hZ2VgIGFuZCBg
RHJhd0dseXBoYCkgbm90IHJlbHlpbmcgb24gYElQQzo6QXR0YWNobWVudGAKKyAgICAgICAgZm9y
IGVuY29kaW5nLCBzbyBzdXBwb3J0IGZvciBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCB3aWxsIG5l
ZWQgdG8gd2FpdCB1bnRpbCBhZnRlciBmb250cyBhbmQgaW1hZ2VzIGFyZSB3b3JraW5nLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgdG8gdXNlIHRoZSBuZXcgdGVtcGxhdGVkIGBE
aXNwbGF5TGlzdDo6YXBwZW5kYCBtZXRob2QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojp0YWtlRGlzcGxheUxpc3QpOgorCisg
ICAgICAgIFVzZSBgc3RkOjpleGNoYW5nZWAgaW5zdGVhZCBvZiBgV1RGTW92ZWAuIFRoaXMgaXMg
YWN0dWFsbHkgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyAoaS5lLiBu
bworICAgICAgICBsZWFrcyBvciBkb3VibGUtZnJlZWluZyksIHNpbmNlIHRoZSBgRGlzcGxheUxp
c3RgIGluc3RhbmNlIHRoYXQgaXMgYmVpbmcgbW92ZWQgZnJvbSBuZWVkcyB0byBiZSBlbXB0eSBz
byB0aGF0IGl0CisgICAgICAgIGRvZXMgbm90IHRyeSB0byBjYWxsIGRlc3RydWN0b3JzIG9uIHRo
ZSBpdGVtcyBmb3JtZXJseSBpbnNpZGUgb2YgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ryb3kpOgorCisgICAgICAgIEFk
ZCBoZWxwZXIgbWV0aG9kcyB0byBhcHBseSBhIGRpc3BsYXkgbGlzdCBpdGVtIHRvIGEgYEdyYXBo
aWNzQ29udGV4dGAgYW5kIGNhbGwgdGhlIGRpc3BsYXkgbGlzdCBpdGVtJ3MKKyAgICAgICAgZGVz
dHJ1Y3RvciwgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUhhbmRsZTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Om1fYWxsb2NhdGVkQnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgaXMgbm8gYG1fd3JpdGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2lu
ZyBpbi1wcm9jZXNzIGBEaXNwbGF5TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFp
bnRpbmcpLCB0aGUgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBj
cmVhdGluZyBhbmQgbWFuYWdpbmcgZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBu
ZWVkcyB0byByZW1lbWJlciB0byBmcmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdo
ZW4gYXBwZW5kaW5nLCBhbmQgbXVzdCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAg
ICAgIGRpc3BsYXkgbGlzdCBpdGVtcyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1
Y3RvcnMpIHdoZW4gaXQgaXMgZmluaXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjptX3JlYWRPbmx5QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
bV93cml0YWJsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0
dGVuTnVtYmVyT2ZCeXRlcyk6CisKKyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFi
b3ZlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5n
dGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50
Ojp+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlC
dWZmZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlz
IGZpbGUgbWFrZSB1cCBtb3N0IG9mIHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0
aGUgY2hhbmdlcyBhcmUgbW9zdGx5IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRo
aXMgcGF0Y2g6CisgICAgICAgIC0gQWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1U
eXBlYCBvZiBlYWNoIGRpc3BsYXkgbGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIg
b3Igbm90IGVhY2ggY2xhc3MKKyAgICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIg
b3Igbm90IGVhY2ggY2xhc3MgaXMgYSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBl
bmNvZGVgIGFuZCBgZGVjb2RlYCBtZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAg
ICAgICAgLSBSZW1vdmUgYWxsIG92ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1w
bGVtZW50cyBpbmRpdmlkdWFsIG1ldGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAg
IGBnbG9iYWxCb3VuZHNgIChpZiBhcHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRz
YCAoYWdhaW4sIGlmIGFwcGxpY2FibGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBk
dW1waW5nIGhlbHBlcnMsIHNvIHRoYXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5n
SXRlbWAgYmVmb3JlIGR1bXBpbmcgZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjph
cHBseSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0
aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpE
cmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9y
VGV4dDo6RHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRp
YTo6UGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtOjpJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
OjpzaXplSW5CeXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTYXZlOjpTYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNh
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OlNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91
dFRvUGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBh
dGg6OkNsaXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6
RHJhd0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVy
OjpEcmF3SW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdSZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
RWxsaXBzZTo6RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9y
OjpGaWxsUmVjdFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5k
ZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZp
bGxQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxs
aXBzZTo6RmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRo
OjpTdHJva2VJbmxpbmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tl
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlG
aWxsUGF0dGVybjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZl
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXN0b3JlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVzdG9yZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6VHJhbnNsYXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSb3RhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSb3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2NhbGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTY2FsZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldENUTTo6U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRDVE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRDVE06Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxH
cmFkaWVudDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9y
Ojpjb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
RmlsbENvbG9yOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJv
a2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ry
b2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VU
aGlja25lc3M6OnRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGlu
ZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
TGluZURhc2g6OlNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxp
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJM
aW1pdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclNoYWRvdzo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsZWFyU2hhZG93OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkNsaXA6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXA6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGlwOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXQ6OkNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXBPdXQ6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXQ6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdp
bmdDb21tYW5kczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZElt
YWdlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNj
YWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2VCdWZmZXI6OkRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ltYWdlQnVmZmVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0
aW5hdGlvblJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdO
YXRpdmVJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5j
eUxheWVyOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JU
ZXh0OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRy
YXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
cmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0VsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UGF0aDo6RHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0OjpGaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3Q6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9j
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
V2l0aENvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRp
ZW50OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3Np
dGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6
RmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFJvdW5kZWRSZWN0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Rmls
bElubGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQ
YXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxJbmxpbmVQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmltYWdlRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VE
YXRhOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlB1dEltYWdlRGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGE6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UGFpbnRGcmFtZUZvck1lZGlhOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OlN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6Omdsb2JhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0
aDo6U3Ryb2tlSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlSW5saW5lUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpyZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0Ojpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQ
YXR0ZXJuOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlTdHJva2VQYXR0ZXJuOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpnbG9iYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmxvY2FsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdJdGVtOjpzZXRFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdJdGVtOjpleHRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpleHRlbnRLbm93biBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmxvY2FsQm91bmRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
SXRlbTo6Z2xvYmFsQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTYXZlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNhdmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2F2ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0
ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2Fs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2Fs
ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTY2FsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRDVE06OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldENUTTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQ6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29s
b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9y
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0
cm9rZVRoaWNrbmVzczo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZURhc2g6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0TGluZUpvaW46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUpvaW46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUpvaW46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQ6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xl
YXJTaGFkb3c6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xlYXJTaGFkb3c6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xlYXJTaGFkb3c6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0dseXBoczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpFbmRUcmFuc3BhcmVu
Y3lMYXllcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3UmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZTo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdF
bGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0czo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRo
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxF
bGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxFbGxpcHNlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZv
ck1lZGlhOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUmVjdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJ
bmxpbmVQYXRoOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmRlY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0
dGVybjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpB
cHBseUZpbGxQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNj
YWxlRmFjdG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpkZWNvZGUpOiBEZWxldGVkLgor
CisgICAgICAgIERlbGV0ZSB0aGUgZ2VuZXJpYyBgSXRlbTo6ZW5jb2RlYCBhbmQgYEl0ZW06OmRl
Y29kZWAgbWV0aG9kcywgc2luY2Ugb25seSBvdXQtb2YtbGluZSBkaXNwbGF5IGxpc3QgaXRlbXMg
aGF2ZQorICAgICAgICBlbmNvZGUgYW5kIGRlY29kZSBmdW5jdGlvbnMgbm93LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwdXRJbWFnZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNo
YW5nZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGVh
clNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExp
bmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRMaW5l
RGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVK
b2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TWl0ZXJM
aW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdUaWxlZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzYXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cmVzdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnRyYW5zbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnJvdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsRWxsaXBzZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcE91dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcik6CisKKyAgICAgICAgQ2hhbmdlIHRoZXNlIG1ldGhvZHMgdGhhdCBhcHBlbmQg
ZGlzcGxheSBsaXN0IGl0ZW1zIGVuIG1hc3NlLCBzdWNoIHRoYXQgdGhleSBnbyBmcm9tIHRoaXM6
CisKKyAgICAgICAgICAgICAgICBgbV9kaXNwbGF5TGlzdC5hcHBlbmQoRm9vOjpjcmVhdGUoYXJn
MSwgYXJnMiwgYXJnMykpO2AKKworICAgICAgICAuLi50byB0aGlzOgorCisgICAgICAgICAgICAg
ICAgYG1fZGlzcGxheUxpc3QuYXBwZW5kPEZvbz4oYXJnMSwgYXJnMiwgYXJnMyk7YAorCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjphcHBlbmRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudCBjb25zdCk6IERlbGV0ZWQu
CisKKyAgICAgICAgRXh0ZW50cyBhcmUgbm93IGF1dG9tYXRpY2FsbHkgdXBkYXRlZCAodW5sZXNz
IG90aGVyd2lzZSBzcGVjaWZpZWQpIGZvciBhbnkgZHJhd2luZyBpdGVtcyB0aGF0IGFyZSBhcHBl
bmRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmFwcGVuZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVwbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxh
eWVyOjpyZXBsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVw
bGF5ZXI6OkRlbGVnYXRlOjphcHBseSk6CisKIDIwMjAtMTEtMDMgIEtlaXRoIFJvbGxpbiAgPGty
b2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEluY2x1ZGUgcGF0aCBpbiBnZW5lcmF0ZWQgSURM
IGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2Mzg4YjljM2EyYWRhNzE5ODAyYTkxMjdmNWE2MDVh
NTlmOThhMDgyLi4xNmJkMjNlNTBmYzRiYWRjZDViMjIwMGUxMWFlMTMyODY3NzM4MTMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIwLTExLTAzICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3BsYXkgbGlzdHNdIEVu
Y29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGp1c3QgZm9yIGNo
YW5nZXMgdG8gZGlzcGxheSBsaXN0cyBhbmQgZGlzcGxheSBsaXN0IGl0ZW1zIGluIFdlYkNvcmUg
KHNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUKKyAgICAgICAgaW5mb3JtYXRp
b24pLiBJbiBwYXJ0aWN1bGFyLCB3ZSBpbXBsZW1lbnQgdGhlIHJlYWRpbmcgYW5kIHdyaXRpbmcg
Y2xpZW50IGhvb2tzIGNvbnN1bHRlZCBieSBJdGVtQnVmZmVyLCBhbmQgd2UKKyAgICAgICAgYWxz
byBhZGQgYSB0ZW1wb3JhcnkgbWVjaGFuaXNtIHRoYXQgYWxsb3dzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSAoaW4gdGhlIHdlYiBwcm9jZXNzKSB0byBzZW5kIGRpc3BsYXkgbGlzdAorICAg
ICAgICBpdGVtIGRhdGEgdGhyb3VnaCBzaGFyZWQgbWVtb3J5IHRvIHRoZSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kIChpbiB0aGUgR1BVIHByb2Nlc3MpLiBUaGlzIHRlbXBvcmFyeSBtZWNoYW5pc20K
KyAgICAgICAgZG9lcyBub3QgYXR0ZW1wdCB0byBtYWtlIGFueSByZWFkaW5nIG9yIHdyaXRpbmcg
aW4gc2hhcmVkIG1lbW9yeSBjb25jdXJyZW50IGJldHdlZW4gdGhlIEdQVSBhbmQgd2ViIHByb2Nl
c3NlcywKKyAgICAgICAgYW5kIGV4aXN0cyBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHJlbmRlcmlu
ZyB3aXRoIHRoZSBHUFUgcHJvY2VzcyBzdGlsbCB3b3JrcyB1c2luZyB0aGVzZSBuZXcgZGlzcGxh
eSBsaXN0IGl0ZW1zLgorCisgICAgICAgIEluIHRoZSBuZXh0IHBhdGNoLCBJIHdpbGwgYWRkIGEg
c2ltcGxlIGNvbmN1cnJlbnQgcmVhZGVyL3dyaXRlciBtb2RlbCBmb3IgZGlzcGxheSBsaXN0IHBy
b2Nlc3NpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzLCBhbmQg
KGluIGRvaW5nIHNvKSByZXZlcnQgbW9zdCBvZiB0aGUgY2hhbmdlcyBpbiBgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZGAgYW5kCisgICAgICAgIGBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlgIGJl
bG93LgorCisgICAgICAgIFNlZSBjb21tZW50cyBiZWxvdyBmb3IgbW9yZSBkZXRhaWwuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpkZWNvZGVBbmRDcmVhdGUpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlNZWRpYUl0ZW0pOgor
CisgICAgICAgIFJlZmFjdG9yIHRoZXNlIHRvIHRha2UgYFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtSGFuZGxlYC4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjph
cHBseURpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YSk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9T
aGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUpOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QgY29uc3Qp
OgorICAgICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oOiBBZGRlZC4KKwor
ICAgICAgICBBZGQgYSBXZWJLaXQyIGhlbHBlciBjbGFzcyB0aGF0IHJlcHJlc2VudHMgZGlzcGxh
eSBsaXN0IGRhdGEgaW4gc2hhcmVkIG1lbW9yeSB0aGF0IGlzIHByb3BhZ2F0ZWQgZnJvbSB0aGUg
d2ViCisgICAgICAgIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLiBJbiB0aGUgbmV4dCBwYXRj
aCwgdGhpcyBjbGFzcyB3aWxsIGJlIHJld3JpdHRlbiB0byBzdXBwb3J0IGNvbmN1cnJlbnQgZGlz
cGxheSBsaXN0CisgICAgICAgIHJlYWRpbmcgYW5kIHdyaXRpbmcsIHdpdGggc3BlY2lhbGl6ZWQg
c3ViY2xhc3NlcyBpbiBzZXJ2aWNlIG9mIGJvdGggdGhlIHJlYWRlciAoaS5lLiB0aGUgR1BVIHBy
b2Nlc3MpIGFuZCB0aGUKKyAgICAgICAgd3JpdGVyIChpLmUuIHRoZSB3ZWIgcHJvY2VzcykuCisK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpk
ZWNvZGUpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlM
aXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNw
cDoKKwogMjAyMC0xMS0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbbWFjT1NdIHJlbW92ZSBzeXNjdGwub2lkZm10LiBhY2Nlc3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IGVjNzBiNDY0MjM4NTEzNjZhNGE0MTQ2NDU4N2I1NDVmNWI3ZTNiZTUuLmNmMjI1
OTA1MjM0ZDEzYjE3YTEwNDE0ZDU0MzM5ZGRhOTkzMjYxYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTI0Miw2ICsxMjQyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtVHlwZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDUxZmRhMGQ3YTk4
ZTliZTFmMmE2ZWRkZDQzZDRjZjA5NmFhZDA2YS4uMDMyZGI3NmVhYjFhMjRhM2M2YWEyZDIxMzAx
ZTlhODQzM2FhNGUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE5NjAsNiArMTk2MCw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUxpZ2h0aW5nTkVPTi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDBmM2M4MmVjYWIwZDg4
MjFhMTNkZDJiYTM0MjNkYTVhYzQxN2JkOTQuLjIzOWY0N2IwYTAyY2JmN2QzYzhmYzkxOWMyYTRl
NTM4OGU3NTlkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTUxNjEsNiArNTE2MSw3IEBACiAJCUYzQUJGRTBDMTMwRTlEQTAw
MEU3RjdEMSAvKiBJbnN0cnVtZW50aW5nQWdlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0FCRkUwQjEzMEU5REEwMDBFN0Y3RDEgLyogSW5zdHJ1
bWVudGluZ0FnZW50cy5oICovOyB9OwogCQlGM0Q0NjE0OTExNjFENTMyMDBDQTBEMDkgLyogSlNF
cnJvckhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovOyB9Owog
CQlGNDAzRTc4NzIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDAzRTc4NTIzNjNCNThDMDAwNDQ1
NTAgLyogRW50ZXJLZXlIaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRl
bUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0MjkyNjE4MjUy
NjRENDQwMDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjkyNjE3MjUyNjRENDQwMDAwNzg5OCAv
KiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGNDMzRTkwMzFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFz
dGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3RlYm9hcmQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDM3N0Q1NzI1NTFDOUM2
MDA4MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQzNzdENTUyNTUxQzlDNjAwODBBQkZFIC8qIERpc3Bs
YXlMaXN0SXRlbVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTE4Niw2ICs1MTg3LDcgQEAKIAkJRjQ4RDJBN0UyMTU3MTgyNjAwQzY3NTJC
IC8qIEZvbnRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDhEMkE3MTIxNTZEQzBBMDBDNjc1MkIgLyogRm9udEF0dHJpYnV0ZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNDhEMkFB
NTIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9y
Q29jb2EuaCAqLzsgfTsKIAkJRjQ5Nzg2ODgxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJ
dGVtSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjQ5Nzg2ODcxRkY0NUZBNTAwRTA2MEFCIC8qIFBhc3RlYm9hcmRJdGVtSW5mby5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUY0QTZENkE0MjU0QzUx
MkMwMEI2NUZBQSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZBMzI1NEM1MTJDMDBCNjVGQUEgLyogRGlz
cGxheUxpc3RJdGVtVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUY0QjQyMkM0MjIwQzA1NjgwMDlFMUU3RCAvKiBET01QYXN0ZUFjY2Vzcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRCNDIyQzIy
MjBDMDAwMDAwOUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRCRkI5ODUxRTFEREY5QjAwODYyQzI0IC8q
IER1bXBFZGl0aW5nSGlzdG9yeS5qcyBpbiBDb3B5IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQ4Mzg5ODMxRTFEREYyQjAwNzZCN0VBIC8qIER1bXBFZGl0aW5n
SGlzdG9yeS5qcyAqLzsgfTsKIAkJRjRCRkI5ODYxRTFEREY5QjAwODYyQzI0IC8qIEVkaXRpbmdI
aXN0b3J5VXRpbC5qcyBpbiBDb3B5IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ4Mzg5ODQxRTFEREYyQjAwNzZCN0VBIC8qIEVkaXRpbmdIaXN0b3J5VXRpbC5q
cyAqLzsgfTsKQEAgLTE2MzE2LDYgKzE2MzE4LDggQEAKIAkJRjNENDYxNDcxMTYxRDUzMjAwQ0Ew
RDA5IC8qIEpTRXJyb3JIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRXJyb3JIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MDNFNzg1
MjM2M0I1OEMwMDA0NDU1MCAvKiBFbnRlcktleUhpbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW50ZXJL
ZXlIaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MDNFNzg2MjM2M0I1OEMw
MDA0NDU1MCAvKiBFbnRlcktleUhpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW50ZXJLZXlI
aW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQyMkI4QjUyNTNGNzA2NTAw
NEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
TGlzdEl0ZW1CdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQyMkI4QjYy
NTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDI5MjYxNzI1MjY0RDQ0MDAwMDc4OTggLyogTWVkaWFQbGF5ZXJJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDJDRUI1NDIxNDAzMUVFMDAyRENBNzIgLyogRm9udEF0dHJpYnV0
ZUNoYW5nZXNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRBdHRyaWJ1dGVDaGFu
Z2VzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MzNFOTAyMURCQkRC
QTIwMEVGMEQxNCAvKiBTdGF0aWNQYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN0YXRpY1Bhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2MzcxLDYgKzE2Mzc1LDggQEAKIAkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJCIC8qIENv
bG9yQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb2xvckNvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk3ODY4NzFGRjQ1RkE1MDBFMDYwQUIgLyogUGFzdGVi
b2FyZEl0ZW1JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRJdGVtSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDlFOThFNDIxREVFNkMxMDA5QUU1NUUgLyogRWRp
dEFjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFZGl0QWN0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QTMyNTRDNTEyQzAwQjY1RkFBIC8qIERpc3BsYXlM
aXN0SXRlbVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZBNjI1NEM1MUU5MDBCNjVGQUEgLyogRGlz
cGxheUxpc3RJdGVtVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdEl0ZW1U
eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRCNDIyQzIyMjBDMDAwMDAw
OUUxRTdEIC8qIERPTVBhc3RlQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBhc3RlQWNjZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QzVGMjA1MjQ3OUU3RUUwMEU5QjRG
NSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRJbWFn
ZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEM1RjIwODI0NzlFOUM4
MDBFOUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2xpcGJvYXJkSW1hZ2VSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc2MjYsNiArMTc2MzIsOCBAQAogCQkJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5MyAvKiBEaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0
QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTcyRUEwOUY3MjNGQ0NC
M0QwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCisJCQkJRjQyMkI4QjYy
NTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8sCisJCQkJRjQy
MkI4QjUyNTNGNzA2NTAwNEU3N0U4IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovLAogCQkJ
CTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJ
CQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJ
CUY0Mzc3RDU2MjU1MUM5QzYwMDgwQUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLywK
QEAgLTMxNDU0LDYgKzMxNDYyLDcgQEAKIAkJCQkxQ0FGNTZEQjI1MzAxQUM4MDAxN0I0NzIgLyog
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QUQw
OTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1NUFEMDkzRTI0MDg5NjM1MDBERTREMkYgLyogRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQyMkI4QjgyNTNGNzFGQzAwNEU3N0U4IC8q
IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0
Mzc3RDU3MjU1MUM5QzYwMDgwQUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDk2MzUzYWRlZGZmMTFlZDVkNDE1YWQ1N2ZkZmRi
NGIyODBkNTA0ZGQuLjBiMzVhYzY0ZmE4YjlmZmUwYzk0NDg1ZTk3M2YyNGMyYWEwZjM0OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0xNjMsMTAgKzE2MywxMCBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewog
ICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHRTdGF0ZSgpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBHcmFwaGljc0NvbnRleHRTdGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0
YXRlJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRv
cj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBlbnVtIENoYW5nZSA6IHVpbnQzMl90
IHsKICAgICAgICAgU3Ryb2tlR3JhZGllbnRDaGFuZ2UgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKaW5kZXggZmZkOWQ2ZGRmYjYwYWMxYTA5NzIy
ZGZhZGM4MmYxMTUzMGU5MjBhMS4uZGIxM2FmZjE3OGQyMWNhZGY2NDI4NWQ4MDFlOWNkYjVkZjUz
NmJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCkBAIC0yNiw4ICsyNiwxMCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
IApAQCAtNDgsMTcgKzUwLDQwIEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoKSBjb25zdAogfQog
I2VuZGlmCiAKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdChEaXNwbGF5TGlzdCYmIG90aGVyKQor
ICAgIDogbV9pdGVtcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIpKQorICAg
ICwgbV9kcmF3aW5nSXRlbUV4dGVudHMoc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdpbmdJdGVt
RXh0ZW50cywgeyB9KSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KEl0ZW1CdWZm
ZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAgICA6IG1faXRlbXMobWFrZVVuaXF1ZTxJdGVtQnVmZmVy
PihXVEZNb3ZlKGhhbmRsZXMpKSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KCkg
PSBkZWZhdWx0OworRGlzcGxheUxpc3Q6On5EaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKKworRGlz
cGxheUxpc3QmIERpc3BsYXlMaXN0OjpvcGVyYXRvcj0oRGlzcGxheUxpc3QmJiBvdGhlcikKK3sK
KyAgICBtX2l0ZW1zID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zLCBudWxscHRyKTsKKyAg
ICBtX2RyYXdpbmdJdGVtRXh0ZW50cyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kcmF3aW5nSXRl
bUV4dGVudHMsIHsgfSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIERpc3BsYXlMaXN0
OjpjbGVhcigpCiB7Ci0gICAgbV9saXN0LmNsZWFyKCk7CisgICAgaWYgKG1faXRlbXMpCisgICAg
ICAgIG1faXRlbXMtPmNsZWFyKCk7CisgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuY2xlYXIoKTsK
IH0KIAotYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZs
YWdzLCBjb25zdCBJdGVtJiBpdGVtKQorYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZs
YWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7CiAgICAgc3dpdGNoIChp
dGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBpZiAo
IShmbGFncyAmIEFzVGV4dEZsYWc6OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkgewotICAg
ICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0p
OworICAgICAgICAgICAgY29uc3QgYXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+
KCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBpdGVtIGlm
IHRoZSBvbmx5IHN0YXRlLWNoYW5nZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCiAgICAg
ICAgICAgICBpZiAoc3RhdGVJdGVtLnN0YXRlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzLDEwICsxMDgsMTQgQEAgYm9vbCBEaXNwbGF5TGlz
dDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBjb25zdCBJdGVtJiBpdGVt
KQogU3RyaW5nIERpc3BsYXlMaXN0Ojphc1RleHQoQXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7
CiAgICAgVGV4dFN0cmVhbSBzdHJlYW0oVGV4dFN0cmVhbTo6TGluZU1vZGU6Ok11bHRpcGxlTGlu
ZSwgVGV4dFN0cmVhbTo6Rm9ybWF0dGluZzo6U1ZHU3R5bGVSZWN0KTsKLSAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBtX2xpc3QpIHsKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhpcykg
ewogICAgICAgICBpZiAoIXNob3VsZER1bXBGb3JGbGFncyhmbGFncywgaXRlbSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHN0
cmVhbSk7CiAgICAgICAgIHN0cmVhbSA8PCBpdGVtOworICAgICAgICBpZiAoaXRlbS5pc0RyYXdp
bmdJdGVtKCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIiBleHRlbnQgIiA8PCBleHRlbnQ7CiAg
ICAgfQogICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgpOwogfQpAQCAtOTYsMTAgKzEyNSwxMSBA
QCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIFRleHRT
dHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwogICAgIHRzIDw8ICJkaXNwbGF5IGxpc3QiOwog
Ci0gICAgc2l6ZV90IG51bUl0ZW1zID0gbV9saXN0LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUl0ZW1zOyArK2kpIHsKLSAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29w
ZSBzY29wZSh0cyk7Ci0gICAgICAgIHRzIDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5nZXQoKTsK
KyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhpcykgeworICAgICAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAg
aWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAgICAgdHMgPDwgIiBleHRlbnQgIiA8
PCBleHRlbnQ7CiAgICAgfQogICAgIHRzLnN0YXJ0R3JvdXAoKTsKICAgICB0cyA8PCAic2l6ZSBp
biBieXRlczogIiA8PCBzaXplSW5CeXRlcygpOwpAQCAtMTA4LDEzICsxMzgsMjc4IEBAIHZvaWQg
RGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAKIHNpemVfdCBEaXNwbGF5
TGlzdDo6c2l6ZUluQnl0ZXMoKSBjb25zdAogewotICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAg
IGZvciAoYXV0byYgcmVmIDogbV9saXN0KQotICAgICAgICByZXN1bHQgKz0gSXRlbTo6c2l6ZUlu
Qnl0ZXMocmVmKTsKKyAgICByZXR1cm4gbV9pdGVtcyA/IG1faXRlbXMtPnNpemVJbkJ5dGVzKCkg
OiAwOworfQorCitib29sIERpc3BsYXlMaXN0Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1faXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpOworfQorCitJdGVtQnVmZmVyJiBEaXNw
bGF5TGlzdDo6aXRlbUJ1ZmZlcigpCit7CisgICAgaWYgKCFtX2l0ZW1zKQorICAgICAgICBtX2l0
ZW1zID0gbWFrZVVuaXF1ZTxJdGVtQnVmZmVyPigpOworICAgIHJldHVybiAqbV9pdGVtczsKK30K
Kwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyUmVhZGlu
Z0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xpZW50KTsK
K30KKwordm9pZCBEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyV3Jp
dGluZ0NsaWVudCogY2xpZW50KQoreworICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xpZW50
KTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9p
ZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAg
aWYgKG1faXRlbXMpCisgICAgICAgIG1faXRlbXMtPmZvckVhY2hJdGVtQnVmZmVyKFdURk1vdmUo
bWFwRnVuY3Rpb24pKTsKK30KIAotICAgIHJldHVybiByZXN1bHQ7Cit2b2lkIERpc3BsYXlMaXN0
OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCkpOworICAgIG1fdHJhY2tzRHJh
d2luZ0l0ZW1FeHRlbnRzID0gdmFsdWU7CiB9CiAKK3ZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJ
dGVtSGFuZGxlIGl0ZW0pCit7CisgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2Ug
SXRlbVR5cGU6OlNhdmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxSZXN0b3JlPihpdGVtLmdldDxSZXN0b3JlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xh
dGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxSb3RhdGU+KGl0ZW0uZ2V0PFJvdGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25j
YXRlbmF0ZUNUTT4oaXRlbS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldENUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENU
TT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oaXRlbS5nZXQ8U2V0SW5saW5l
RmlsbEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtLmdl
dDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tl
VGhpY2tuZXNzOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRl
bS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
U2V0TGluZUNhcD4oaXRlbS5nZXQ8U2V0TGluZUNhcD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZURhc2g6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0uZ2V0
PFNldExpbmVEYXNoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
U2V0TWl0ZXJMaW1pdD4oaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+KGl0
ZW0uZ2V0PENsZWFyU2hhZG93PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXA+KGl0ZW0uZ2V0PENsaXA+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBPdXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcE91dD4oaXRlbS5nZXQ8Q2xp
cE91dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihpdGVtLmdldDxDbGlwT3V0VG9QYXRoPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwUGF0
aD4oaXRlbS5nZXQ8Q2xpcFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdp
bmdDb21tYW5kczoKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogU3VwcG9ydCB0aGUgYWJpbGl0
eSB0byBjbG9uZSBkaXNwbGF5IGxpc3RzICh0aGlzIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9y
IGRpc3BsYXkgbGlzdCB0cmFja2luZykuCisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3R2x5cGhzPihpdGVtLmdldDxEcmF3R2x5cGhzPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
RHJhd0ltYWdlPihpdGVtLmdldDxEcmF3SW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdUaWxlZEltYWdlPihpdGVt
LmdldDxEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0
ZW0uZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
SW1hZ2VCdWZmZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpdGVt
LmdldDxEcmF3SW1hZ2VCdWZmZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJ
bWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PERy
YXdOYXRpdmVJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3
UmVjdD4oaXRlbS5nZXQ8RHJhd1JlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lPihpdGVtLmdldDxEcmF3TGluZT4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxEcmF3TGluZXNGb3JUZXh0PigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICByZXR1
cm4gYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0uZ2V0PERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPERyYXdFbGxpcHNlPihpdGVtLmdldDxEcmF3RWxsaXBzZT4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJh
d1BhdGg+KGl0ZW0uZ2V0PERyYXdQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRl
bS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdSZWN0czoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0
ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSZWN0Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1
cm4gYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFk
aWVudD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0
ZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtLmdldDxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4oKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Rmls
bElubGluZVBhdGg+KGl0ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxQYXRoPihp
dGVtLmdldDxGaWxsUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbEVsbGlwc2U+KGl0ZW0uZ2V0PEZpbGxFbGxpcHNlPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxQYWludEZy
YW1lRm9yTWVkaWE+KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VSZWN0Pihp
dGVtLmdldDxTdHJva2VSZWN0PigpKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5k
PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZUlubGluZVBhdGg+KCkpOworI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxT
dHJva2VQYXRoPihpdGVtLmdldDxTdHJva2VQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZUVsbGlwc2U+KGl0ZW0u
Z2V0PFN0cm9rZUVsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclJlY3Q+KGl0ZW0uZ2V0PENsZWFyUmVjdD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdldDxCZWdpblRyYW5zcGFyZW5j
eUxheWVyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5nZXQ8RW5kVHJh
bnNwYXJlbmN5TGF5ZXI+KCkpOworI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJu
PihpdGVtLmdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5RmlsbFBhdHRlcm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4o
aXRlbS5nZXQ8QXBwbHlGaWxsUGF0dGVybj4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+KGl0ZW0uZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkpOworICAg
IH0KK30KKworYm9vbCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgYXV0byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gZW5kQ3Vy
c29yID0gaXRlbXMubV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRlbXMubV93cml0dGVuTnVtYmVy
T2ZCeXRlczsKKyAgICByZXR1cm4gbV9jdXJzb3IgPT0gZW5kQ3Vyc29yOworfQorCit2b2lkIERp
c3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0oKQoreworICAgIGNsZWFyQ3Vy
cmVudEl0ZW0oKTsKKworICAgIGlmIChhdEVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgYXV0byBpdGVtVHlwZSA9
IHN0YXRpY19jYXN0PEl0ZW1UeXBlPihtX2N1cnNvclswXSk7CisgICAgaWYgKGlzRHJhd2luZ0l0
ZW0oaXRlbVR5cGUpICYmICFtX2Rpc3BsYXlMaXN0Lm1fZHJhd2luZ0l0ZW1FeHRlbnRzLmlzRW1w
dHkoKSkgeworICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBtX2Rpc3BsYXlMaXN0Lm1fZHJhd2lu
Z0l0ZW1FeHRlbnRzW21fZHJhd2luZ0l0ZW1JbmRleF07CisgICAgICAgIG1fZHJhd2luZ0l0ZW1J
bmRleCsrOworICAgIH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBXVEY6Om51bGxv
cHQ7CisKKyAgICBhdXRvKiBjbGllbnQgPSBpdGVtcy5tX3JlYWRpbmdDbGllbnQ7CisgICAgaWYg
KCFpc0lubGluZUl0ZW0oaXRlbVR5cGUpICYmIGNsaWVudCkgeworICAgICAgICBhdXRvIHNpemVP
ZlR5cGVBbmRJdGVtID0gc2l6ZU9mSXRlbUluQnl0ZXMoaXRlbVR5cGUpICsgc2l6ZW9mKEl0ZW1U
eXBlKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0gPSBzaXplT2ZUeXBl
QW5kSXRlbSA8PSBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA/IG1fZml4ZWRCdWZm
ZXJGb3JEZWNvZGVkSXRlbXMgOiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9j
KHNpemVPZlR5cGVBbmRJdGVtKSk7CisgICAgICAgIG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJ
dGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXRlbVR5cGUpOworCisgICAgICAgIGF1dG8g
c2l6ZU9mRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4obV9jdXJzb3IgKyBzaXplb2Yo
SXRlbVR5cGUpKVswXTsKKyAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBtX2N1cnNvciAr
IHNpemVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgc2l6ZV90IHBhZGRp
bmcgPSAoYWxpZ25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3Rh
cnRPZlBhZGRpbmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRfdCk7Cisg
ICAgICAgIGF1dG8gZGVjb2RlZEl0ZW1IYW5kbGUgPSBjbGllbnQtPmRlY29kZUl0ZW0oc3RhcnRP
ZlBhZGRpbmcgKyBwYWRkaW5nLCBzaXplT2ZEYXRhLCBpdGVtVHlwZSwgbV9jdXJyZW50QnVmZmVy
Rm9yRGVjb2RlZEl0ZW0pOworICAgICAgICBpZiAoIWRlY29kZWRJdGVtSGFuZGxlKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBjcmFzaGluZywgdGhpcyBuZWVkcyB0byBmYWls
IGdyYWNlZnVsbHkgYW5kIGluZm9ybSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLy8gRm9yIHRo
ZSB0aW1lIGJlaW5nLCB0aGlzIGFzc2VydGlvbiBtYWtlcyBidWdzIGluIGl0ZW0gYnVmZmVyIGVu
Y29kaW5nIGxvZ2ljIGVhc2llcgorICAgICAgICAgICAgLy8gdG8gY2F0Y2ggYnkgYXZvaWRpbmcg
bXlzdGVyaW91cyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3RseSBhbGlnbmVkIGl0
ZW1zCisgICAgICAgICAgICAvLyBkb3duIHRoZSBsaW5lLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2N1cnJlbnRJdGVtID0g
KmRlY29kZWRJdGVtSGFuZGxlOworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0g
c2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIHNpemVPZkRhdGE7
CisgICAgICAgIG1fY3VycmVudEl0ZW1FeGlzdHNJblRlbXBvcmFyeUJ1ZmZlciA9IHRydWU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IEl0ZW1IYW5kbGUgeyBtX2N1cnNv
ciB9OworICAgICAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gbV9jdXJyZW50SXRlbS5z
aXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSgp
Cit7CisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3Vyc29yICs9
IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXI7CisKKyAgICBpZiAobV9jdXJzb3IgPT0gbV9jdXJy
ZW50RW5kT2ZCdWZmZXIgJiYgbV9yZWFkT25seUJ1ZmZlckluZGV4IDwgbV9kaXNwbGF5TGlzdC5t
X2l0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCkpIHsKKyAgICAgICAgbV9yZWFkT25seUJ1
ZmZlckluZGV4Kys7CisgICAgICAgIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7
CisgICAgfQorCisgICAgdXBkYXRlQ3VycmVudEl0ZW0oKTsKK30KKwordm9pZCBEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVudEl0ZW0oKQoreworICAgIGlmIChtX2N1cnJlbnRCdWZm
ZXJGb3JEZWNvZGVkSXRlbSkgeworICAgICAgICBtX2N1cnJlbnRJdGVtLmRlc3Ryb3koKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZlckZvckRlY29kZWRJdGVtICE9IG1fZml4
ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMpKQorICAgICAgICAgICAgZmFzdEZyZWUobV9jdXJyZW50
QnVmZmVyRm9yRGVjb2RlZEl0ZW0pOworICAgIH0KKworICAgIG1fY3VycmVudEl0ZW0gPSB7IH07
CisgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50QnVmZmVy
Rm9yRGVjb2RlZEl0ZW0gPSBudWxscHRyOworICAgIG1fY3VycmVudEl0ZW1FeGlzdHNJblRlbXBv
cmFyeUJ1ZmZlciA9IGZhbHNlOworfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92
ZVRvRW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXMp
IHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRl
bXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVy
ID0gbV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9IGl0ZW1zLT5tX3Jl
YWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lkIERpc3BsYXlMaXN0OjppdGVy
YXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIoKQoreworICAgIGF1dG8mIGl0
ZW1zID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICghaXRlbXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMgPSBpdGVtcy0+bV9yZWFk
T25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5QnVmZmVySW5kZXggPCBudW1i
ZXJPZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBuZXh0QnVmZmVySGFuZGxlID0g
aXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZmZXJJbmRleF07CisgICAgICAg
IG1fY3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAgICAgICBtX2N1cnJlbnRFbmRP
ZkJ1ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5jYXBhY2l0eTsKKyAgICB9IGVs
c2UgaWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykg
eworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRhdGE7CisgICAg
ICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBpdGVtcy0+bV93cml0dGVuTnVt
YmVyT2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKIAog
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggZjlj
OTM5OGYwYjcyMjI0ZjY5MDJhMzhmNzk1NzU2MzJkMWIxYTMyMC4uYTRkNzk3OTAxMjI1NWQwODBk
OWY4MDI4ZDU0NTU1NTg0NjZmZDlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTI1LDEx
ICsyNSwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQwLDM0ICs0Myw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3Mg
SXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKLXB1YmxpYzoKLSAgICBJdGVtKCkgPSBk
ZWxldGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBJdGVtKEl0ZW1UeXBlKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5JdGVtKCk7Ci0KLSAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0Ry
YXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotI2lmICFkZWZpbmVkKE5ERUJV
RykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0
OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7Ci0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxJdGVtPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBJdGVtVHlwZSBtX3R5cGU7Ci19Owot
CiBlbnVtIEFzVGV4dEZsYWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAwLAogICAgIEluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAsCkBAIC04
MCw4NiArNTUsMTEwIEBAIGNsYXNzIERpc3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xhc3MgUmVj
b3JkZXI7CiAgICAgZnJpZW5kIGNsYXNzIFJlcGxheWVyOwogcHVibGljOgotICAgIERpc3BsYXlM
aXN0KCkgPSBkZWZhdWx0OwotICAgIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVs
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVfRVhQT1JU
IERpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlM
aXN0KEl0ZW1CdWZmZXJIYW5kbGVzJiYpOwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShE
aXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3BsYXlMaXN0
KCk7CiAKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAotICAgIGNv
bnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9Ci0g
ICAgSXRlbSYgaXRlbUF0KHNpemVfdCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRl
eCA8IG1fbGlzdC5zaXplKCkpOwotICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsK
LSAgICB9CisgICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0
eSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0
OwogCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsg
fQotICAgIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwotICAgIAogICAgIFN0cmluZyBhc1Rl
eHQoQXNUZXh0RmxhZ3MpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJdGVt
QnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Kik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Kik7CisK
ICNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKICAgICBXVEY6OkNTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoKSBjb25z
dDsKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxEaXNwbGF5TGlzdD4gZGVjb2RlKERlY29kZXImKTsKLQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxl
Jik+JiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4g
dm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpOworICAgIHZvaWQgYXBwZW5kKEl0ZW1IYW5kbGUp
OworCisgICAgYm9vbCB0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSBjb25zdCB7IHJldHVybiBt
X3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50czsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wpOworCisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBjbGFzcyBJbW1lZGlhdGVseU1vdmVUb0VuZCB7IE5v
LCBZZXMgfTsKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
LCBJbW1lZGlhdGVseU1vdmVUb0VuZCBpbW1lZGlhdGVseU1vdmVUb0VuZCA9IEltbWVkaWF0ZWx5
TW92ZVRvRW5kOjpObykKKyAgICAgICAgICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGltbWVkaWF0ZWx5TW92ZVRvRW5kID09IEltbWVk
aWF0ZWx5TW92ZVRvRW5kOjpZZXMpCisgICAgICAgICAgICAgICAgbW92ZVRvRW5kKCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVu
dEJ1ZmZlcigpOworICAgICAgICAgICAgICAgIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB+aXRlcmF0b3IoKQorICAgICAgICB7CisgICAg
ICAgICAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiAmbV9kaXNwbGF5TGlzdCA9
PSAmb3RoZXIubV9kaXNwbGF5TGlzdCAmJiBtX2N1cnNvciA9PSBvdGhlci5tX2N1cnNvcjsgfQor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICB2b2lkIG9wZXJhdG9yKysoKSB7IGFkdmFuY2Uo
KTsgfQorICAgICAgICBzdGQ6OnBhaXI8SXRlbUhhbmRsZSwgT3B0aW9uYWw8RmxvYXRSZWN0Pj4g
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyBtX2N1cnJlbnRJdGVtLCBtX2N1cnJlbnRFeHRl
bnQgfTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
c2l6ZU9mRml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXMgPSAyNTY7CisKKyAgICAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUb0VuZCgpOworICAgICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkdmFuY2Uo
KTsKKyAgICAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OworCisgICAgICAgIGNvbnN0IERpc3BsYXlM
aXN0JiBtX2Rpc3BsYXlMaXN0OworICAgICAgICB1aW50OF90KiBtX2N1cnNvciB7IG51bGxwdHIg
fTsKKyAgICAgICAgc2l6ZV90IG1fcmVhZE9ubHlCdWZmZXJJbmRleCB7IDAgfTsKKyAgICAgICAg
c2l6ZV90IG1fZHJhd2luZ0l0ZW1JbmRleCB7IDAgfTsKKyAgICAgICAgdWludDhfdCogbV9jdXJy
ZW50RW5kT2ZCdWZmZXIgeyBudWxscHRyIH07CisKKyAgICAgICAgdWludDhfdCBtX2ZpeGVkQnVm
ZmVyRm9yRGVjb2RlZEl0ZW1zW3NpemVPZkZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zXSB7IDAg
fTsKKyAgICAgICAgdWludDhfdCogbV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0geyBudWxs
cHRyIH07CisgICAgICAgIEl0ZW1IYW5kbGUgbV9jdXJyZW50SXRlbTsKKyAgICAgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBtX2N1cnJlbnRFeHRlbnQ7CisgICAgICAgIHNpemVfdCBtX2N1cnJlbnRJ
dGVtU2l6ZUluQnVmZmVyIHsgMCB9OworICAgICAgICBib29sIG1fY3VycmVudEl0ZW1FeGlzdHNJ
blRlbXBvcmFyeUJ1ZmZlciB7IGZhbHNlIH07CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkltbWVkaWF0ZWx5TW92ZVRvRW5kOjpZZXMgfTsg
fQogCiBwcml2YXRlOgotICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4mJiBpdGVtKQotICAgIHsK
LSAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICAgICAgcmV0dXJuIG1f
bGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAgfQorICAgIEl0ZW1CdWZmZXIqIGl0ZW1CdWZmZXJJZkV4
aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuZ2V0KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVyKCk7CiAKLSAgICAvLyBMZXNzIGVmZmljaWVudCBhcHBl
bmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tpbmcgcmVwbGF5LgotICAgIHZvaWQgYXBwZW5kSXRlbShJ
dGVtJiBpdGVtKQorICAgIHZvaWQgYWRkRHJhd2luZ0l0ZW1FeHRlbnQoT3B0aW9uYWw8RmxvYXRS
ZWN0PiYmIGV4dGVudCkKICAgICB7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoaXRlbSk7CisgICAg
ICAgIEFTU0VSVChtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk7CisgICAgICAgIG1fZHJhd2lu
Z0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZNb3ZlKGV4dGVudCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgY29uc3QgSXRlbSYpOworICAg
IHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7
CiAKLSAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQotCi0g
ICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJdGVtQnVm
ZmVyPiBtX2l0ZW1zOworICAgIFZlY3RvcjxPcHRpb25hbDxGbG9hdFJlY3Q+PiBtX2RyYXdpbmdJ
dGVtRXh0ZW50czsKKyAgICBib29sIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzIHsgdHJ1ZSB9
OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEaXNwbGF5TGlzdDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2xp
c3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgordm9pZCBE
aXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQogewotICAgIE9wdGlvbmFsPHVpbnQ2
NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBpdGVtQ291bnQ7Ci0gICAgaWYgKCFpdGVt
Q291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBEaXNwbGF5TGlzdCBk
aXNwbGF5TGlzdDsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCAqaXRlbUNvdW50OyBp
KyspIHsKLSAgICAgICAgYXV0byBpdGVtID0gSXRlbTo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAg
ICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gZGVjb2RlIGFsbCB0eXBlcywgZmFpbGluZyB0byBkZWNv
ZGUgYW4gaXRlbSBzaG91bGQgdHVybiBpbnRvIGEgZGVjb2RlIGZhaWx1cmUuCi0gICAgICAgIC8v
IEZvciBub3csIHdlIGp1c3QgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAgICAgIGlmICghaXRlbSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92
ZSgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5TGlzdDsKKyAgICBpdGVtQnVm
ZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIH0gLy8g
RGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBmN2NhNmJiZmZkOThmYTBkZjY4
YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4wODFjZWM3OWUzYzlhZTJhMjgwNGMwMTUxZWVhZjNjNWIy
OWI5Njc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBE
cmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwg
Q0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1cGRhdGVTdHJva2VDb2xvcihDR0dTdGF0ZUdldFN0cm9r
ZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0
ZSkpOwogCi0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6
OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0
aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwg
Y3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2Rl
KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oKm1fb3JpZ2luYWxGb250LCBnbHlw
aHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgY3VycmVu
dFRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4Lm1hcFBvaW50KHBv
c2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CiAKICAgICBtX293bmVyLmNvbmNhdENUTShp
bnZlcnNlQ1RNRml4dXApOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXRlCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAogICAgIGF1dG8g
aW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIuYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgcmVjdCwge3sgfSwg
aW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KSk7Cisg
ICAgbV9vd25lci5hcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9h
dFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VP
cmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHkt
ZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgogICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggMjNhYzMyNGI3YjAwYTllMTZhNTZh
ZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNiYmNhOWE4NTg0ZWFhZWY2
YTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtNDMsNyArNDMsNyBAQCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIpCiAKIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhz
OjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKSk7CisgICAg
bV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9v
dGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmlu
ZGV4IDIzYWMzMjRiN2IwMGE5ZTE2YTU2YWQ2NzBjZTA0Y2ZhNzdmYzlmYTguLjE0YzBlYzcyYzQw
ZTBlODhiMTYzYmJjYTlhODU4NGVhYWVmNmE2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAtNDMsNyArNDMs
NyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3du
ZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxp
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmluZGV4
IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdjYzAuLjk2ZTRiMWVmZjk4MWU0
MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAKICAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdp
bmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJlY29y
ZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0
dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNwbGF5TGlzdCB0YWtlRGlzcGxh
eUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxpc3QsIHsgfSk7IH0KICAg
ICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAg
ICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNw
bGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXllZERpc3BsYXlMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4OTkwNjJjMjY0
M2E3ZmU2NDhjYWE1NmJhNzM4ZjhiZGI0YjkxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmNwcApAQCAtMCwwICsxLDYzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKKworI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCisjaWYgIWRlZmluZWQoTkRFQlVH
KSB8fCAhTE9HX0RJU0FCTEVECitDU3RyaW5nIEl0ZW1IYW5kbGU6OmRlc2NyaXB0aW9uKCkgY29u
c3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0aGlzOworICAgIHJldHVybiB0
cy5yZWxlYXNlKCkudXRmOCgpOworfQorI2VuZGlmCisKK3ZvaWQgSXRlbUhhbmRsZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2F2ZTogeworICAgICAgICBnZXQ8U2F2ZT4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7
CisgICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBnZXQ8VHJh
bnNsYXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB7
CisgICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBnZXQ8
Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIGdldDxTZXRDVE0+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsR3JhZGll
bnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxs
Q29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgZ2V0PFNldElubGlu
ZVN0cm9rZUNvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBnZXQ8U2V0
U3Ryb2tlVGhpY2tuZXNzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIGdldDxTZXRTdGF0ZT4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogeworICAg
ICAgICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogeworICAgICAgICBnZXQ8
U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBnZXQ8Q2xlYXJTaGFk
b3c+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcDogeworICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB7CisgICAg
ICAgIGdldDxDbGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBP
dXRUb1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRoPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0lt
YWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAg
ICAgICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7Cisg
ICAgICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsK
KyAgICAgICAgZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAg
ICAgICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBn
ZXQ8RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAgICAgZ2V0PERyYXdSZWN0Pigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lOiB7CisgICAgICAgIGdldDxEcmF3TGluZT4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JU
ZXh0OiB7CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6IHsKKyAgICAgICAgZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgZ2V0PERyYXdFbGxpcHNlPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRo
OiB7CisgICAgICAgIGdldDxEcmF3UGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAg
ICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7Cisg
ICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAg
Z2V0PEZpbGxSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxs
UmVjdFdpdGhDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBnZXQ8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAg
IGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAg
ICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxGaWxsSW5saW5lUGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0aD4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZTogeworICAgICAgICBnZXQ8RmlsbEVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
OiB7CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7
CisgICAgICAgIGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAg
ICAgICBnZXQ8U3Ryb2tlUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VJbmxpbmVQYXRoPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOiB7CisgICAgICAgIGdldDxTdHJva2VFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogewor
ICAgICAgICBnZXQ8Q2xlYXJSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAg
ICAgICAgZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6IHsKKyAgICAgICAgZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseUZpbGxQYXR0ZXJuPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBnZXQ8QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCit7CisgICAgc3dpdGNo
ICh0eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAg
IGdldDxDbGlwT3V0VG9QYXRoPigpLn5DbGlwT3V0VG9QYXRoKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQ
YXRoPigpLn5DbGlwUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPigpLn5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBn
ZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7Cisg
ICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkufkRyYXdGb2N1c1JpbmdSZWN0cygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsK
KyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkufkRyYXdHbHlwaHMoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERy
YXdJbWFnZT4oKS5+RHJhd0ltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZm
ZXI+KCkufkRyYXdJbWFnZUJ1ZmZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0Zv
clRleHQ+KCkufkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRp
dmVJbWFnZT4oKS5+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5E
cmF3UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdQYXR0ZXJuOiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5+RHJhd1BhdHRlcm4oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFn
ZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkufkRyYXdUaWxlZEltYWdlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRT
Y2FsZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0Pigp
Ln5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRo
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3I6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdp
dGhDb2xvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4o
KS5+RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAgICBnZXQ8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KCkufkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7
CisgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogewor
ICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBn
ZXQ8U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRlPigp
Ln5TZXRTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuflN0cm9rZVBhdGgoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNj
YWxlRmFjdG9yOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8QXBwbHlGaWxsUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQYXR0ZXJuPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxCZWdpblRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxD
bGVhclJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcE91dD46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0xpbmU+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJh
d1JlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Rmls
bEVsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbElu
bGluZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxGaWxsUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UGFpbnRGcmFt
ZUZvck1lZGlhPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0
Q1RNPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PFNldElubGluZUZpbGxHcmFkaWVudD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VD
b2xvcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
ZXRNaXRlckxpbWl0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBz
ZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTdHJva2VFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBh
dGg6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8U3Ryb2tlSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlUmVjdD46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VHJh
bnNsYXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworYm9v
bCBJdGVtSGFuZGxlOjppc0RyYXdpbmdJdGVtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0odHlwZSgpKTsKK30KKworSXRlbUJ1ZmZlcjo6
SXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhhbmRsZXMpCisgICAgOiBtX3JlYWRPbmx5
QnVmZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQorCitJdGVtQnVmZmVyOjpJdGVtQnVmZmVy
KCkgPSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZlcigpCit7CisgICAgY2xlYXIo
KTsKK30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYgb3RoZXIpCisgICAg
OiBtX3JlYWRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRpbmdDbGllbnQsIG51
bGxwdHIpKQorICAgICwgbV93cml0aW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0
aW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1
ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0ZWRCdWZm
ZXJzLCB7IH0pKQorICAgICwgbV9hbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9yZWFkT25seUJ1ZmZlcnMoc3RkOjpl
eGNoYW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9KSkKKyAgICAsIG1fd3JpdGFibGVC
dWZmZXIoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlQnVmZmVyLCB7IH0pKQorICAgICwg
bV93cml0dGVuTnVtYmVyT2ZCeXRlcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdHRlbk51bWJl
ck9mQnl0ZXMsIDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVtQnVmZmVyOjpvcGVyYXRvcj0o
SXRlbUJ1ZmZlciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0NsaWVudCA9IHN0ZDo6ZXhjaGFu
Z2Uob3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX3dyaXRpbmdDbGllbnQg
PSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cik7CisgICAgbV9p
dGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9p
dGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX2FsbG9jYXRlZEJ1
ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAg
ICBtX3JlYWRPbmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZl
cnMsIHsgfSk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93
cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0gc3RkOjpl
eGNoYW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0l0ZW1CdWZmZXJIYW5kbGUgSXRlbUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1ZmZlcihz
aXplX3QgY2FwYWNpdHkpCit7CisgICAgaWYgKG1fd3JpdGluZ0NsaWVudCkgeworICAgICAgICBp
ZiAoYXV0byBoYW5kbGUgPSBtX3dyaXRpbmdDbGllbnQtPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNp
dHkpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIg
c2l6ZV90IGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkgPSAxIDw8IDEwOworCisgICAgYXV0byBu
ZXdCdWZmZXJDYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBkZWZhdWx0SXRlbUJ1ZmZlckNh
cGFjaXR5KTsKKyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihm
YXN0TWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzLmFw
cGVuZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0
ZSgpLCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6
Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+
JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBtX3JlYWRP
bmx5QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxlKTsKKworICAgIGlmIChtX3dy
aXRhYmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMpCisgICAgICAgIG1hcEZ1bmN0
aW9uKHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEs
IG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6Y2xlYXIo
KQoreworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5nZShtX2l0ZW1zVG9EZXN0cm95
SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBpdGVtLmRlc3Ryb3koKTsKKworICAg
IGZvciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZShtX2FsbG9jYXRlZEJ1ZmZlcnMsIHsg
fSkpCisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisKKyAgICBtX3JlYWRPbmx5QnVmZmVycy5j
bGVhcigpOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSB7IH07CisgICAgbV93cml0dGVuTnVtYmVy
T2ZCeXRlcyA9IDA7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZO
ZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpCit7CisgICAgaWYgKG1fd3JpdHRlbk51bWJlck9m
Qnl0ZXMgKyBudW1iZXJPZkJ5dGVzIDw9IG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbmV4dEJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZmZXIobnVt
YmVyT2ZCeXRlcyk7CisgICAgYm9vbCBoYWRQcmV2aW91c0J1ZmZlciA9IG1fd3JpdGFibGVCdWZm
ZXI7CisgICAgYXV0byBwcmV2aW91c0J1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0YWJsZUJ1
ZmZlciwgeyB9KTsKKyAgICBwcmV2aW91c0J1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhjaGFuZ2Uo
bV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAgaWYgKGhhZFByZXZpb3VzQnVmZmVyKQor
ICAgICAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShwcmV2aW91c0J1ZmZlcikp
OworCisgICAgbV93cml0YWJsZUJ1ZmZlciA9IFdURk1vdmUobmV4dEJ1ZmZlcik7Cit9CisKK3Zv
aWQgSXRlbUJ1ZmZlcjo6YXBwZW5kRGF0YUFuZExlbmd0aChSZWY8U2hhcmVkQnVmZmVyPiYmIGRh
dGEsIHVpbnQ4X3QqIGxvY2F0aW9uKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4o
bG9jYXRpb24pWzBdID0gZGF0YS0+c2l6ZSgpOworCisgICAgYXV0byogc3RhcnRPZlBhZGRpbmcg
PSBsb2NhdGlvbiArIHNpemVvZihzaXplX3QpOworICAgIHNpemVfdCBwYWRkaW5nID0gKGFsaWdu
b2YodWludDY0X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0T2ZQYWRkaW5n
KSAlIGFsaWdub2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0X3QpOworICAgIGF1dG8qIHN0
YXJ0T2ZEYXRhID0gc3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nOworICAgIG1lbWNweShzdGFydE9m
RGF0YSwgZGF0YS0+ZGF0YUFzVUludDhQdHIoKSwgZGF0YS0+c2l6ZSgpKTsKKworICAgIG1fd3Jp
dHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpICsg
cGFkZGluZyArIGRhdGEtPnNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMzJlOTQ1MzkwNzI4ZmE3MTZiNDkzZDg0MTVkN2ExNDU4OTNh
MGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBl
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
KworY2xhc3MgRGlzcGxheUxpc3Q7CisKK2VudW0gSXRlbUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsg
fTsKK3VzaW5nIEl0ZW1CdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJdGVtQnVm
ZmVySWRlbnRpZmllclR5cGU+OworCisvLyBBbiBJdGVtQnVmZmVySGFuZGxlIHdyYXBzIGEgcG9p
bnRlciB0byBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGRpc3BsYXkgbGlzdCBpdGVtIGRhdGEuCitz
dHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZSB7CisgICAgSXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRp
ZmllcjsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBjYXBhY2l0
eSB7IDAgfTsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgqdGhpcyk7
IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRhOyB9Cit9OworCit1
c2luZyBJdGVtQnVmZmVySGFuZGxlcyA9IFZlY3RvcjxJdGVtQnVmZmVySGFuZGxlLCAyPjsKKwor
Ly8gQW4gSXRlbUhhbmRsZSB3cmFwcyBhIHBvaW50ZXIgdG8gYW4gSXRlbVR5cGUsIGZvbGxvd2Vk
IGltbWVkaWF0ZWx5IGJ5IGFuIGl0ZW0gb2YgdGhhdCB0eXBlLgorc3RydWN0IEl0ZW1IYW5kbGUg
eworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpOworICAgIHZvaWQgZGVzdHJveSgpOworICAgIGJvb2wgaXNEcmF3aW5nSXRl
bSgpIGNvbnN0OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCp0aGlz
KTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWRhdGE7IH0KKworI2lm
ICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIENTdHJpbmcgZGVzY3JpcHRp
b24oKSBjb25zdDsKKyNlbmRpZgorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PEl0ZW1UeXBlPihkYXRhWzBdKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKHR5cGUoKSk7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaXMoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gVDo6aXRlbVR5cGU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUJiBnZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzPFQ+KCkpOworICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZkYXRhW3NpemVvZihJdGVtVHlwZSldKTsKKyAgICB9Cit9
OworCitjbGFzcyBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgSXRlbUJ1ZmZl
ckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShJdGVtSGFuZGxlKSBjb25zdCA9IDA7Cit9OworCitj
bGFzcyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRl
bUJ1ZmZlclJlYWRpbmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgT3B0aW9uYWw8SXRlbUhh
bmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgPSAw
OworfTsKKworLy8gQW4gSXRlbUJ1ZmZlciBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRh
LCBhbmQgY29uc2lzdHMgb2YgYSByZWFkd3JpdGUgSXRlbUJ1ZmZlckhhbmRsZSAodG8gd2hpY2gg
ZGlzcGxheQorLy8gbGlzdCBpdGVtcyBhcmUgYXBwZW5kZWQpIGFzIHdlbGwgYXMgYSBudW1iZXIg
b2YgcmVhZG9ubHkgSXRlbUJ1ZmZlckhhbmRsZXMuIEl0ZW1zIGFyZSBhcHBlbmRlZCB0byB0aGUg
cmVhZHdyaXRlCisvLyBidWZmZXIgdW50aWwgYWxsIGF2YWlsYWJsZSBjYXBhY2l0eSBpcyBleGhh
dXN0ZWQsIGF0IHdoaWNoIHBvaW50IHdlIHdpbGwgbW92ZSB0aGlzIHdyaXRhYmxlIGhhbmRsZSB0
byB0aGUgbGlzdAorLy8gb2YgcmVhZG9ubHkgaGFuZGxlcy4KK2NsYXNzIEl0ZW1CdWZmZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEl0ZW1CdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGxheUxpc3Q7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBJdGVtQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkl0ZW1CdWZmZXIo
KTsKKyAgICBJdGVtQnVmZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYpOworCisgICAgV0VCQ09SRV9F
WFBPUlQgSXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1C
dWZmZXImIG9wZXJhdG9yPShJdGVtQnVmZmVyJiYpOworCisgICAgc2l6ZV90IHNpemVJbkJ5dGVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3Ig
KGF1dG8gYnVmZmVyIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgICAgICByZXN1bHQgKz0g
YnVmZmVyLmNhcGFjaXR5OworICAgICAgICByZXN1bHQgKz0gbV93cml0dGVuTnVtYmVyT2ZCeXRl
czsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzICYmIG1fcmVhZE9ubHlCdWZmZXJzLmlzRW1wdHkoKTsKKyAgICB9CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6
ZV90KTsKKworICAgIC8vIEl0ZW1CdWZmZXI6OmFwcGVuZDxUPiguLi4pIGFwcGVuZHMgYSBkaXNw
bGF5IGxpc3QgaXRlbSBvZiB0eXBlIFQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudAorICAgIC8v
IHdyaXRhYmxlIGJ1ZmZlciBoYW5kbGU7IGlmIHJlbWFpbmluZyBidWZmZXIgY2FwYWNpdHkgaXMg
aW5zdWZmaWNpZW50IHRvIHN0b3JlIHRoZSBpdGVtLCBhCisgICAgLy8gbmV3IGJ1ZmZlciB3aWxs
IGJlIGFsbG9jYXRlZCAoZWl0aGVyIGJ5IHRoZSBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCwgaWYg
c2V0LCBvciBieSB0aGUgaXRlbQorICAgIC8vIGJ1ZmZlciBpdHNlbGYgaWYgdGhlcmUgaXMgbm8g
Y2xpZW50KS4gSXRlbXMgYXJlIHBsYWNlZCBiYWNrLXRvLWJhY2sgaW4gdGhlc2UgaXRlbSBidWZm
ZXJzLAorICAgIC8vIHdpdGggYW4gSXRlbVR5cGUgc2VwYXJhdGluZyBlYWNoIGl0ZW0uCisgICAg
Ly8KKyAgICAvLyBJZiBhIHdyaXRpbmcgY2xpZW50IGlzIHByZXNlbnQgYW5kIHJlcXVpcmVzIGN1
c3RvbSBlbmNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSBULCB0aGUKKyAgICAvLyBpdGVt
IGJ1ZmZlciB3aWxsIGFzayB0aGUgY2xpZW50IGZvciBhbiBvcGFxdWUgU2hhcmVkQnVmZmVyIGNv
bnRhaW5pbmcgZW5jb2RlZCBkYXRhIGZvciB0aGUKKyAgICAvLyBpdGVtLiBUaGlzIGVuY29kZWQg
ZGF0YSBpcyB0aGVuIGFwcGVuZGVkIHRvIHRoZSBpdGVtIGJ1ZmZlciwgd2l0aCBwYWRkaW5nIHRv
IGVuc3VyZSB0aGF0CisgICAgLy8gdGhlIHN0YXJ0IG9mIHRoaXMgZGF0YSBpcyBhbGlnbmVkIHRv
IDggYnl0ZXMsIGlmIG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1pbmcgZW5jb2RlZCBpdGVtCisgICAg
Ly8gZGF0YSwgYSBjb3JyZXNwb25kaW5nIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHdpbGwgYmUg
cmVxdWlyZWQgdG8gY29udmVydCB0aGlzIGVuY29kZWQgZGF0YQorICAgIC8vIGJhY2sgaW50byBh
biBpdGVtIG9mIHR5cGUgVC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdz
PiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSB8fCAhVDo6aXNJbmxp
bmVJdGVtKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXpl
b2YoSXRlbVR5cGUpICsgc2l6ZW9mKFQpOworCisgICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVt
ICYmIG1fd3JpdGluZ0NsaWVudCkgeworICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgaXRlbUJ1
ZmZlcltzaXplT2ZUeXBlQW5kSXRlbV07CisgICAgICAgICAgICBpdGVtQnVmZmVyWzBdID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgbmV3IChpdGVtQnVm
ZmVyICsgc2l6ZW9mKEl0ZW1UeXBlKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwor
ICAgICAgICAgICAgaWYgKGF1dG8gc2hhcmVkQnVmZmVyID0gbV93cml0aW5nQ2xpZW50LT5lbmNv
ZGVJdGVtKHsgaXRlbUJ1ZmZlciB9KSkgeworICAgICAgICAgICAgICAgIHN3YXBXcml0YWJsZUJ1
ZmZlcklmTmVlZGVkKHNoYXJlZEJ1ZmZlci0+c2l6ZSgpICsgc2l6ZW9mKEl0ZW1UeXBlKSArIHNp
emVvZihzaXplX3QpICsgYWxpZ25vZih1aW50NjRfdCkpOworICAgICAgICAgICAgICAgIG1fd3Jp
dGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmREYXRhQW5kTGVuZ3Ro
KHNoYXJlZEJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBt
X3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICsgc2l6ZW9mKEl0ZW1UeXBlKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2FwV3JpdGFibGVC
dWZmZXJJZk5lZWRlZChzaXplT2ZUeXBlQW5kSXRlbSk7CisKKyAgICAgICAgaWYgKCFzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlKQorICAgICAgICAgICAgbV9pdGVtc1Rv
RGVzdHJveUluQWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoeyAmbV93cml0YWJsZUJ1ZmZlci5kYXRh
W21fd3JpdHRlbk51bWJlck9mQnl0ZXNdIH0pOworCisgICAgICAgIHVuY2hlY2tlZEFwcGVuZDxU
PihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHZvaWQgc2V0Q2xp
ZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpIHsgbV93cml0aW5nQ2xpZW50ID0g
Y2xpZW50OyB9CisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNs
aWVudCkgeyBtX3JlYWRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBJdGVtQnVmZmVySGFuZGxlcyYgcmVhZE9ubHlCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFkT25seUJ1ZmZlcnM7IH0KKyAgICB2b2lkIGZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZv
aWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kRGF0YUFuZExlbmd0aChSZWY8U2hhcmVk
QnVmZmVyPiYmLCB1aW50OF90Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4g
QXJncz4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAg
ICBhdXRvKiBzdGFydE9mSXRlbSA9ICZtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVt
YmVyT2ZCeXRlc107CisgICAgICAgIHN0YXJ0T2ZJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oVDo6aXRlbVR5cGUpOworICAgICAgICBuZXcgKHN0YXJ0T2ZJdGVtICsgc2l6ZW9mKEl0ZW1U
eXBlKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBtX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVtSW5CeXRlcyhUOjpp
dGVtVHlwZSk7CisgICAgfQorCisgICAgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIG1fcmVhZGlu
Z0NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogbV93cml0
aW5nQ2xpZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxJdGVtSGFuZGxlPiBtX2l0ZW1zVG9E
ZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzOworICAgIFZlY3Rvcjx1aW50OF90Kj4gbV9hbGxvY2F0
ZWRCdWZmZXJzOworICAgIEl0ZW1CdWZmZXJIYW5kbGVzIG1fcmVhZE9ubHlCdWZmZXJzOworICAg
IEl0ZW1CdWZmZXJIYW5kbGUgbV93cml0YWJsZUJ1ZmZlcjsKKyAgICBzaXplX3QgbV93cml0dGVu
TnVtYmVyT2ZCeXRlcyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
aW5kZXggNTZiNTdmMDdjM2MzYzkzY2QzZjAxOTBmNWQ0YWNkMWJiNmMyYTRlOS4uNzIyM2Q0NTU3
YzdmNzdiNjEwOTFhNmU3M2M5MzQwYTMzNjk0OTEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcApAQCAtNDMsMjA0ICs0MywxNiBAQCBuYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewogLy8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkK
IHN0YXRpYyBjb25zdCBmbG9hdCBwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoID0gMzsKIAotI2lmICFk
ZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotV1RGOjpDU3RyaW5nIEl0ZW06OmRlc2Ny
aXB0aW9uKCkgY29uc3QKLXsKLSAgICBUZXh0U3RyZWFtIHRzOwotICAgIHRzIDw8ICp0aGlzOwot
ICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOwotfQotI2VuZGlmCi0KLUl0ZW06Okl0ZW0o
SXRlbVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1JdGVtOjp+SXRlbSgp
ID0gZGVmYXVsdDsKLQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0p
Ci17Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9y
ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U2NhbGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8U2V0Q1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29u
Y2F0ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q29uY2F0ZW5hdGVD
VE0+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0
cm9rZVRoaWNrbmVzcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRM
aW5lQ2FwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRM
aW5lSm9pbj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PENsZWFyU2hhZG93PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cFBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxE
cmF3R2x5cGhzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdUaWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0
ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxp
cHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJvdW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVk
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihpdGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbElu
bGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RmlsbEVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4o
aXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tl
SW5saW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0
aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAg
IGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5
RmlsbFBhdHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVt
JiBpdGVtKQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0g
ICAgaWYgKGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsK
LSAgICBlbHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKLSAgICAKLSAgICB0cy5lbmRHcm91
cCgpOwotICAgIHJldHVybiB0czsKLX0KLQotRHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKEl0ZW1U
eXBlIHR5cGUpCi0gICAgOiBJdGVtKHR5cGUpCi17Ci19Ci0KLURyYXdpbmdJdGVtOjp+RHJhd2lu
Z0l0ZW0oKSA9IGRlZmF1bHQ7Ci0KLVNhdmU6OlNhdmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6
U2F2ZSkKLXsKLX0KLQotU2F2ZTo6flNhdmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2F2ZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2F2ZSgp
OwogfQogCi1SZXN0b3JlOjpSZXN0b3JlKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUp
Ci17Ci19Ci0KLVJlc3RvcmU6On5SZXN0b3JlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJlc3RvcmU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJl
c3RvcmUoKTsKIH0KIAotVHJhbnNsYXRlOjpUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAsIG1feCh4KQotICAgICwgbV95KHkp
Ci17Ci19Ci0KLVRyYW5zbGF0ZTo6flRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBUcmFu
c2xhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LnRyYW5zbGF0ZShtX3gsIG1feSk7CkBAIC0yNTQsMTQgKzY2LDYgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVJvdGF0ZTo6Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgIDog
SXRlbShJdGVtVHlwZTo6Um90YXRlKQotICAgICwgbV9hbmdsZShhbmdsZSkKLXsKLX0KLQotUm90
YXRlOjp+Um90YXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUpOwpA
QCAtMjc0LDE0ICs3OCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TY2FsZTo6
U2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUp
Ci0gICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotU2NhbGU6On5TY2FsZSgpID0gZGVmYXVsdDsK
LQogdm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuc2NhbGUobV9zaXplKTsKQEAgLTI5NCwxNCArOTAsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1TZXRDVE06OlNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldENUTSkKLSAgICAsIG1fdHJhbnNm
b3JtKHRyYW5zZm9ybSkKLXsKLX0KLQotU2V0Q1RNOjp+U2V0Q1RNKCkgPSBkZWZhdWx0OwotCiB2
b2lkIFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMxNCwxNCArMTAyLDYgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRl
bSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1Db25j
YXRlbmF0ZUNUTTo6fkNvbmNhdGVuYXRlQ1RNKCkgPSBkZWZhdWx0OwotCiB2b2lkIENvbmNhdGVu
YXRlQ1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzM1LDggKzExNSw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNU
TSYgaXRlbSkKIH0KIAogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5s
aW5lRmlsbEdyYWRpZW50KQotICAgICwgbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKKyAgICA6IG1f
ZGF0YShncmFkaWVudC5kYXRhKCkpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
bihncmFkaWVudC5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCiAgICAgLCBtX3NwcmVhZE1ldGhv
ZChncmFkaWVudC5zcHJlYWRNZXRob2QoKSkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQpAQCAtMzU4LDE0ICsxMzcs
OCBAQCBSZWY8R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25z
dAogICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4g
U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChncmFkaWVu
dCkpOwotfQotCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChm
bG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21h
eENvbG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1l
dGhvZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZGF0YSkKKyAgICA6
IG1fZGF0YShkYXRhKQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uKQogICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9k
KQogICAgICwgbV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKQEAgLTM3Nyw4ICsxNTAs
NiBAQCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBv
ZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgUwogICAgIH0KIH0KIAotU2V0SW5saW5lRmlsbEdy
YWRpZW50Ojp+U2V0SW5saW5lRmlsbEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElu
bGluZUZpbGxHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGlmIChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KQpAQCAtNDA0
LDEzICsxNzUsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50JikKICAgICByZXR1cm4gdHM7CiB9CiAKLVJl
ZjxTZXRJbmxpbmVGaWxsQ29sb3I+IFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVG
aWxsQ29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZUZpbGxDb2xvcjo6flNldElubGlu
ZUZpbGxDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihjb2xvcigpKTsKQEAgLTQyMiwxMyArMTg2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxDb2xvciYgc3RhdGUp
CiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+IFNldElubGlu
ZVN0cm9rZUNvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZVN0cm9rZUNvbG9yKGNvbG9yRGF0YSkpOwotfQot
Ci1TZXRJbmxpbmVTdHJva2VDb2xvcjo6flNldElubGluZVN0cm9rZUNvbG9yKCkgPSBkZWZhdWx0
OwotCiB2b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvcigpKTsKQEAg
LTQ0MCwxMyArMTk3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLVJlZjxTZXRTdHJva2VUaGlja25lc3M+IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRl
KGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdHJva2VU
aGlja25lc3ModGhpY2tuZXNzKSk7Ci19Ci0KLVNldFN0cm9rZVRoaWNrbmVzczo6flNldFN0cm9r
ZVRoaWNrbmVzcygpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcyhtX3RoaWNrbmVzcyk7CkBAIC00NTksMTkgKzIwOSwxNSBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tu
ZXNzJiBzdGF0ZSkKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxh
Z3MpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUs
IGZsYWdzKQorICAgIDogbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCiB7CiB9CiAKIFNldFN0YXRlOjpT
ZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0g
ICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGVDaGFuZ2Up
CisgICAgOiBtX3N0YXRlKHN0YXRlQ2hhbmdlKQogewogfQogCi1TZXRTdGF0ZTo6flNldFN0YXRl
KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKQEAgLTQ4MywxNCAr
MjI5LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNldFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVDYXA6OlNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNh
cCkKLSAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQotewotfQotCi1TZXRMaW5lQ2FwOjp+U2V0TGlu
ZUNhcCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7
CkBAIC01MDIsMTUgKzI0MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQogICAgIHJldHVybiB0czsKIH0K
IAotU2V0TGluZURhc2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBm
bG9hdCBkYXNoT2Zmc2V0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCi0gICAg
LCBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkK
LXsKLX0KLQotU2V0TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKLQogdm9pZCBT
ZXRMaW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7CkBAIC01MjMs
MTQgKzI1Miw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRM
aW5lSm9pbjo6U2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbikKLSAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCi17Ci19Ci0KLVNl
dExpbmVKb2luOjp+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUpvaW46
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNl
dExpbmVKb2luKG1fbGluZUpvaW4pOwpAQCAtNTQyLDE0ICsyNjMsNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVK
b2luKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChm
bG9hdCBtaXRlckxpbWl0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKLSAg
ICAsIG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotewotfQotCi1TZXRNaXRlckxpbWl0Ojp+U2V0
TWl0ZXJMaW1pdCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRNaXRlckxpbWl0
KG1fbWl0ZXJMaW1pdCk7CkBAIC01NjEsMjYgKzI3NCwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1p
dCkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsZWFyU2hhZG93OjpDbGVhclNoYWRvdygpCi0gICAg
OiBJdGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKLXsKLX0KLQotQ2xlYXJTaGFkb3c6On5DbGVh
clNoYWRvdygpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKIH0K
IAotQ2xpcDo6Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBl
OjpDbGlwKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXA6On5DbGlwKCkgPSBkZWZh
dWx0OwotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTU5MiwxNCArMjkwLDYgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0OjpDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgLCBtX3JlY3QocmVjdCkK
LXsKLX0KLQotQ2xpcE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xp
cE91dChtX3JlY3QpOwpAQCAtNjExLDE0ICszMDEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKLUNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkK
LXsKLX0KLQotQ2xpcE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgQ2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNjMwLDE1ICszMTIsNiBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRv
UGF0aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBQYXRoOjpDbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNs
aXBQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQot
ewotfQotCi1DbGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBQYXRo
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGlwUGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAtNjUxLDE2ICszMjQsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFBhdGgmIGl0
ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQotICAgIDogSXRlbShJdGVt
VHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5h
dGlvbikKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotICAgICwgbV9kcmF3aW5nQ29t
bWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQotewotfQotCi1DbGlwVG9EcmF3aW5nQ29t
bWFuZHM6On5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobV9kZXN0aW5hdGlvbiwgbV9jb2xv
clNwYWNlLCBbJl0gKEdyYXBoaWNzQ29udGV4dCYgY2xpcHBpbmdDb250ZXh0KSB7CkBAIC02Nzcs
OCArMzQwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENsaXBUb0RyYXdpbmdDb21tYW5kcyYgaXRlbSkKIH0KIAogRHJhd0dseXBoczo6RHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYm
IGdseXBocywgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25z
dCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9k
ZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQotICAgICwgbV9mb250
KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250KG1ha2VSZWZQdHIoY29uc3Rf
Y2FzdDxGb250Jj4oZm9udCkpKQogICAgICwgbV9nbHlwaHMoV1RGTW92ZShnbHlwaHMpKQogICAg
ICwgbV9hZHZhbmNlcyhXVEZNb3ZlKGFkdmFuY2VzKSkKICAgICAsIG1fbG9jYWxBbmNob3IobG9j
YWxBbmNob3IpCkBAIC02ODgsOCArMzUwLDcgQEAgRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywKIH0K
IAogRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGlu
Z01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5
cGhzKQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250
KG1ha2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQogICAgICwgbV9sb2NhbEFuY2hv
cihsb2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9kZShzbW9vdGhpbmdNb2RlKQogewpA
QCAtNzAyLDE5ICszNjMsMTcgQEAgRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEcKICAgICBjb21wdXRl
Qm91bmRzKCk7CiB9CiAKLURyYXdHbHlwaHM6On5EcmF3R2x5cGhzKCkgPSBkZWZhdWx0OwotCiBp
bmxpbmUgR2x5cGhCdWZmZXIgRHJhd0dseXBoczo6Z2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgcmVzdWx0OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sIG1f
Zm9udC5nZXQoKSwgbV9hZHZhbmNlc1tpXSwgR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KTsKKyAgICAg
ICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgKm1fZm9udCwgbV9hZHZhbmNlc1tpXSwgR2x5cGhC
dWZmZXI6Om5vT2Zmc2V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIERyYXdHbHlw
aHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0
LmRyYXdHbHlwaHMobV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNp
emUoKSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBjb250ZXh0LmRyYXdH
bHlwaHMoKm1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBtX2dseXBocy5zaXplKCks
IGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoczo6
Y29tcHV0ZUJvdW5kcygpCkBAIC03MzQsMTQgKzM5Myw4IEBAIHZvaWQgRHJhd0dseXBoczo6Y29t
cHV0ZUJvdW5kcygpCiAgICAgfQogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdHbHlwaHM6
OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fYm91bmRzOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYu
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50IiwgaXRlbS5hbmNob3JQb2ludCgp
KTsKQEAgLTc1MCwxNyArNDAzLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1EcmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
RHJhd0ltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVz
dGluYXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3SW1hZ2U6On5EcmF3SW1h
Z2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwg
bV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzY4
LDI2ICs0MTAsMTIgQEAgdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVt
LmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJj
ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24o
KSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBv
aW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9p
bWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3Nv
dXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5n
KHNwYWNpbmcpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQotewotfQotCi1EcmF3VGlsZWRJbWFnZTo6fkRyYXdUaWxlZEltYWdlKCkgPSBkZWZhdWx0
OwotCiB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rl
c3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRp
bmdPcHRpb25zKTsKQEAgLTc5NSw3ICs0MjMsNiBAQCB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgic291cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwpAQCAtODA0LDIwICs0MzEsNiBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVk
SW1hZ2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2Nh
bGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdl
KGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNl
KHNvdXJjZSkKLSAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKLSAgICAs
IG1faFJ1bGUoaFJ1bGUpCi0gICAgLCBtX3ZSdWxlKHZSdWxlKQotICAgICwgbV9pbWFnZVBhaW50
aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd1RpbGVkU2NhbGVk
SW1hZ2U6On5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3VGls
ZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwg
bV9zb3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZSdWxlLCBtX2ltYWdlUGFp
bnRpbmdPcHRpb25zKTsKQEAgLTgyNSwyNCArNDM4LDE1IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVk
SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZFNjYWxl
ZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLURyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0lt
YWdlQnVmZmVyKQotICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCi0g
ICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotewotfQot
Ci1EcmF3SW1hZ2VCdWZmZXI6On5EcmF3SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KKyNpZiAh
ZGVmaW5lZChOREVCVUcpCitOT19SRVRVUk4KKyNlbmRpZgogdm9pZCBEcmF3SW1hZ2VCdWZmZXI6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRs
ZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtODUxLDcgKzQ1NSw2IEBAIHZvaWQgRHJhd0ltYWdlQnVm
ZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRlbnRpZmllciIsIGl0ZW0ucmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJl
Y3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0
ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODU5LDggKzQ2Miw3IEBAIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2VCdWZmZXImIGl0
ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUlt
YWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAg
LCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVj
dCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY4LDggKzQ3MCw2IEBAIERyYXdOYXRp
dmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJbWFnZTo6fkRyYXdOYXRpdmVJbWFn
ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZShtX2lt
YWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3QsIG1fc3JjUmVjdCwgbV9vcHRpb25z
KTsKQEAgLTg3Nyw3ICs0NzcsNiBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6
IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0IiwgaXRl
bS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3Rp
bmF0aW9uUmVjdCgpKTsKQEAgLTg4NSw4ICs0ODQsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogfQog
CiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShpbWFn
ZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0dGVy
blRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCiAgICAgLCBtX2Rlc3RpbmF0
aW9uKGRlc3RSZWN0KQpAQCAtODk2LDggKzQ5NCw2IEBAIERyYXdQYXR0ZXJuOjpEcmF3UGF0dGVy
bihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
CiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fdGls
ZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29wdGlvbnMp
OwpAQCAtOTA1LDcgKzUwMSw2IEBAIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJp
bWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRyYW5z
Zm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInRp
bGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTUsMTUgKzUxMCw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYg
aXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0OjpEcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9ib3JkZXJUaGlj
a25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3UmVjdDo6fkRyYXdSZWN0KCkgPSBk
ZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tuZXNz
KTsKQEAgLTkzMSwyMSArNTE3LDExIEBAIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVzcyIs
IGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0xpbmU6
OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICwgbV9wb2lu
dDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQotewotfQotCi1EcmF3TGluZTo6fkRy
YXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBi
b3VuZHM7CkBAIC05NjAsMTUgKzUzNiwxMyBAQCB2b2lkIERyYXdMaW5lOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0
aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
cG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQtMiIs
IGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRHJhd0xpbmVzRm9yVGV4dDo6
RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBG
bG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24oYmxv
Y2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQogICAgICwg
bV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fd2lkdGhzKHdpZHRocykKICAgICAs
IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3Nyw4ICs1NTEsNiBAQCBEcmF3TGluZXNGb3JU
ZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNv
bnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9yVGV4dCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBvaW50
KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7CkBA
IC05OTgsNyArNTcwLDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0Ojps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4dCYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9jYXRp
b24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5j
aG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwpAQCAt
MTAxMCwxNSArNTgxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLSAgICAs
IG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkKLXsKLX0KLQotRHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciht
X3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMSwxOSArNTkzLDEwIEBAIE9wdGlvbmFsPEZsb2F0UmVj
dD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0VsbGlwc2U6OkRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1EcmF3RWxsaXBz
ZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdFbGxpcHNlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3RWxsaXBz
ZShtX3JlY3QpOwpAQCAtMTA1NSwxNCArNjA4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogICAgIHJldHVy
biB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsKLX0K
LQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0aDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogI2lmIFVTRShDRykKQEAgLTEw
NzIsMjQgKzYxNywxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVtKQorc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBh
dGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgcmV0dXJuIHRz
OwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQotICAgICwgbV9wYXRo
KHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwgbV9vZmZzZXQob2Zmc2V0KQotICAg
ICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3VzUmluZ1BhdGg6On5EcmF3Rm9jdXNS
aW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3VzUmlu
ZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExMDQsNyArNjM3LDYg
QEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAvLyAgICB0cy5k
dW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBm
b3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExMTMsMTYg
KzY0NSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAKIERyYXdGb2N1c1JpbmdSZWN0czo6
RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAsIG1fcmVjdHMocmVjdHMpCisg
ICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLURyYXdGb2N1c1JpbmdSZWN0
czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5n
UmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpA
QCAtMTEzOSw3ICs2NjgsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdSZWN0
czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29ucwogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmluZ1Jl
Y3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExNDcsMTQgKzY3NSw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdDo6RmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxS
ZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxSZWN0Ojp+RmlsbFJlY3QoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7CkBAIC0xMTYyLDIwICs2
ODIsMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRoQ29s
b3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCi0gICAgLCBtX3JlY3QocmVjdCkK
LSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aENvbG9yOjp+RmlsbFJl
Y3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0
KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTgzLDIxICs2OTMsMTcgQEAgdm9pZCBGaWxsUmVjdFdp
dGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRo
Q29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgcmV0dXJuIHRzOwog
fQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBtX3JlY3QocmVjdCkKKyAgICA6IG1f
cmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAotRmlsbFJlY3RX
aXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgpID0gZGVmYXVsdDsKLQogdm9pZCBG
aWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsKQEAg
LTEyMDUsMjMgKzcxMSwxMSBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8v
IEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
ZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29t
cG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAg
ICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShibGVu
ZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6fkZpbGxDb21wb3NpdGVkUmVjdCgp
ID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIyOSw3ICs3MjMsNiBAQCB2b2lkIEZpbGxD
b21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENv
bXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdp
bmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0b3Io
KSk7CkBAIC0xMjM3LDE2ICs3MzAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogICAgIHJldHVy
biB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAgICAsIG1f
cmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5k
TW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZh
dWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9jb2xv
ciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NCwyMyArNzM3LDEyIEBAIHZvaWQgRmlsbFJvdW5kZWRS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJlY3Qm
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fcm91bmRlZEhv
bGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtMTI3OCw3ICs3NTAsNiBA
QCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQtaG9s
ZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg3LDE0ICs3NTgsNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxJbmxpbmVQ
YXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCi0gICAgLCBtX3BhdGhEYXRh
KHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOwpAQCAtMTMwMiwy
MSArNzY1LDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXRo
IiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAsIG1fcGF0aChwYXRo
KQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxQ
YXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNCwxOSArNzc4LDEwIEBAIHZvaWQgRmlsbFBhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAot
RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewot
fQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxF
bGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NCwxNCArNzg5LDEyIEBAIHZvaWQgRmls
bEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxpcHNl
JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVy
biB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURh
dGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQog
ICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoaW1hZ2VEYXRh
LmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJlc2Vy
dmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KICAgICAsIG1faW5wdXRGb3JtYXQo
aW5wdXRGb3JtYXQpCkBAIC0xMzYwLDggKzgwMyw3IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYK
IH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpCi0g
ICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAgICwg
bV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFnZURh
dGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNjksOCArODExLDkg
QEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1QdXRJbWFnZURhdGE6On5QdXRJbWFn
ZURhdGEoKSA9IGRlZmF1bHQ7Ci0KKyNpZiAhZGVmaW5lZChOREVCVUcpCitOT19SRVRVUk4KKyNl
bmRpZgogdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7
CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgpAQCAtMTM3OSw3ICs4
MjIsNiBAQCB2b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QK
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1
dEltYWdlRGF0YSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW5wdXRGb3JtYXQiLCBpdGVtLmlu
cHV0Rm9ybWF0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2VEYXRhU2l6ZSIsIGl0ZW0u
aW1hZ2VEYXRhKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3QiLCBpdGVt
LnNyY1JlY3QoKSk7CkBAIC0xMzg4LDMyICs4MzAsMTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1dEltYWdlRGF0YSYgaXRlbSkKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVGb3JNZWRp
YTo6Y3JlYXRlKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
ciwgZGVzdGluYXRpb24pKTsKLX0KLQotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFt
ZUZvck1lZGlhOjpjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFp
bnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KIFBhaW50RnJh
bWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhKQotICAgICwgbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkp
CisgICAgOiBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKICAgICAsIG1fZGVzdGlu
YXRpb24oZGVzdGluYXRpb24pCiB7CiB9CiAKLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKLXsKLX0KLQotUGFpbnRGcmFtZUZvck1lZGlhOjp+UGFpbnRGcmFt
ZUZvck1lZGlhKCkgPSBkZWZhdWx0OwotCisjaWYgIWRlZmluZWQoTkRFQlVHKQorTk9fUkVUVVJO
CisjZW5kaWYKIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAg
LTE0MjIsMjAgKzg0NywxMCBAQCB2b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFBhaW50RnJhbWVGb3JNZWRpYSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAotU3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VSZWN0KQotICAgICwg
bV9yZWN0KHJlY3QpCi0gICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgpCi17Ci19Ci0KLVN0cm9r
ZVJlY3Q6On5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IFN0
cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKQEAgLTE0NTAsNyArODY1LDYgQEAgdm9pZCBT
dHJva2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VSZWN0
JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRl
bSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkpOwogICAgIHJldHVybiB0
czsKQEAgLTE0NzMsMTkgKzg4NywxMCBAQCB2b2lkIFN0cm9rZVBhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJva2VFbGxpcHNl
OjpTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLVN0
cm9rZUVsbGlwc2U6On5TdHJva2VFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9h
dFJlY3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBjb250ZXh0LnN0
cm9rZVRoaWNrbmVzcygpOwpAQCAtMTUwMiw3ICs5MDcsNiBAQCB2b2lkIFN0cm9rZUVsbGlwc2U6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVsbGlwc2UmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwog
fQpAQCAtMTUyNiwzNyArOTMwLDEyIEBAIHZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlSW5saW5lUGF0aCYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0
cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBh
dGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGgpCi0g
ICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1TdHJva2VJbmxpbmVQYXRoOjp+U3Ry
b2tlSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQogCi1TdHJva2VQYXRoOjpTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQot
ewotfQotCi1TdHJva2VQYXRoOjp+U3Ryb2tlUGF0aCgpID0gZGVmYXVsdDsKLQotQ2xlYXJSZWN0
OjpDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkNsZWFyUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGVhclJlY3Q6
On5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVhclJlY3QobV9yZWN0
KTsKQEAgLTE1NjQsMTkgKzk0MywxMCBAQCB2b2lkIENsZWFyUmVjdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotICAgIDogRHJh
d2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAgLCBtX29wYWNp
dHkob3BhY2l0eSkKLXsKLX0KLQotQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6fkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwpAQCAtMTU4NCw1NyArOTU0LDI4IEBAIHZv
aWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3Bh
Y2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUVuZFRyYW5zcGFy
ZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi17Ci19Ci0KLUVuZFRyYW5zcGFyZW5jeUxheWVy
Ojp+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKICNpZiBVU0UoQ0cpCi1BcHBseVN0
cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpB
cHBseVN0cm9rZVBhdHRlcm4pCi17Ci19Ci0KLUFwcGx5U3Ryb2tlUGF0dGVybjo6fkFwcGx5U3Ry
b2tlUGF0dGVybigpID0gZGVmYXVsdDsKIAogdm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmFwcGx5U3Ry
b2tlUGF0dGVybigpOwogfQogCi1BcHBseUZpbGxQYXR0ZXJuOjpBcHBseUZpbGxQYXR0ZXJuKCkK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCi17Ci19Ci0KLUFwcGx5Rmls
bFBhdHRlcm46On5BcHBseUZpbGxQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFwcGx5Rmls
bFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KICNlbmRpZgogCi1BcHBseURldmljZVNjYWxl
RmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQotICAgIDog
SXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAgICAsIG1fc2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IpCi17Ci19Ci0KLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6On5BcHBseURl
dmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7CkBAIC0xNjQ2LDcgKzk4Nyw3
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBB
cHBseURldmljZVNjYWxlRmFjdG9yJiBpdGVtCiAgICAgcmV0dXJuIHRzOwogfQogCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5
cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbVR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEl0ZW1UeXBlOjpTYXZl
OiB0cyA8PCAic2F2ZSI7IGJyZWFrOwpAQCAtMTcxNywxNzIgKzEwNTgsMTcwIEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlw
ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7Ci0gICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBn
cm91cCh0cyk7CiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKLSAgICAvLyBGSVhNRTogTWFrZSBh
IG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBlbnVtZXJhdGlvbiBzd2l0
Y2hlcwogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKICAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxSb3RhdGU+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTY2FsZT4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldENUTT4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q29uY2F0ZW5h
dGVDVE0+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZp
bGxHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50Pigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0
U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3Ryb2tl
VGhpY2tuZXNzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxT
ZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVEYXNoPigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxTZXRMaW5lSm9pbj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENs
aXA+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxD
bGlwT3V0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91dD4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PENsaXBPdXRUb1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PENsaXBQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENs
aXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXBU
b0RyYXdpbmdDb21tYW5kcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0dseXBoczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdHbHlwaHM+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0lt
YWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxEcmF3VGlsZWRJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZFNj
YWxlZEltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1RpbGVkU2NhbGVk
SW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1
ZmZlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdO
YXRpdmVJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dHRlcm46Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UmVjdD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdSZWN0PigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0xpbmU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3TGluZT4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0Vs
bGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3RWxsaXBzZT4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1Bh
dGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQ
YXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxS
ZWN0V2l0aENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3Jh
ZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRS
ZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0ZW0pOwor
ICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZT4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RmlsbElubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxs
RWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxFbGxpcHNlPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxQYWludEZyYW1lRm9y
TWVkaWE+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxQYWludEZyYW1lRm9yTWVkaWE+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxTdHJva2VSZWN0PigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VQ
YXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlUGF0aD4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFN0cm9rZUVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8Q2xlYXJSZWN0PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I+KCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgLy8gSXRlbXMgd2l0
aCBubyBhZGRpdGlvbmFsIGRhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAppbmRl
eCBmMDE1YmU1ZTg2NjA2ZWNjMmY2Y2U4NTdjMWY3MTE2NzY5NGZlOGUzLi4yYTQ2MjZlOGViMzE1
MGQ4MTg1NGNmYjJhZTJhYjYzZTMyYzBhNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmgKQEAgLTUxLDMyMCArNTEsMTYzIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsK
IAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW0gOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBTYXZlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNp
dCBEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTYXZlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3aW5nSXRlbSgpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIHNldEV4
dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9Ci0gICAgY29uc3QgRmxv
YXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52YWx1ZSgpOyB9Ci0KLSAg
ICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9l
eHRlbnQpOyB9Ci0KLSAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMgZHJhd2luZyBvcGVyYXRp
b24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gRG9lcyBub3QgaW5jbHVkZSBlZmZldHMg
b2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAgICB2aXJ0dWFsIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLSAgICAvLyBTb21lIG9wZXJhdGlvbnMgKGUuZy4g
cHV0SW1hZ2VEYXRhKSBvcGVyYXRlIGluIGdsb2JhbCBib3VuZHMuIEZvciB0aGVzZSBvcGVyYXRp
b25zLCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLSAgICAvLyBJZiBhcHBsaWNhYmxlLCB0aGUgcmV0
dXJuIHZhbHVlIG5lZWRzIHRvIGluY2x1ZGUgdGhlIGVmZmVjdHMgb2Ygc2hhZG93cywgY2xpcHBp
bmcsIGV0Yy4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc0Ry
YXdpbmdJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGluYXRlcywgdGFraW5nIHNo
YWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLWNsYXNzIFNhdmUgOiBwdWJsaWMgSXRl
bSB7CitjbGFzcyBSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNhdmU+IGNyZWF0
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTYXZlKTsKLSAgICB9Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSZXN0b3Jl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5TYXZlKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPFNhdmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFNhdmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQog
fTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2F2ZTo6ZW5jb2RlKEVuY29kZXIm
KSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNh
dmU+PiBTYXZlOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFNhdmU6OmNyZWF0ZSgp
OwotfQotCi1jbGFzcyBSZXN0b3JlIDogcHVibGljIEl0ZW0geworY2xhc3MgVHJhbnNsYXRlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3JlKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5SZXN0b3JlKCk7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxSZXN0b3JlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXN0b3JlKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgUmVzdG9yZTo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBSZXN0b3JlOjpkZWNvZGUo
RGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFJlc3RvcmU6OmNyZWF0ZSgpOwotfQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6VHJhbnNsYXRlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLWNsYXNzIFRyYW5zbGF0ZSA6
IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRyYW5zbGF0ZT4gY3JlYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCisgICAgVHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCisgICAg
ICAgIDogbV94KHgpCisgICAgICAgICwgbV95KHkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflRyYW5zbGF0ZSgpOwotCiAgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1f
eDsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgVHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGZsb2F0IG1f
eDsKLSAgICBmbG9hdCBtX3k7Citwcml2YXRlOgorICAgIGZsb2F0IG1feCB7IDAgfTsKKyAgICBm
bG9hdCBtX3kgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBUcmFu
c2xhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV94OwotICAgIGVuY29kZXIgPDwgbV95OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IFRyYW5zbGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAgZGVjb2RlciA+PiB4OwotICAgIGlm
ICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0
PiB5OwotICAgIGRlY29kZXIgPj4geTsKLSAgICBpZiAoIXkpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gVHJhbnNsYXRlOjpjcmVhdGUoKngsICp5KTsKLX0KLQot
Y2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgUm90YXRlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Um90YXRlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBSb3RhdGUoZmxvYXQg
YW5nbGUpCisgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOwogICAgIH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflJvdGF0ZSgpOwotCiAgICAgZmxvYXQgYW5nbGUoKSBjb25zdCB7
IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxSb3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIFJvdGF0ZShmbG9hdCBhbmdsZSk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQogCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFucy4KK3ByaXZhdGU6Cisg
ICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIFJvdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX2FuZ2xlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPFJvdGF0ZT4+IFJvdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGFuZ2xlOwotICAgIGRlY29kZXIgPj4gYW5nbGU7Ci0g
ICAgaWYgKCFhbmdsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVy
biBSb3RhdGU6OmNyZWF0ZSgqYW5nbGUpOwotfQotCi1jbGFzcyBTY2FsZSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNjYWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNjYWxlPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKKworICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBt
X3NpemUoc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNjYWxlKHNp
emUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TY2FsZSgpOwotCiAg
ICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNjYWxlPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTY2FsZShj
b25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6
CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIFNjYWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fc2l6ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxT
Y2FsZT4+IFNjYWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxG
bG9hdFNpemU+IHNjYWxlOwotICAgIGRlY29kZXIgPj4gc2NhbGU7Ci0gICAgaWYgKCFzY2FsZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTY2FsZTo6Y3JlYXRl
KCpzY2FsZSk7Ci19Ci0KLWNsYXNzIFNldENUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldENU
TSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRDVE0+IGNyZWF0ZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNldENUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorICAg
ICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldENUTShtYXRyaXgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5TZXRDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldENUTT4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBTZXRDVE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8U2V0Q1RNPj4gU2V0Q1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRp
b25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKLSAgICBkZWNvZGVyID4+IHRyYW5zZm9y
bTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBTZXRDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQotY2xhc3MgQ29uY2F0
ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDb25jYXRlbmF0ZUNUTSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKKworICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRlQ1RNKG1hdHJpeCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNvbmNhdGVuYXRlQ1RNKCk7Ci0KICAgICBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxD
b25jYXRlbmF0ZUNUTT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3Ry
YW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENvbmNhdGVuYXRl
Q1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
dHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENv
bmNhdGVuYXRlQ1RNPj4gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIg
Pj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUoKnRyYW5zZm9ybSk7
Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNldElubGluZUZpbGxHcmFkaWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ4X3QgbWF4Q29sb3JTdG9wQ291bnQgPSA0OwogCi0gICAgc3RhdGljIFJlZjxTZXRJbmxp
bmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFkaWVudCYpOwotICAgIHN0YXRpYyBib29s
IGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7Ci0KLSAgICB2aXJ0dWFsIH5TZXRJbmxpbmVGaWxs
R3JhZGllbnQoKTsKLQotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25zdDsKLQotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZUZp
bGxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIFJl
ZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShmbG9hdCBvZmZzZXRzW21heENvbG9yU3Rv
cENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwKLSAgICAg
ICAgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCBzcHJlYWRNZXRo
b2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGllbnQob2Zmc2V0cywgY29sb3JzLCBkYXRhLCBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIHNwcmVhZE1ldGhvZCwgY29sb3JTdG9wQ291bnQpKTsK
LSAgICB9Ci0KKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQmKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhD
b2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0s
IGNvbnN0IEdyYWRpZW50OjpEYXRhJiwKICAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBn
cmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kLCB1aW50OF90
IGNvbG9yU3RvcENvdW50KTsKIAotICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFk
aWVudCYpOworICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7CisgICAg
UmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQorCitwcml2YXRlOgogICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07
CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwogICAgIEdy
YWRpZW50OjpEYXRhIG1fZGF0YTsKQEAgLTM3MywxOTggKzIxNiw3OSBAQCBwcml2YXRlOgogICAg
IHVpbnQ4X3QgbV9jb2xvclN0b3BDb3VudCB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENvdW50OwotICAgIGZvciAo
dWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBlbmNv
ZGVyIDw8IG1fb2Zmc2V0c1tpXTsKLSAgICAgICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdC
QSB7IG1fY29sb3JzW2ldIH0udmFsdWU7Ci0gICAgfQotICAgIGVuY29kZXIgPDwgbV9kYXRhOwot
ICAgIGVuY29kZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgZW5jb2Rl
ciA8PCBtX3NwcmVhZE1ldGhvZDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQ4X3Q+IGNvbG9yU3Rv
cENvdW50OwotICAgIGRlY29kZXIgPj4gY29sb3JTdG9wQ291bnQ7Ci0gICAgaWYgKCFjb2xvclN0
b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmICgqY29sb3JT
dG9wQ291bnQgPiBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAgIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgZm9yICh1aW50OF90IGkgPSAw
OyBpIDwgKmNvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgT3B0aW9uYWw8ZmxvYXQ+IG9m
ZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBvZmZzZXQ7Ci0gICAgICAgIGlmICghb2Zmc2V0KQot
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBPcHRpb25hbDx1aW50
MzJfdD4gY29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgICAgIGlmICghY29s
b3IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIGNvbG9yc1tp
XSA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqY29sb3IgfSk7Ci0gICAgICAgIG9mZnNl
dHNbaV0gPSAqb2Zmc2V0OwotICAgIH0KLQotICAgIE9wdGlvbmFsPEdyYWRpZW50OjpEYXRhPiBk
YXRhOwotICAgIGRlY29kZXIgPj4gZGF0YTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBkZWNvZGVyID4+IGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbjsKLSAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEdyYWRpZW50U3ByZWFkTWV0aG9k
PiBzcHJlYWRNZXRob2Q7Ci0gICAgZGVjb2RlciA+PiBzcHJlYWRNZXRob2Q7Ci0gICAgaWYgKCFz
cHJlYWRNZXRob2QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
eyBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShvZmZzZXRzLCBjb2xvcnMsICpkYXRhLCAq
Z3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCAqc3ByZWFkTWV0aG9kLCAqY29sb3JTdG9wQ291
bnQpIH07Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xvcigpOwotCi0gICAgQ29s
b3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLQotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxDb2xv
cj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0SW5saW5lRmlsbENvbG9y
KFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQorICAgICAg
ICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvciBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgUGFja2VkQ29s
b3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxDb2xvcj4+IFNldElubGluZUZpbGxDb2xv
cjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDMyX3Q+IHZh
bHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0
ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKLX0KLQotY2xhc3MgU2V0
SW5saW5lU3Ryb2tlQ29sb3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRJbmxpbmVTdHJva2VD
b2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRJbmxpbmVT
dHJva2VDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflNldElubGluZVN0cm9rZUNvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVTdHJva2VDb2xvcihTUkdCQTx1
aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQorICAgICAgICA6IG1f
Y29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29s
b3JEYXRhOwotfTsKKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRh
dGEgfTsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVTdHJva2VD
b2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQ
YWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IFNldElubGluZVN0cm9rZUNvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7
Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAotICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGFzU1JHQkEo
UGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQorcHJpdmF0ZToKKyAgICBTUkdCQTx1
aW50OF90PiBtX2NvbG9yRGF0YTsKK307CiAKLWNsYXNzIFNldFN0cm9rZVRoaWNrbmVzcyA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0cm9rZVRoaWNrbmVzcyB7CiBwdWJsaWM6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+IGNyZWF0ZShmbG9hdCB0
aGlja25lc3MpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ryb2tlVGhpY2tu
ZXNzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTZXRTdHJva2VUaGlja25lc3M7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdGhpY2tuZXNz
OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxT
ZXRTdHJva2VUaGlja25lc3M+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgogICAgIFNl
dFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi0gICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykK
KyAgICAgICAgOiBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBt
X3RoaWNrbmVzcyB7IDAgfTsKLX07CisgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1
cm4gbV90aGlja25lc3M7IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0U3Ry
b2tlVGhpY2tuZXNzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fdGhpY2tuZXNzOwotfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0U3Ryb2tl
VGhpY2tuZXNzPj4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxmbG9hdD4gdGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4gdGhpY2tu
ZXNzOwotICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHJl
dHVybiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSgqdGhpY2tuZXNzKTsKLX0KK3ByaXZhdGU6
CisgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Cit9OwogCi1jbGFzcyBTZXRTdGF0ZSA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNl
dFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykpOwotICAgIH0KLQotICAg
IHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
ZXRTdGF0ZShzdGF0ZUNoYW5nZSkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Rh
dGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwog
ICAgIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KIApAQCAtNTczLDE0ICsyOTcsMTQgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxT
ZXRTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlIG1fc3RhdGU7CiB9OwogCkBAIC02NjksNyArMzkzLDcgQEAgdm9pZCBTZXRTdGF0ZTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitPcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzPiBjaGFuZ2VGbGFnczsKICAgICBkZWNvZGVyID4+IGNoYW5nZUZsYWdzOwpAQCAtODk2LDY4
ICs2MjAsNTUgQEAgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3RhdGU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIH0KIAotICAgIHJldHVy
biBTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlKTsKKyAgICByZXR1cm4geyBzdGF0ZUNoYW5n
ZSB9OwogfQogCi1jbGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TGlu
ZUNhcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lQ2FwPiBjcmVhdGUoTGluZUNh
cCBsaW5lQ2FwKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6U2V0TGluZUNhcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OworCisgICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCisgICAgICAgIDogbV9saW5lQ2Fw
KGxpbmVDYXApCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lQ2Fw
KGxpbmVDYXApKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5l
Q2FwKCk7Ci0gICAgCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gbV9saW5l
Q2FwOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxTZXRMaW5lQ2FwPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTZXRMaW5lQ2FwKExpbmVDYXApOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
IAorcHJpdmF0ZToKICAgICBMaW5lQ2FwIG1fbGluZUNhcDsKIH07CiAKLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIFNldExpbmVDYXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgbV9saW5lQ2FwOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBTZXRMaW5lQ2FwOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lQ2FwPiBsaW5lQ2FwOwotICAgIGRlY29k
ZXIgPj4gbGluZUNhcDsKLSAgICBpZiAoIWxpbmVDYXApCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUNhcDo6Y3JlYXRlKCpsaW5lQ2FwKTsKLX0KLQot
Y2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lRGFzaCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRlKGNvbnN0IERhc2hBcnJh
eSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAgOiBtX2Rhc2hBcnJheShk
YXNoQXJyYXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZzZXQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNoQXJyYXksIGRhc2hPZmZz
ZXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lRGFzaCgp
OwotCiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2Rh
c2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2Rhc2hP
ZmZzZXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPFNldExpbmVEYXNoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJp
dmF0ZToKICAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7CiAgICAgZmxvYXQgbV9kYXNoT2Zmc2V0
OwogfTsKQEAgLTk3MCw3ICs2ODEsNyBAQCB2b2lkIFNldExpbmVEYXNoOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiB7CiAgICAgT3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7CiAgICAgZGVjb2RlciA+
PiBkYXNoQXJyYXk7CkBAIC05ODIsMjE1ICs2OTMsMTM4IEBAIE9wdGlvbmFsPFJlZjxTZXRMaW5l
RGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRh
c2hPZmZzZXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gU2V0
TGluZURhc2g6OmNyZWF0ZSgqZGFzaEFycmF5LCAqZGFzaE9mZnNldCk7CisgICAgcmV0dXJuIHt7
ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwogfQogCi1jbGFzcyBTZXRMaW5lSm9pbiA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVKb2luIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZUpvaW4oTGluZUpv
aW4gbGluZUpvaW4pCisgICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9pbikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVKb2luKGxpbmVKb2luKSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TGluZUpvaW4oKTsKLSAgICAKICAgICBM
aW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpvaW47IH0KIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVKb2luPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRMaW5l
Sm9pbihMaW5lSm9pbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgog
ICAgIExpbmVKb2luIG1fbGluZUpvaW47CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBTZXRMaW5lSm9pbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX2xpbmVKb2luOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPFNldExpbmVKb2luPj4gU2V0TGluZUpvaW46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVKb2luPiBsaW5lSm9pbjsKLSAgICBkZWNvZGVyID4+
IGxpbmVKb2luOwotICAgIGlmICghbGluZUpvaW4pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUpvaW46OmNyZWF0ZSgqbGluZUpvaW4pOwotfQotCi1j
bGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0TWl0ZXJMaW1pdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRNaXRlckxpbWl0PiBjcmVhdGUoZmxvYXQgbGlt
aXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRNaXRlckxpbWl0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisK
KyAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCisgICAgICAgIDogbV9taXRlckxp
bWl0KG1pdGVyTGltaXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRN
aXRlckxpbWl0KGxpbWl0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0TWl0ZXJMaW1pdCgpOwotCiAgICAgZmxvYXQgbWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWl0ZXJMaW1pdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TWl0ZXJMaW1pdChmbG9hdCk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fbWl0ZXJMaW1pdDsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldE1pdGVyTGltaXQ6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9taXRlckxpbWl0OwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldE1pdGVyTGltaXQ+PiBT
ZXRNaXRlckxpbWl0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxm
bG9hdD4gbWl0ZXJMaW1pdDsKLSAgICBkZWNvZGVyID4+IG1pdGVyTGltaXQ7Ci0gICAgaWYgKCFt
aXRlckxpbWl0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNl
dE1pdGVyTGltaXQ6OmNyZWF0ZSgqbWl0ZXJMaW1pdCk7Ci19Ci0KLWNsYXNzIENsZWFyU2hhZG93
IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xlYXJTaGFkb3cgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+Q2xlYXJTaGFkb3coKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyU2hhZG93OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgQ2xlYXJTaGFkb3coKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclNoYWRvdzo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPENsZWFyU2hhZG93Pj4gQ2xlYXJTaGFkb3c6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICBy
ZXR1cm4gQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpOwotfQotCi0vLyBGSVhNRTogdHJlYXQgYXMgRHJh
d2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworLy8gRklYTUU6IHRyZWF0IGFz
IGRyYXdpbmcgaXRlbT8KK2NsYXNzIENsaXAgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcCgp
OworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
Ci0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcD4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCiBwcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIENsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1f
cmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsaXA6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXA+PiBDbGlwOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAg
ZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBDbGlwOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGlw
T3V0IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxDbGlwT3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dDsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5DbGlwT3V0KCk7CisgICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwT3V0
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgQ2xpcE91dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8Q2xpcE91dD4+IENsaXBPdXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IENsaXBPdXQ6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXRUb1BhdGggOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0VG9QYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBPdXRUb1BhdGgo
UGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0VG9QYXRoKHBhdGgpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0VG9QYXRoKCk7CisgICAgQ2xpcE91
dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgIHsK
KyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlw
T3V0VG9QYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0VG9QYXRoKGNvbnN0IFBhdGgmKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZh
dGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAt
MTIwMCwzNyArODM0LDQ3IEBAIHZvaWQgQ2xpcE91dFRvUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
Q2xpcE91dFRvUGF0aD4+IENsaXBPdXRUb1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
T3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7
CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIENsaXBPdXRUb1BhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUo
KnBhdGgpIH19OwogfQogCi1jbGFzcyBDbGlwUGF0aCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENs
aXBQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBQYXRoPiBjcmVhdGUoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVt
VHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBQYXRoKFBhdGgmJiBwYXRoLCBXaW5kUnVs
ZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAgICAgICAgLCBt
X3dpbmRSdWxlKHdpbmRSdWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+
Q2xpcFBhdGgoKTsKKyAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5k
UnVsZSkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRS
dWxlKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3dp
bmRSdWxlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxDbGlwUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOwor
cHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwogfTsK
IApAQCAtMTI0Miw3ICs4ODYsNyBAQCB2b2lkIENsaXBQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxD
bGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENs
aXBQYXRoPiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0xMjU0LDMwICs4OTgsMzUg
QEAgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgIGlmICghd2luZFJ1bGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICByZXR1cm4gQ2xpcFBhdGg6OmNyZWF0ZSgqcGF0aCwgKndpbmRSdWxlKTsKKyAgICByZXR1
cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aW5kUnVsZSB9fTsKIH0KIAotY2xhc3MgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4gY3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRGlz
cGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBE
aXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICAgICAgOiBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgICAgICAs
IG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0aW5hdGlv
biwgY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgfkNsaXBUb0RyYXdpbmdDb21tYW5kcygpOwotCiAgICAgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KICAg
ICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0K
ICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZHJhd2luZ0NvbW1hbmRzKCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3aW5nQ29tbWFuZHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBUb0RyYXdp
bmdDb21tYW5kcz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Q29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsK
ICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBEaXNwbGF5TGlzdCBtX2RyYXdpbmdD
b21tYW5kczsKQEAgLTEyODgsMTEgKzkzNywxMSBAQCB2b2lkIENsaXBUb0RyYXdpbmdDb21tYW5k
czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2Rl
c3RpbmF0aW9uOwogICAgIGVuY29kZXIgPDwgbV9jb2xvclNwYWNlOwotICAgIGVuY29kZXIgPDwg
bV9kcmF3aW5nQ29tbWFuZHM7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0byBlbmNv
ZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENsaXBUb0RyYXdpbmdDb21t
YW5kcz4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwogICAgIGRlY29kZXIgPj4gZGVz
dGluYXRpb247CkBAIC0xMzA0LDI3ICs5NTMsMTYgQEAgT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdp
bmdDb21tYW5kcz4+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29kZXImIGRlY28K
ICAgICBpZiAoIWNvbG9yU3BhY2UpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICBPcHRpb25hbDxEaXNwbGF5TGlzdD4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGRlY29kZXIgPj4g
ZHJhd2luZ0NvbW1hbmRzOwotICAgIGlmICghZHJhd2luZ0NvbW1hbmRzKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kczo6Y3Jl
YXRlKCpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoKmRyYXdpbmdDb21tYW5kcykp
OworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB3YXkgdG8gZGVjb2RlIGluLW1lbW9yeSBkaXNw
bGF5IGxpc3RzLgorICAgIERpc3BsYXlMaXN0IGRyYXdpbmdDb21tYW5kczsKKyAgICByZXR1cm4g
e3sgKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpIH19
OwogfQogCi1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERy
YXdHbHlwaHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9p
bnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFk
dmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5j
ZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IERyYXdHbHlwaHMoZm9udCwgV1RGTW92ZShnbHlwaHMpLCBXVEZNb3ZlKGFkdmFuY2Vz
KSwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5EcmF3R2x5cGhzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CiAKICAgICBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvcigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KIApAQCAtMTMzMywyMSArOTcxLDIxIEBA
IHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYgZ2x5cGhz
KCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3R2x5cGhzPiBk
ZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgogICAgIERyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBWZWN0b3I8
R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+
JiYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSk7CiAK
LSAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CiAKK3ByaXZhdGU6CisgICAgdm9pZCBjb21wdXRlQm91bmRzKCk7CiAg
ICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0OwogCi0gICAgUmVmPEZv
bnQ+IG1fZm9udDsKKyAgICBSZWZQdHI8Rm9udD4gbV9mb250OwogICAgIFZlY3RvcjxHbHlwaEJ1
ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2Us
IDEyOD4gbV9hZHZhbmNlczsKICAgICBGbG9hdFJlY3QgbV9ib3VuZHM7CkBAIC0xMzU4LDcgKzk5
Niw3IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBEcmF3R2x5cGhz
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1fZm9u
dDsKKyAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1fZm9udCk7CiAgICAgZW5jb2RlciA8PCBtX2ds
eXBoczsKICAgICBlbmNvZGVyIDw8IG1fYWR2YW5jZXM7CiAgICAgZW5jb2RlciA8PCBtX2xvY2Fs
QW5jaG9yOwpAQCAtMTM2Niw3ICsxMDA0LDcgQEAgdm9pZCBEcmF3R2x5cGhzOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CitPcHRpb25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxSZWY8Rm9udD4+IGZvbnQ7CiAgICAgZGVjb2RlciA+PiBmb250
OwpAQCAtMTM5NiwzMiArMTAzNCwzNSBAQCBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdH
bHlwaHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghc21vb3RoaW5nTW9kZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3R2x5cGhzOjpj
cmVhdGUoZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwg
KmxvY2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSk7CisgICAgcmV0dXJuIHt7IGZvbnQtPmdldCgp
LCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hvciwgKnNt
b290aGluZ01vZGUgfX07CiB9Ci0KLWNsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBEcmF3SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdl
PiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFp
bnRpbmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RHJhd0ltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CisKKyAgICBEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAg
ICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9u
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2UoKTsKLQogICAgIGNvbnN0IEltYWdl
JiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9hdFJlY3Qg
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJlY3QgZGVzdGlu
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3
SW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5h
dGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBG
SVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jl
c3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9k
ZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBAIC0xNDQxLDcgKzEwODIsNyBA
QCB2b2lkIERyYXdJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZT4gRHJhd0ltYWdl
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4g
aW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE0NjMsMTcgKzEx
MDQsMTQgQEAgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2U6OmNyZWF0ZSgqaW1hZ2VI
YW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9u
cyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNv
dXJjZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRJbWFn
ZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRJbWFnZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25z
dCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwg
c291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRJbWFnZSgpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9h
dFBvaW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC0xNDgyLDE2ICsx
MTIwLDI1IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVTaXplOyB9CiAgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBt
X3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPERyYXdUaWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBEcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09w
dGlvbnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9u
KGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3Rp
bGVTaXplKHRpbGVTaXplKQorICAgICAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAgICAgICAs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAg
IH0KIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBkZWNvZGUo
RGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAv
LyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJv
Z3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFBvaW50IG1fc291cmNlOwpAQCAtMTUxNCw3ICsxMTYx
LDcgQEAgdm9pZCBEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1h
Z2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxE
cmF3VGlsZWRJbWFnZT4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+
IGltYWdlSGFuZGxlOwpAQCAtMTU0NiwzMiArMTE5MywzOSBAQCBPcHRpb25hbDxSZWY8RHJhd1Rp
bGVkSW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAg
aWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2Us
ICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdlUGFpbnRp
bmdPcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0
aW9uLCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMg
fX07CiB9CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdUaWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxl
IHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
CisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3RpbGVTY2Fs
ZUZhY3Rvcih0aWxlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAg
ICAgLCBtX3ZSdWxlKHZSdWxlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1h
Z2VQYWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKLQogICAg
IGNvbnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAg
ICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9h
dFJlY3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2Nh
bGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gZGVjb2RlKERlY29kZXImKTsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1f
aW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9u
cyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZs
b2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE1OTYs
NyArMTI1MCw3IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IERyYXdUaWxlZFNj
YWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFn
ZUhhbmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE2
MzEsMzMgKzEyODUsMzcgQEAgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJh
d1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWltYWdl
UGFpbnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRl
c3RpbmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFn
ZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpk
ZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCAqaW1h
Z2VQYWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZUJ1ZmZlciA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8RHJhd0ltYWdlQnVmZmVyPiBjcmVhdGUoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RHJhd0ltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKKyAgICAgICAgOiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCisgICAgICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3Qp
CisgICAgICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgICAgICwgbV9vcHRpb25zKG9wdGlv
bnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3SW1hZ2VCdWZmZXIo
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ltYWdlQnVmZmVy
KCk7Ci0KICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7
IH0KICAgICBGbG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CiAg
ICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRp
b25SZWN0OyB9CiAgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fb3B0aW9uczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8RHJhd0ltYWdlQnVmZmVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlv
blJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERy
YXdJbWFnZUJ1ZmZlcj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwogICAgIEZsb2F0UmVjdCBtX3NyY1JlY3Q7CkBA
IC0xNjc0LDcgKzEzMzIsNyBAQCB2b2lkIERyYXdJbWFnZUJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd0ltYWdlQnVmZmVyPj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPERyYXdJbWFnZUJ1ZmZlcj4gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXI+IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKICAgICBkZWNvZGVyID4+IHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcjsKQEAgLTE2OTYsMzEgKzEzNTQsMjkgQEAgT3B0aW9uYWw8
UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIERyYXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCpyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKm9wdGlvbnMpOworICAgIHJldHVybiB7
eyAqcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpv
cHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3TmF0aXZlSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRHJhd05hdGl2ZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERy
YXdOYXRpdmVJbWFnZT4gY3JlYXRlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKLSAgICB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdOYXRpdmVJbWFnZSgpOwotCi0gICAgRmxvYXRSZWN0IHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3JjUmVjdDsgfQotICAgIEZsb2F0UmVjdCBkZXN0aW5h
dGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYsIGNvbnN0IEZs
b2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UoKSBjb25zdCB7
IHJldHVybiBtX3NyY1JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uUmVjdDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8RHJhd05hdGl2ZUltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgog
ICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CiAgICAgRmxvYXRTaXplIG1faW1hZ2VTaXplOwog
ICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKQEAgLTE3MzksNyArMTM5NSw3IEBAIHZv
aWQgRHJhd05hdGl2ZUltYWdlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TmF0aXZlSW1hZ2U+PiBE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd05h
dGl2ZUltYWdlPiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPE5hdGl2ZUltYWdlUHRyPiBpbWFnZTsKICAgICBkZWNvZGVyID4+IGltYWdl
OwpAQCAtMTc2NiwxNyArMTQyMiwxNiBAQCBPcHRpb25hbDxSZWY8RHJhd05hdGl2ZUltYWdlPj4g
RHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIW9wdGlv
bnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd05hdGl2
ZUltYWdlOjpjcmVhdGUoKmltYWdlLCAqaW1hZ2VTaXplLCAqZGVzdGluYXRpb25SZWN0LCAqc3Jj
UmVjdCwgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0
aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd1BhdHRl
cm4gOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1BhdHRlcm4gewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RHJhd1BhdHRlcm4+IGNyZWF0ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3UGF0dGVybihpbWFn
ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UGF0dGVybigpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgY29uc3QgSW1hZ2UmIGltYWdl
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVyblRyYW5zZm9y
bTsgfQpAQCAtMTc4NSwxNiArMTQ0MCwxNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCBwaGFz
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhhc2U7IH0KICAgICBGbG9hdFNpemUgc3BhY2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fc3BhY2luZzsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXR0ZXJuKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247
IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdQYXR0
ZXJuPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdl
PiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1h
dGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9wYXR0ZXJuVHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBtX3Rp
bGVSZWN0OwpAQCAtMTgxOSw3ICsxNDczLDcgQEAgdm9pZCBEcmF3UGF0dGVybjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCitPcHRpb25hbDxEcmF3UGF0dGVybj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBk
ZWNvZGVyID4+IGltYWdlSGFuZGxlOwpAQCAtMTg1NiwxODIgKzE1MTAsMTAwIEBAIE9wdGlvbmFs
PFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXR1cm4gRHJhd1BhdHRlcm46OmNyZWF0ZSgqaW1hZ2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRp
b24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNpbmcsICpvcHRp
b25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAq
dGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2UsICpzcGFjaW5nLCAqb3B0aW9ucyB9
fTsKIH0KIAotLy8gSXMgRHJhd2luZ0l0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNw
YXJlbmN5IGxheWVyIGlzIGltcGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgotY2xhc3MgQmVnaW5U
cmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBCZWdpblRyYW5z
cGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI+IGNyZWF0ZShmbG9hdCBvcGFjaXR5KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7IC8vIElzIGRyYXdpbmcgaXRlbSBiZWNhdXNl
IHRoZSBzaXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xp
cCBib3VuZHMuCisKKyAgICBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCisg
ICAgICAgIDogbV9vcGFjaXR5KG9wYWNpdHkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCk7Ci0KICAgICBm
bG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxCZWdpblRyYW5zcGFyZW5jeUxh
eWVyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBmbG9hdCBtX29wYWNpdHk7CiB9OwogCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fb3BhY2l0eTsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxCZWdpblRyYW5zcGFyZW5jeUxh
eWVyPj4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IG9wYWNpdHk7Ci0gICAgZGVjb2RlciA+PiBvcGFjaXR5Owot
ICAgIGlmICghb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKm9wYWNpdHkpOwotfQotCi1jbGFz
cyBFbmRUcmFuc3BhcmVuY3lMYXllciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBFbmRU
cmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFbmRUcmFuc3BhcmVu
Y3lMYXllcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEVu
ZFRyYW5zcGFyZW5jeUxheWVyKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5FbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmVuY29kZShFbmNvZGVyJikgY29uc3QK
LXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxFbmRUcmFuc3Bh
cmVuY3lMYXllcj4+IEVuZFRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0g
ICAgcmV0dXJuIEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgRHJh
d1JlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1JlY3QgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8RHJhd1JlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkRyYXdSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIERyYXdSZWN0KEZsb2F0UmVjdCByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9ib3JkZXJUaGlja25l
c3MoYm9yZGVyVGhpY2tuZXNzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RHJhd1JlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3JkZXJUaGlja25lc3M7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7
CiAgICAgZmxvYXQgbV9ib3JkZXJUaGlja25lc3M7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBEcmF3UmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2JvcmRlclRoaWNrbmVzczsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UmVjdD4+IERy
YXdSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBib3JkZXJUaGlja25l
c3M7Ci0gICAgZGVjb2RlciA+PiBib3JkZXJUaGlja25lc3M7Ci0gICAgaWYgKCFib3JkZXJUaGlj
a25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJhd1Jl
Y3Q6OmNyZWF0ZSgqcmVjdCwgKmJvcmRlclRoaWNrbmVzcyk7Ci19Ci0KLWNsYXNzIERyYXdMaW5l
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdMaW5lIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERyYXdMaW5lPiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBEcmF3TGluZShGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBw
b2ludDIpCisgICAgICAgIDogbV9wb2ludDEocG9pbnQxKQorICAgICAgICAsIG1fcG9pbnQyKHBv
aW50MikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0xp
bmUoKTsKLQogICAgIEZsb2F0UG9pbnQgcG9pbnQxKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludDE7
IH0KICAgICBGbG9hdFBvaW50IHBvaW50MigpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnQyOyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3TGlu
ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fcG9pbnQxOwogICAgIEZs
b2F0UG9pbnQgbV9wb2ludDI7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBE
cmF3TGluZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8
PCBtX3BvaW50MTsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQyOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdMaW5lPj4gRHJhd0xpbmU6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MTsKLSAgICBk
ZWNvZGVyID4+IHBvaW50MTsKLSAgICBpZiAoIXBvaW50MSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHBvaW50MjsKLSAgICBkZWNvZGVy
ID4+IHBvaW50MjsKLSAgICBpZiAoIXBvaW50MikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBEcmF3TGluZTo6Y3JlYXRlKCpwb2ludDEsICpwb2ludDIpOwotfQot
Ci1jbGFzcyBEcmF3TGluZXNGb3JUZXh0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERy
YXdMaW5lc0ZvclRleHQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmVzRm9yVGV4
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6
ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3TGluZXNGb3JUZXh0KGJsb2NrTG9jYXRpb24sIGxvY2FsQW5jaG9y
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7Ci0gICAgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwg
Y29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CiAKICAgICB2
b2lkIHNldEJsb2NrTG9jYXRpb24oY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbikgeyBt
X2Jsb2NrTG9jYXRpb24gPSBibG9ja0xvY2F0aW9uOyB9CiAgICAgY29uc3QgRmxvYXRQb2ludCYg
YmxvY2tMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tMb2NhdGlvbjsgfQpAQCAtMjA0
MiwxNiArMTYxNCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ByaW50aW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmludGluZzsgfQogICAgIGJvb2wgZG91YmxlTGluZXMoKSBjb25zdCB7IHJldHVy
biBtX2RvdWJsZUxpbmVzOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9ibG9ja0xvY2F0aW9uOwogICAgIEZs
b2F0U2l6ZSBtX2xvY2FsQW5jaG9yOwogICAgIERhc2hBcnJheSBtX3dpZHRoczsKQEAgLTIwNzIs
NyArMTY0Myw3IEBAIHZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4dD4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYmxvY2tMb2NhdGlv
bjsKICAgICBkZWNvZGVyID4+IGJsb2NrTG9jYXRpb247CkBAIC0yMTA0LDExOSArMTY3NSw4MyBA
QCBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IERyYXdMaW5lc0ZvclRleHQ6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZG91YmxlTGluZXMpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKCpi
bG9ja0xvY2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMsICpwcmludGlu
ZywgKmRvdWJsZUxpbmVzKTsKKyAgICByZXR1cm4ge3sgKmJsb2NrTG9jYXRpb24sICpsb2NhbEFu
Y2hvciwgKnRoaWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMgfX07CiB9
CiAKLWNsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlIHN0eWxlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fc3R5bGUo
c3R5bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKHJlY3QsIHN0eWxlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpOwotCiAgICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSk7CisgICAgRmxvYXRSZWN0IG1fcmVjdDsKKyAgICBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBtX3N0eWxlOworfTsKKworY2xhc3MgRHJhd0VsbGlwc2UgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0VsbGlw
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAg
IHsKKyAgICB9CisKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6
CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKLSAgICBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBtX3N0
eWxlOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX3N0eWxlOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+PiBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICgh
cmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlPiBzdHlsZTsKLSAgICBkZWNvZGVyID4+IHN0eWxlOwotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKCpyZWN0LCAqc3R5bGUpOwotfQotCi1jbGFz
cyBEcmF3RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0aCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3RWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkRyYXdQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisK
KyAgICBEcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0VsbGlwc2UocmVjdCkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5EcmF3RWxsaXBzZSgpOwotCi0gICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdFbGxpcHNlPj4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQotICAgIEZsb2F0
UmVjdCBtX3JlY3Q7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RWxs
aXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0Vs
bGlwc2U+PiBEcmF3RWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJl
Y3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJhd0VsbGlw
c2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIERyYXdQYXRoIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXRoPiBjcmVhdGUoY29uc3QgUGF0
aCYgcGF0aCkKKyAgICBEcmF3UGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RG
TW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQYXRo
KHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UGF0aCgp
OwotCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1BhdGg+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQ
YXRoKGNvbnN0IFBhdGgmKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8RHJhd1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91
bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9wYXRoLmZh
c3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgor
ICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTIyMjYs
MjQgKzE3NjEsMzcgQEAgdm9pZCBEcmF3UGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1BhdGg+
PiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3UGF0aD4g
RHJhd1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+
IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0aDo6Y3JlYXRlKCpwYXRoKTsK
KyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1c1Jp
bmdQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1c1JpbmdQYXRoIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdGb2N1c1JpbmdQYXRoPiBjcmVhdGUoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdGb2N1c1JpbmdQYXRoKFBhdGgmJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKKyAg
ICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAg
ICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0ZvY3VzUmluZ1BhdGgocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUGF0aCgpOworICAgIERy
YXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2lk
dGgod2lkdGgpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29sb3Io
Y29sb3IpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGg7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7
IH0KQEAgLTIyNTEsMTYgKzE3OTksMTUgQEAgcHVibGljOgogICAgIGNvbnN0IENvbG9yJiBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0Zv
Y3VzUmluZ1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIGNv
bnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBmbG9hdCBt
X3dpZHRoOwogICAgIGZsb2F0IG1fb2Zmc2V0OwogICAgIENvbG9yIG1fY29sb3I7CkBAIC0yMjc2
LDcgKzE4MjMsNyBAQCB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxE
cmF3Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBk
ZWNvZGVyID4+IHBhdGg7CkBAIC0yMjk4LDMzICsxODQ1LDMxIEBAIE9wdGlvbmFsPFJlZjxEcmF3
Rm9jdXNSaW5nUGF0aD4+IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUoKnBhdGgsICp3aWR0aCwgKm9mZnNldCwg
KmNvbG9yKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aWR0aCwgKm9mZnNldCwg
KmNvbG9yIH19OwogfQogCi1jbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3RzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4gY3JlYXRlKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0ZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCB3aWR0aCwgb2Zmc2V0LCBjb2xvcikpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RHJhd0ZvY3VzUmluZ1JlY3RzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3Vz
UmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKTsKIAogICAgIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+IHJlY3Rz
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0czsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aDsgfQogICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJh
d0ZvY3VzUmluZ1JlY3RzPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxE
cmF3Rm9jdXNSaW5nUmVjdHM+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgVmVj
dG9yPEZsb2F0UmVjdD4gbV9yZWN0czsKICAgICBmbG9hdCBtX3dpZHRoOwogICAgIGZsb2F0IG1f
b2Zmc2V0OwpAQCAtMjM0MSw3ICsxODg2LDcgQEAgdm9pZCBEcmF3Rm9jdXNSaW5nUmVjdHM6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUmVjdHM+IERy
YXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8VmVjdG9yPEZsb2F0UmVjdD4+IHJlY3RzOwogICAgIGRlY29kZXIgPj4gcmVjdHM7CkBAIC0y
MzYzLDcxICsxOTA4LDU1IEBAIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBEcmF3
Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3Ip
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ZvY3VzUmlu
Z1JlY3RzOjpjcmVhdGUoKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvcik7CisgICAgcmV0
dXJuIHt7ICpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIEZp
bGxSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJl
Y3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3QocmVjdCkpOwogICAgIH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0KCk7CisgICAgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxGaWxsUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsg
fQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIEZpbGxSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxGaWxsUmVjdD4+IEZpbGxSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlm
ICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxs
UmVjdDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotLy8gRklYTUU6IE1ha2UgdGhlc2UgaW5oZXJpdCBm
cm9tIEZpbGxSZWN0IHByb3Blci4KLWNsYXNzIEZpbGxSZWN0V2l0aENvbG9yIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aENvbG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZpbGxSZWN0V2l0aENvbG9yPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAg
ICAgICwgbV9jb2xvcihjb2xvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEZpbGxSZWN0V2l0aENvbG9yKHJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoQ29sb3IoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoQ29sb3IoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gZGVjb2RlKERlY29kZXImKTsKIAor
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7CiB9OwpA
QCAtMjQ0MCw3ICsxOTY5LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhDb2xvcj4gRmlsbFJlY3RXaXRoQ29s
b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
cmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDUyLDI5ICsxOTgxLDI4IEBAIE9wdGlv
bmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUoKnJlY3QsICpjb2xv
cik7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIEZpbGxSZWN0
V2l0aEdyYWRpZW50IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aEdy
YWRpZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBj
cmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhHcmFkaWVudChyZWN0LCBn
cmFkaWVudCkpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVj
dFdpdGhHcmFkaWVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aEdyYWRpZW50
KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CiAKLSAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gZGVjb2RlKERlY29kZXImKTsK
IAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIG11dGFibGUgUmVmPEdyYWRp
ZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTogTWFrZSB0aGlzIG5vdCBtdXRhYmxlCiB9OwpAQCAt
MjQ4Nyw3ICsyMDE1LDcgQEAgdm9pZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJl
Y3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNDk4LDMyICsyMDI2
LDM3IEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdy
YWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlCiAgICAgaWYgKCFncmFkaWVudCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhHcmFkaWVu
dDo6Y3JlYXRlKCpyZWN0LCBncmFkaWVudC0+Z2V0KCkpOworICAgIHJldHVybiB7eyAqcmVjdCwg
Z3JhZGllbnQtPmdldCgpIH19OwogfQogCi1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbENvbXBvc2l0ZWRSZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9y
KQorICAgICAgICAsIG1fb3Aob3ApCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbENvbXBvc2l0ZWRSZWN0KHJl
Y3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RmlsbENvbXBvc2l0ZWRSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3I7IH0KICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxDb21wb3NpdGVkUmVjdD4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxs
Q29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRS
ZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1f
b3A7CkBAIC0yNTQwLDcgKzIwNzMsNyBAQCB2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENv
bXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjU2MiwzMSArMjA5NSwz
NSBAQCBPcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmNy
ZWF0ZSgqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUpOworICAgIHJldHVybiB7eyAqcmVj
dCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSb3VuZGVkUmVj
dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8RmlsbFJvdW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAg
ICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQor
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2Rl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5GaWxsUm91bmRlZFJlY3QoKTsKLQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUo
KSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gZGVjb2RlKERlY29k
ZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJv
dW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
LCBCbGVuZE1vZGUpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0LnJlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSb3Vu
ZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKICAgICBCbGVuZE1vZGUgbV9ibGVu
ZE1vZGU7CkBAIC0yNjAxLDcgKzIxMzgsNyBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJvdW5kZWRS
ZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI2MTgsMzEgKzIxNTUsMzUgQEAg
T3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVjdD4+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFibGVuZE1vZGUpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUoKnJlY3QsICpj
b2xvciwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1v
ZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fcm91
bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7Ci0KICAgICBjb25zdCBG
bG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRI
b2xlUmVjdDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29s
b3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsK
ICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91bmRlZEhvbGVSZWN0OwogICAgIENvbG9yIG1fY29s
b3I7CkBAIC0yNjU3LDcgKzIxOTgsNyBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4g
cmVjdDsKQEAgLTI2NzQsNzQgKzIyMTUsNjMgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJgogICAg
IGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwg
KmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpyb3VuZGVkSG9sZVJlY3QsICpjb2xvciB9
fTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxsSW5saW5l
UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsSW5saW5lUGF0aCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBh
dGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKKworICAgIEZpbGxJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBw
YXRoRGF0YSkKKyAgICAgICAgOiBtX3BhdGhEYXRhKHBhdGhEYXRhKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbElubGluZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsSW5saW5lUGF0aCgpOwotCiAgICAgUGF0
aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbElubGluZVBh
dGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGluZVBhdGgoY29u
c3QgSW5saW5lUGF0aERhdGEmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXRoKCkuZmFzdEJv
dW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBhdGgoKS5m
YXN0Qm91bmRpbmdSZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBJbmxpbmVQYXRoRGF0YSBtX3Bh
dGhEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbElubGluZVBh
dGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9w
YXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxs
SW5saW5lUGF0aD4+IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0YT4gcGF0aERhdGE7Ci0gICAgZGVjb2RlciA+PiBw
YXRoRGF0YTsKLSAgICBpZiAoIXBhdGhEYXRhKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEp
KTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxs
UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUGF0aCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUGF0aDsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFBhdGgoUGF0
aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFBhdGgoKTsKKyAgICBGaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgIHsKKyAgICB9CiAKICAgICBjb25z
dCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxQ
YXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZp
bGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3Qo
KTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRo
OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTI3NTEsOTAgKzIyODEsNjUgQEAg
dm9pZCBGaWxsUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFBhdGg+PiBGaWxsUGF0aDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxGaWxsUGF0aD4gRmlsbFBhdGg6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVj
b2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiBGaWxsUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sg
V1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERyYXdp
bmdJdGVtIHsKK2NsYXNzIEZpbGxFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZp
bGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVsbGlwc2UocmVjdCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxFbGxpcHNlKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbEVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZpbGxFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IEZpbGxFbGxpcHNlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0g
ICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxsRWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKLX0KLQot
Y2xhc3MgUHV0SW1hZ2VEYXRhIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFB1dEltYWdl
RGF0YSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxQdXRJbWFnZURhdGE+IGNyZWF0ZShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0
YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPFB1dEltYWdl
RGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFn
ZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIFdU
Rk1vdmUoaW1hZ2VEYXRhKSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QdXRJbWFnZURhdGEoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
UmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0
Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlRGF0YTsgfQorICAgIEltYWdlRGF0YSYgaW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1f
aW1hZ2VEYXRhOyB9CiAgICAgSW50UmVjdCBzcmNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNS
ZWN0OyB9CiAgICAgSW50UG9pbnQgZGVzdFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9p
bnQ7IH0KICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RGb3JtYXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpIH19
OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIEZsb2F0UmVjdChtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNpemUoKSk7IH0K
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1dEltYWdlRGF0
YT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsK
ICAgICBJbnRQb2ludCBtX2Rlc3RQb2ludDsKLSAgICBSZWY8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0
YTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rl
c3RGb3JtYXQ7CiB9OwpAQCAtMjg0MywxNCArMjM0OCwxNCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgogdm9pZCBQdXRJbWFnZURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ewogICAgIGVuY29kZXIgPDwgbV9pbnB1dEZvcm1hdDsKLSAgICBlbmNvZGVyIDw8IG1faW1hZ2VE
YXRhOworICAgIGVuY29kZXIgPDwgbWFrZVJlZigqbV9pbWFnZURhdGEpOwogICAgIGVuY29kZXIg
PDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIgPDwgbV9kZXN0UG9pbnQ7CiAgICAgZW5jb2RlciA8
PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBoYVByZW11bHRpcGxpY2F0aW9uPiBpbnB1dEZvcm1h
dDsKICAgICBPcHRpb25hbDxSZWY8SW1hZ2VEYXRhPj4gaW1hZ2VEYXRhOwpAQCAtMjg3OCwxNjkg
KzIzODMsMTA5IEBAIE9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGVzdEZvcm1hdCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBQdXRJbWFnZURhdGE6OmNyZWF0ZSgqaW5w
dXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVz
dEZvcm1hdCk7CisgICAgcmV0dXJuIHt7ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRh
KSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0IH19OwogfQogCi1jbGFzcyBQYWlu
dEZyYW1lRm9yTWVkaWEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUGFpbnRGcmFtZUZv
ck1lZGlhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gY3Jl
YXRlKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+UGFpbnRGcmFtZUZvck1lZGlhKCk7CisgICAgUGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAK
ICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZv
ck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKTsKLQotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotICAgIFBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biB7IG1fZGVzdGluYXRpb24gfTsgfQogCitwcml2YXRlOgogICAgIE1lZGlhUGxheWVySWRlbnRp
ZmllciBtX2lkZW50aWZpZXI7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9pZGVudGlmaWVyOwot
ICAgIGVuY29kZXIgPDwgbV9kZXN0aW5hdGlvbjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxQYWludEZyYW1lRm9yTWVkaWE+PiBQYWludEZyYW1lRm9yTWVkaWE6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPE1lZGlhUGxheWVySWRl
bnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBkZWNvZGVyID4+IGlkZW50aWZpZXI7Ci0gICAgaWYg
KCFpZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsKLSAgICBkZWNvZGVyID4+IGRlc3RpbmF0aW9uOwot
ICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICByZXR1cm4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoKmlkZW50aWZpZXIsICpkZXN0aW5h
dGlvbik7Ci19Ci0KLWNsYXNzIFN0cm9rZVJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgU3Ryb2tlUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VSZWN0OworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgICAgIDogbV9yZWN0KHJlY3Qp
CisgICAgICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJl
Y3QgbV9yZWN0OwogICAgIGZsb2F0IG1fbGluZVdpZHRoOwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgU3Ryb2tlUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVXaWR0aDsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4g
U3Ryb2tlUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZVdpZHRo
OwotICAgIGRlY29kZXIgPj4gbGluZVdpZHRoOwotICAgIGlmICghbGluZVdpZHRoKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZVJlY3Q6OmNyZWF0ZSgq
cmVjdCwgKmxpbmVXaWR0aCk7Ci19Ci0KICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAot
Y2xhc3MgU3Ryb2tlSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJv
a2VJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUlubGluZVBhdGg+
IGNyZWF0ZShjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUlubGluZVBh
dGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEo
cGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VJbmxp
bmVQYXRoKHBhdGhEYXRhKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U3Ryb2tlSW5saW5lUGF0aCgpOwotCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0
aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7Ci0K
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxp
bmVQYXRoRGF0YSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIElu
bGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fcGF0aERhdGE7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5lUGF0aD4+IFN0cm9rZUlubGluZVBhdGg6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRo
RGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0aERhdGEpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlSW5saW5lUGF0aDo6
Y3JlYXRlKFdURk1vdmUoKnBhdGhEYXRhKSk7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tlUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBTdHJva2VQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNy
ZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBt
X3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
flN0cm9rZVBhdGgoKTsKKyAgICBTdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAg
IDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTdHJva2VQYXRoPiBkZWNvZGUo
RGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3Bh
dGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KQEAgLTMwNTAsNzIxICsyNDk1LDExNSBAQCB2b2lkIFN0cm9rZVBhdGg6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBTdHJva2VQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPFN0cm9rZVBhdGg+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwog
ICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVy
biBTdHJva2VQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRo
KSB9fTsKIH0KIAotY2xhc3MgU3Ryb2tlRWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBTdHJva2VFbGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlw
c2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgflN0cm9rZUVsbGlwc2UoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0
cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUVsbGlwc2U6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBTdHJva2VFbGxp
cHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VFbGxpcHNlOjpjcmVhdGUoKnJl
Y3QpOwotfQotCi1jbGFzcyBDbGVhclJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
Q2xlYXJSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkNsZWFyUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAg
ICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xl
YXJSZWN0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVh
clJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclJlY3Q6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsZWFyUmVjdD4+IENsZWFyUmVjdDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0
OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xlYXJSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQot
CiAjaWYgVVNFKENHKQotY2xhc3MgQXBwbHlTdHJva2VQYXR0ZXJuIDogcHVibGljIEl0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPiBjcmVhdGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHJva2VQYXR0ZXJuKTsKLSAg
ICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseVN0cm9rZVBhdHRlcm4oKTsK
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5
U3Ryb2tlUGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7CitjbGFzcyBBcHBseVN0cm9rZVBhdHRl
cm4geworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlTdHJva2VQ
YXR0ZXJuKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNv
bnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlT
dHJva2VQYXR0ZXJuPj4gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0g
ICAgcmV0dXJuIEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNzIEFwcGx5
RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0
ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJu
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5RmlsbFBhdHRlcm4oKTsK
LQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlGaWxsUGF0dGVybjo6ZW5jb2RlKEVuY29kZXIm
KSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEFw
cGx5RmlsbFBhdHRlcm4+PiBBcHBseUZpbGxQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0g
ICAgcmV0dXJuIEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpOwotfQogI2VuZGlmCiAKLWNsYXNz
IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseURldmlj
ZVNjYWxlRmFjdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZhY3RvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCisgICAgICAgIDogbV9zY2FsZUZhY3RvcihzY2Fs
ZUZhY3RvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNl
U2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFjdG9yKCk7Ci0KICAgICBmbG9hdCBzY2FsZUZhY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVGYWN0b3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7
CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBzY2FsZUZhY3Rvcik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIGZsb2F0IG1fc2NhbGVGYWN0b3I7Citwcml2YXRlOgorICAgIGZsb2F0IG1f
c2NhbGVGYWN0b3IgeyAxIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBB
cHBseURldmljZVNjYWxlRmFjdG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fc2NhbGVGYWN0b3I7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0
PiBzY2FsZUZhY3RvcjsKLSAgICBkZWNvZGVyID4+IHNjYWxlRmFjdG9yOwotICAgIGlmICghc2Nh
bGVGYWN0b3IpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKCpzY2FsZUZhY3Rvcik7Ci19Ci0KLQotV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKLQot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3R5cGU7Ci0KLSAgICBzd2l0Y2ggKG1fdHlw
ZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2F2ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0
b3JlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFJlc3RvcmU+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Um90YXRlPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNjYWxlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRD
VE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRp
ZW50OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxHcmFkaWVudD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9y
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxTZXRMaW5lQ2FwPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVE
YXNoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVK
b2luOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVKb2luPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxDbGVhclNoYWRvdz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXA+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxDbGlwT3V0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
Q2xpcE91dFRvUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwUGF0aD4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0dseXBocz4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RHJhd0ltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdU
aWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdUaWxl
ZFNjYWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2VC
dWZmZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UGF0dGVybj4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxEcmF3UmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TGluZT4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JU
ZXh0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdF
bGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJl
Y3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBv
c2l0ZWRSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVj
dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RmlsbFBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8UGFpbnRGcmFtZUZvck1lZGlhPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRo
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxD
bGVhclJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVn
aW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxCZWdpblRy
YW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEVu
ZFRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykK
LSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PEl0ZW1UeXBlPiBpdGVtVHlwZTsKLSAgICBkZWNvZGVyID4+IGl0ZW1UeXBlOwotICAgIGlmICgh
aXRlbVR5cGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBzd2l0Y2ggKCpp
dGVtVHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTYXZlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFJlc3RvcmU6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBUcmFuc2xhdGU6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpS
b3RhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBSb3RhdGU6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFNjYWxlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0Q1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogewotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxDb2xvcjo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5s
aW5lU3Ryb2tlQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFNldFN0YXRlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFNldExpbmVDYXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFNldExpbmVEYXNoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBT
ZXRMaW5lSm9pbjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBT
ZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBD
bGVhclNoYWRvdzo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXBPdXQ6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9Q
YXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRo
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29t
bWFuZHM6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3R2x5cGhzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0dseXBoczo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdJbWFnZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZEltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdUaWxlZFNjYWxl
ZEltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJh
d0ltYWdlQnVmZmVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RHJhd1JlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5l
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5l
c0ZvclRleHQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0VsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IERyYXdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0
czoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3Q6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhD
b2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhH
cmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBGaWxsRWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFB1dEltYWdlRGF0YTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9r
ZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFN0cm9rZUVsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBDbGVhclJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBw
bHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseURldmljZVNjYWxlRmFjdG9yOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLX0KK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEl0
ZW1IYW5kbGUpOwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9E
UkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0g
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBv
YmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJ
VEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJdGVtKCkpCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFRvVmFsdWVUeXBlTmFtZSkgXAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1l
KSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTY2FsZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTZXRDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
Q29uY2F0ZW5hdGVDVE0pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
U2V0SW5saW5lRmlsbEdyYWRpZW50KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKFNldElubGluZUZpbGxDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRJbmxpbmVTdHJva2VDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTZXRTdHJva2VUaGlja25lc3MpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3RhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oU2V0TGluZUNhcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShTZXRMaW5lRGFzaCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTZXRMaW5lSm9pbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTZXRNaXRlckxpbWl0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENsaXApCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91
dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0VG9QYXRo
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBQYXRoKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBUb0RyYXdpbmdDb21tYW5k
cykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhzKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFnZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3SW1hZ2VCdWZmZXIp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXR0ZXJuKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdSZWN0KQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdMaW5lc0ZvclRleHQpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3RWxsaXBzZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3UGF0aCkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUGF0aCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUmVjdHMpCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3QpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoQ29sb3IpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoR3JhZGllbnQp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbENvbXBvc2l0ZWRS
ZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSb3VuZGVk
UmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSkKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsSW5saW5lUGF0aCkKLSNlbmRpZgotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxFbGxpcHNlKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFB1dEltYWdlRGF0YSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQYWludEZyYW1lRm9yTWVkaWEpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUmVjdCkKLSNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
dHJva2VJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShC
ZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVyKQotI2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShBcHBseVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFk
b3cpCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCmluZGV4IGJmNWI4M2IyMmMzZjRjNzI1ODFlNjhiOWE1MmQ3NzMwMmQy
ODI5NGUuLjkwZWJkZTU1Zjg5Nzk2YTgxMTg3OWRiMDc4NDhjMDc0ZjQ1Mzg1NzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUmVj
b3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KQogewotICAgIGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlB1dEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRl
c3RQb2ludCwgZGVzdEZvcm1hdCkpOworICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9y
bWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0
YXRpYyBib29sIGNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkBAIC04NywyMSArODcsMjEgQEAgc3RhdGljIGJvb2wgY29u
dGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJiBjaGEKIHZvaWQgUmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCiB7CiAgICAgaWYgKCFjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kSXRlbShTZXRTdGF0ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdl
RmxhZ3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0YXRlPihjaGFuZ2VzLm1fc3RhdGUsIGNoYW5n
ZUZsYWdzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAg
ICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShj
aGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGlu
ZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJ
dGVtKFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MpKTsKKyAgICAgICAgYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oY2hhbmdlcy5tX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxp
c3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUu
ZmlsbENvbG9yLmFzSW5saW5lKCkpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xv
cj4oY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxHcmFkaWVu
dDo6Y3JlYXRlKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KSk7CisgICAgICAgIGFwcGVu
ZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkK
QEAgLTEzOSwyNyArMTM5LDI3IEBAIHZvaWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhCiAKIHZvaWQgUmVj
b3JkZXI6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBhcHBlbmRJdGVtKENsZWFyU2hhZG93OjpjcmVh
dGUoKSk7CisgICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVDYXA6
OmNyZWF0ZShsaW5lQ2FwKSk7CisgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwogfQog
CiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwg
ZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUo
ZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7CisgICAgYXBwZW5kPFNldExpbmVEYXNoPihkYXNoQXJy
YXksIGRhc2hPZmZzZXQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVKb2luOjpjcmVhdGUobGluZUpv
aW4pKTsKKyAgICBhcHBlbmQ8U2V0TGluZUpvaW4+KGxpbmVKb2luKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogewotICAgIGFwcGVuZEl0ZW0o
U2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGltaXQpKTsKKyAgICBhcHBlbmQ8U2V0TWl0ZXJM
aW1pdD4obWl0ZXJMaW1pdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0xNjksMTkgKzE2OSwxOSBAQCB2b2lkIFJl
Y29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShp
bWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBh
cHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGlu
Z09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAog
SW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsK
KyAgICBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0
aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rv
ciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBh
aW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3Jk
OwogfQogCkBAIC0xOTAsMjMgKzE5MCwyMyBAQCBib29sIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwogICAg
IGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+bG9ja1JlbW90ZUltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZUJ1ZmZlci5yZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBh
cHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdOYXRpdmVJ
bWFnZTo6Y3JlYXRlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KSk7CisgICAgYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0dGVybihJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3UGF0dGVybjo6Y3JlYXRlKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdQYXR0
ZXJuPihpbWFnZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNhdmUoKQogewotICAgIGFw
cGVuZEl0ZW0oU2F2ZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxTYXZlPigpOwogICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQobV9zdGF0ZVN0YWNrLmxhc3QoKS5jbG9uZUZvclNhdmUoKSk7CiB9CiAK
QEAgLTIyMSwyNSArMjIxLDI1IEBAIHZvaWQgUmVjb3JkZXI6OnJlc3RvcmUoKQogICAgIC8vIEhh
dmUgdG8gYXZvaWQgZWxpZGluZyBuZXN0ZWQgU2F2ZS9SZXN0b3JlIHdoZW4gYSBkZXNjZW5kYW50
IHN0YXRlIGNvbnRhaW5zIGRyYXdpbmcgaXRlbXMuCiAgICAgY3VycmVudFN0YXRlKCkud2FzVXNl
ZEZvckRyYXdpbmcgfD0gc3RhdGVVc2VkRm9yRHJhd2luZzsKIAotICAgIGFwcGVuZEl0ZW0oUmVz
dG9yZTo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxSZXN0b3JlPigpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS50
cmFuc2xhdGUoeCwgeSk7Ci0gICAgYXBwZW5kSXRlbShUcmFuc2xhdGU6OmNyZWF0ZSh4LCB5KSk7
CisgICAgYXBwZW5kPFRyYW5zbGF0ZT4oeCwgeSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnJvdGF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucykKIHsKICAgICBjdXJyZW50U3RhdGUoKS5yb3RhdGUoYW5n
bGVJblJhZGlhbnMpOwotICAgIGFwcGVuZEl0ZW0oUm90YXRlOjpjcmVhdGUoYW5nbGVJblJhZGlh
bnMpKTsKKyAgICBhcHBlbmQ8Um90YXRlPihhbmdsZUluUmFkaWFucyk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBjdXJyZW50U3RhdGUo
KS5zY2FsZShzaXplKTsKLSAgICBhcHBlbmRJdGVtKFNjYWxlOjpjcmVhdGUoc2l6ZSkpOworICAg
IGFwcGVuZDxTY2FsZT4oc2l6ZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKQEAgLTI0OCwxMyArMjQ4LDEzIEBAIHZvaWQg
UmVjb3JkZXI6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY3VycmVudFN0YXRlKCkuY29uY2F0Q1RNKHRyYW5zZm9ybSk7
Ci0gICAgYXBwZW5kSXRlbShDb25jYXRlbmF0ZUNUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworICAg
IGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4odHJhbnNmb3JtKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewogICAgIGN1cnJlbnRT
dGF0ZSgpLnNldENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oU2V0Q1RNOjpjcmVhdGUo
dHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKIH0KIAogQWZmaW5l
VHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNl
U2NhbGUpCkBAIC0yNjUsMTU4ICsyNjUsMTU4IEBAIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQogCiB2b2lkIFJlY29y
ZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUob3BhY2l0
eSkpOworICAgIGFwcGVuZDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihvcGFjaXR5KTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGFwcGVuZEl0ZW0o
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8RW5kVHJhbnNwYXJl
bmN5TGF5ZXI+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoRHJhd1JlY3Q6OmNyZWF0ZShyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKKyAgICBh
cHBlbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0xpbmU6OmNyZWF0
ZShwb2ludDEsIHBvaW50MikpOworICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoRHJhd0xpbmVzRm9yVGV4dDo6Y3JlYXRlKEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9p
bnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKSk7CisgICAgYXBw
ZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKHJlY3QsIHN0eWxlKSk7Cisg
ICAgYXBwZW5kPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KHJlY3QsIHN0eWxlKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0VsbGlwc2U6OmNyZWF0ZShyZWN0KSk7Cisg
ICAgYXBwZW5kPERyYXdFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1Bh
dGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERy
YXdQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxEcmF3UGF0aD4ocGF0aCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZShwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4ocGF0aCwgd2lkdGgs
IG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0Zv
Y3VzUmluZ1JlY3RzOjpjcmVhdGUocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAg
YXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3Q6OmNyZWF0ZShyZWN0KSk7Cisg
ICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhDb2xvcjo6Y3JlYXRlKHJlY3QsIGNvbG9y
KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihyZWN0LCBjb2xvcik7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoR3Jh
ZGllbnQ6OmNyZWF0ZShyZWN0LCBncmFkaWVudCkpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4ocmVjdCwgZ3JhZGllbnQpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9k
ZSkpOworICAgIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBvcCwgYmxl
bmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSb3VuZGVkUmVjdDo6Y3Jl
YXRlKHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbFJvdW5kZWRSZWN0
PihyZWN0LCBjb2xvciwgYmxlbmRNb2RlKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVhdGUocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRmlsbElubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEoKSkp
OworICAgICAgICBhcHBlbmQ8RmlsbElubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoRmlsbFBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPEZpbGxQYXRoPihwYXRoKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbEVsbGlwc2U6OmNyZWF0ZShyZWN0
KSk7CisgICAgYXBwZW5kPEZpbGxFbGxpcHNlPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVJlY3Q6OmNyZWF0ZShyZWN0LCBsaW5l
V2lkdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewotICAg
ICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZShw
YXRoLmlubGluZURhdGEoKSkpOworICAgICAgICBhcHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4ocGF0
aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFw
cGVuZDxTdHJva2VQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChTdHJva2VFbGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxTdHJva2VFbGxpcHNl
PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KENsZWFyUmVjdDo6Y3JlYXRl
KHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xlYXJSZWN0PihyZWN0KTsKIH0KIAogI2lmIFVTRShDRykK
IHZvaWQgUmVjb3JkZXI6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgYXBwZW5kSXRlbShB
cHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0
ZXJuPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBh
cHBlbmRJdGVtKEFwcGx5RmlsbFBhdHRlcm46OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8QXBwbHlG
aWxsUGF0dGVybj4oKTsKIH0KICNlbmRpZgogCiB2b2lkIFJlY29yZGVyOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVyc2Vj
dChyZWN0KTsKLSAgICBhcHBlbmRJdGVtKENsaXA6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5k
PENsaXA+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXQ6OmNyZWF0ZShyZWN0KSk7CisgICAg
YXBwZW5kPENsaXBPdXQ+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRlbShDbGlwT3V0VG9QYXRoOjpjcmVhdGUocGF0
aCkpOworICAgIGFwcGVuZDxDbGlwT3V0VG9QYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiB7CiAgICAg
Y3VycmVudFN0YXRlKCkuY2xpcEJvdW5kcy5pbnRlcnNlY3QocGF0aC5mYXN0Qm91bmRpbmdSZWN0
KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFBhdGg6OmNyZWF0ZShwYXRoLCB3aW5kUnVsZSkpOwor
ICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCiBJbnRSZWN0IFJlY29y
ZGVyOjpjbGlwQm91bmRzKCkKQEAgLTQ0NCwxOSArNDQ0LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNw
YWNlIGNvCiAKICAgICBhdXRvIHJlY29yZGluZ0NvbnRleHQgPSBtYWtlVW5pcXVlPERyYXdpbmdD
b250ZXh0PihkZXN0aW5hdGlvbi5zaXplKCksIGluaXRpYWxDVE0pOwogICAgIGRyYXdpbmdGdW5j
dGlvbihyZWNvcmRpbmdDb250ZXh0LT5jb250ZXh0KCkpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGlu
Z0NvbnRleHQtPnRha2VEaXNwbGF5TGlzdCgpKSk7CisgICAgYXBwZW5kPENsaXBUb0RyYXdpbmdD
b21tYW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIHJlY29yZGluZ0NvbnRleHQtPnRha2VE
aXNwbGF5TGlzdCgpKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAg
YXBwZW5kSXRlbShQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShwbGF5ZXIsIGRlc3RpbmF0aW9u
KSk7CisgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4ocGxheWVyLCBkZXN0aW5hdGlvbik7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgY2hhbmdlcyB0aGUgYmFzZUNUTSwg
d2hpY2ggd2lsbCBpbnZhbGlkYXRlIGFsbCBvZiBvdXIgY2FjaGVkIGV4dGVudHMuCiAgICAgLy8g
QXNzZXJ0IHRoYXQgaXQncyBvbmx5IGNhbGxlZCBlYXJseSBvbj8KLSAgICBhcHBlbmRJdGVtKEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmNyZWF0ZShkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIGFw
cGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihkZXZpY2VTY2FsZUZhY3Rvcik7CiB9CiAKIEZs
b2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQpAQCAtNDY1LDMwICs0NjUsNiBAQCBG
bG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBHcmFwaGljc0NvbnRleHQ6OgogICAgIHJldHVybiByZWN0OwogfQogCi12b2lkIFJlY29y
ZGVyOjphcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJlZjxEcmF3aW5nSXRlbT4mJiBpdGVtKQot
ewotICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICBhcHBlbmRJdGVt
KFdURk1vdmUoaXRlbSkpOwotICAgIHVwZGF0ZUl0ZW1FeHRlbnQobmV3SXRlbSk7Ci19Ci0KLXZv
aWQgUmVjb3JkZXI6OmFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYgaXRlbSkKLXsKLSAgICBJdGVtJiBu
ZXdJdGVtID0gaXRlbS5nZXQoKTsKLSAgICBhdXRvIHR5cGUgPSBuZXdJdGVtLnR5cGUoKTsKLSAg
ICB3aWxsQXBwZW5kSXRlbU9mVHlwZSh0eXBlKTsKLSAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZChX
VEZNb3ZlKGl0ZW0pKTsKLSAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwotfQotCi12b2lk
IFJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJiBpdGVtKSBjb25zdAotewot
ICAgIGlmIChPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBo
aWNzQ29udGV4dCgpKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQoZXh0ZW50RnJvbUxvY2FsQm91
bmRzKHJlY3QudmFsdWUoKSkpOwotICAgIGVsc2UgaWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50KHJlY3QudmFs
dWUoKSk7Ci19Ci0KIC8vIEZJWE1FOiBzaGFyZSB3aXRoIFNoYWRvd0RhdGEKIHN0YXRpYyBpbmxp
bmUgZmxvYXQgc2hhZG93UGFpbnRpbmdFeHRlbnQoZmxvYXQgYmx1clJhZGl1cykKIHsKQEAgLTUw
OCw3ICs0ODQsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwogICAg
IENvbG9yIHNoYWRvd0NvbG9yOwogICAgIGlmIChncmFwaGljc0NvbnRleHQoKS5nZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewotICAgICAgICBGbG9h
dFJlY3Qgc2hhZG93RXh0ZW50PSBib3VuZHM7CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRl
bnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAg
ICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1Jh
ZGl1cykpOwogICAgICAgICBib3VuZHMudW5pdGUoc2hhZG93RXh0ZW50KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDkyYzA1MTNhN2Y5YzZiY2E1MjUwNDQ4ZjMw
ODNmZGUxY2Q2NmQ4OTQuLmZmZTE1OTFiYWZkNDlkYjMzZTk0M2U5OWMxYmExNGNkYmM0YzYwMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjcsNiArMjcsNyBA
QAogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdH
bHlwaHNSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIgLy8gRm9yIEltYWdl
OjpUaWxlUnVsZS4KICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKQEAgLTQ4LDggKzQ5LDYgQEAgc3Ry
dWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1j
bGFzcyBEcmF3aW5nSXRlbTsKLQogY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0SW1wbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUmVjb3JkZXIpOwpAQCAtMTQ4LDE1ICsxNDcsMzQgQEAgcHJpdmF0ZToKIAogICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNz
Q29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYXBwZW5kSXRlbShS
ZWY8SXRlbT4mJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4KKyAg
ICB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHdpbGxBcHBlbmRJ
dGVtT2ZUeXBlKFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQ8VD4o
c3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgZGlkQXBwZW5kSXRlbU9mVHlw
ZShUOjppdGVtVHlwZSk7CisKKyAgICAgICAgaWYgKCFUOjppc0RyYXdpbmdJdGVtKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChMSUtFTFkoIW1fZGlzcGxheUxpc3QudHJhY2tz
RHJhd2luZ0l0ZW1FeHRlbnRzKCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1
dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgaWYgKGF1
dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0KCkpKQorICAgICAgICAg
ICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRlbnRGcm9tTG9jYWxCb3Vu
ZHMoKnJlY3QpKTsKKyAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9iYWxCb3Vu
ZHMoKSkKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoKnJl
Y3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJ
dGVtRXh0ZW50KFdURjo6bnVsbG9wdCk7CisgICAgfQorCiAgICAgdm9pZCB3aWxsQXBwZW5kSXRl
bU9mVHlwZShJdGVtVHlwZSk7CiAgICAgdm9pZCBkaWRBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBl
KTsKLSAgICB2b2lkIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYm
KTsKIAogICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwog
CiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKLSAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25zdDsKICAg
ICAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwogICAgIGNvbnN0IEZs
b2F0UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuY3BwCmluZGV4IDEyYjVmNjJjYzQyNDUyMTQyZDhiOThlMmRlZjI1NGVlMTBkN2Yx
ODIuLmQ2YjFhOTIyNTY2MjUwYzUyMWNkNjkxZDM4OWIxZDU3YzRhNDhmMDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKQEAgLTUyLDI2ICs1MiwyNiBAQCBzdGQ6
OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IFJlcGxheWVyOjpyZXBsYXkoY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgYm9vbAogICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKQog
ICAgICAgICByZXBsYXlMaXN0ID0gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdD4oKTsKIAotICAgIGF1
dG8mIGl0ZW1zID0gbV9kaXNwbGF5TGlzdC5saXN0KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBpdGVtID0gaXRlbXNbaV0u
Z2V0KCk7Ci0KLSAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBpczxEcmF3aW5n
SXRlbT4oaXRlbSkpIHsKLSAgICAgICAgICAgIGNvbnN0IERyYXdpbmdJdGVtJiBkcmF3aW5nSXRl
bSA9IGRvd25jYXN0PERyYXdpbmdJdGVtPihpdGVtKTsKLSAgICAgICAgICAgIGlmIChkcmF3aW5n
SXRlbS5leHRlbnRLbm93bigpICYmICFkcmF3aW5nSXRlbS5leHRlbnQoKS5pbnRlcnNlY3RzKGlu
aXRpYWxDbGlwKSkgewotICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlz
dHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8PCBpIDw8ICIgIiA8PCBpdGVtKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
c2l6ZV90IGkgPSAwOworI2VuZGlmCisgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRdIDogbV9k
aXNwbGF5TGlzdCkgeworICAgICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGV4dGVu
dCAmJiAhZXh0ZW50LT5pbnRlcnNlY3RzKGluaXRpYWxDbGlwKSkgeworICAgICAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJza2lwcGluZyAiIDw8IGkrKyA8
PCAiICIgPDwgaXRlbSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAiYXBwbHlpbmcgIiA8
PCBpIDw8ICIgIiA8PCBpdGVtKTsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0
cywgc3RyZWFtIDw8ICJhcHBseWluZyAiIDw8IGkrKyA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAg
IGlmICghbV9kZWxlZ2F0ZSB8fCAhbV9kZWxlZ2F0ZS0+YXBwbHkoaXRlbSwgbV9jb250ZXh0KSkK
ICAgICAgICAgICAgIGl0ZW0uYXBwbHkobV9jb250ZXh0KTsKIAotICAgICAgICBpZiAoVU5MSUtF
TFkodHJhY2tSZXBsYXlMaXN0KSkKLSAgICAgICAgICAgIHJlcGxheUxpc3QtPmFwcGVuZEl0ZW0o
Y29uc3RfY2FzdDxJdGVtJj4oaXRlbSkpOworICAgICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBs
YXlMaXN0KSkgeworICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5kKGl0ZW0pOworICAgICAg
ICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAgICAgICAgIHJlcGxheUxp
c3QtPmFkZERyYXdpbmdJdGVtRXh0ZW50KFdURk1vdmUoZXh0ZW50KSk7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVwbGF5TGlzdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggNDBjZDBmZjBkNDE2ODBjZmM3M2U1MDRkZWNmYzNk
ZWY4Nzc1MzIzMy4uMDQ1Y2FjY2U4YTAxYzhkNWRjYjY1OGM0MGQ2M2U5YTM1ODliNWI2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC01MCw3ICs1MCw3IEBAIHB1
YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZSB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFs
IH5EZWxlZ2F0ZSgpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoSXRlbSYsIEdyYXBo
aWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShJdGVtSGFuZGxlLCBHcmFwaGljc0NvbnRleHQmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIH07
CiAgICAgCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAppbmRleCBiMjQ3ODBjZDdiMDc0NDNiMTU1MDI2Y2Y2
YjE5ODFjODIyMmJkNTBjLi43OGUyNjVkYmY1NGU5YmQyNGI5ZDQxYjczOTAwOTcwMjE0OTFmYTkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXIuaApAQCAtMjcsMTQgKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCiAKKyNpbmNsdWRlICJEZWNvZGVyLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xh
c3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRl
bGVnYXRlIHsKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNy
ZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlcGxheWVyOjpEZWxlZ2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVyUmVhZGluZ0NsaWVudCB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBX
ZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBCYXNl
Q29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFn
ZUJ1ZmZlcjo6bV9iYWNrZW5kOwpAQCAtNzAsMTAgKzczLDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBp
dGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCisgICAgYm9v
bCBhcHBseShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRl
bS50eXBlKCkgPT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEp
IHsKLSAgICAgICAgICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAgIGlmIChpdGVt
LmlzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0
ZW0uaW5wdXRGb3JtYXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VE
YXRhSXRlbS5zcmNSZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdl
RGF0YUl0ZW0uZGVzdEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC04NCw2ICs4NywxMTUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5hcHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsKICAgICB9CiAK
KyAgICBPcHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVT
RURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91
dFRvUGF0aD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5k
cz4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJl
dHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQ
YXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1Jp
bmdSZWN0cz4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0PihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3UGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdHRlcm4+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJ
bWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoKKyAg
ICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRo
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdp
dGhHcmFkaWVudD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToK
KyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVk
UmVjdDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6
CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpQdXRJbWFnZURhdGE+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAg
ICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
RGFzaD4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6CisjaWYgVVNFKENHKQorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRp
ZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5UcmFu
c3BhcmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNsZWFyUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNsZWFyU2hhZG93OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q2xpcDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNsaXBPdXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbElubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNhdmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldENUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1p
dDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9r
ZVRoaWNrbmVzczoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlN0cm9rZUVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2Vu
ZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VS
ZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNs
YXRlOiB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBPcHRpb25hbDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4g
V0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUFuZENyZWF0ZShjb25zdCB1aW50OF90KiBkYXRhLCBz
aXplX3QgbGVuZ3RoLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBJUEM6OkRlY29kZXI6OmRlY29kZVNpbmdsZU9iamVjdDxUPihkYXRhLCBs
ZW5ndGgpKSB7CisgICAgICAgICAgICBuZXcgKGhhbmRsZUxvY2F0aW9uICsgc2l6ZW9mKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZSkpIFQoV1RGTW92ZSgqaXRlbSkpOworICAgICAgICAg
ICAgcmV0dXJuIHt7IGhhbmRsZUxvY2F0aW9uIH19OworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorCiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCYgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4
IGRmMGVkNDdlNWJlZmQ2Nzk4NDZhNGM3ZjUwNjIwMTM2NjQ2MGI2ODAuLmM1MDA0NjQxNjFmMDNl
ZWRkMTg1NjIyOGUxMDhlODk0YTMwODg0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAg
LTcyLDEwICs3MiwxMCBAQCB1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIudG9VSW50NjQoKTsKIH0KIAotYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjphcHBseVJlc291cmNlSXRlbShjb25zdCBEaXNwbGF5TGlzdDo6SXRlbSYgaXRlbSwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQorYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseVJl
c291cmNlSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiB7Ci0gICAgaWYgKGl0ZW0udHlwZSgpID09IERpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0ltYWdlQnVmZmVyKSB7Ci0gICAgICAgIGF1dG8mIGRyYXdJdGVtID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlciY+KGl0ZW0pOworICAgIGlmIChp
dGVtLmlzPERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCkpIHsKKyAgICAgICAgYXV0byYg
ZHJhd0l0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPigpOwogICAg
ICAgICBhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdl
QnVmZmVyKGRyYXdJdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKICAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg3LDEzICs4
NywxMiBAQCBib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNv
bnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShjb25zdCBEaXNwbGF5
TGlzdDo6SXRlbSYgaXRlbSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorYm9vbCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbShEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBp
dGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYgKGl0ZW0udHlwZSgpICE9
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhKQorICAg
IGlmICghaXRlbS5pczxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBtZWRpYUl0ZW0gPSBzdGF0aWNfY2FzdDxjb25z
dCBEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhJj4oaXRlbSk7Ci0KKyAgICBhdXRvJiBt
ZWRpYUl0ZW0gPSBpdGVtLmdldDxEaXNwbGF5TGlzdDo6UGFpbnRGcmFtZUZvck1lZGlhPigpOwog
ICAgIGF1dG8gcHJvY2VzcyA9IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKICAgICBpZiAo
IXByb2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MCwxOSArMTM5LDQ1IEBAIHZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjphcHBseURpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5k
bGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFNob3VsZEZsdXNoQ29udGV4dCBmbHVzaENvbnRleHQpCiB7Ci0gICAgaWYgKGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSkKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpOworICAgIGF1dG8gZGlzcGxheUxpc3QgPSBoYW5kbGUuY3JlYXRl
RGlzcGxheUxpc3QoWyZdIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZp
ZXIgaWRlbnRpZmllcikgLT4gdWludDhfdCogeworICAgICAgICBpZiAoYXV0byBzaGFyZWRNZW1v
cnkgPSBtX3NoYXJlZEl0ZW1CdWZmZXJzLnRha2UoaWRlbnRpZmllcikpCisgICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9KTsKKworICAgIGlmICghZGlzcGxheUxpc3Qp
IHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRlIHRo
ZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKSB7CisgICAgICAgIC8v
IEZJWE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRlcm1pbmF0ZSB0aGUgd2ViIHByb2Nlc3Mu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW1hZ2VCdWZmZXItPmlzQWNjZWxl
cmF0ZWQoKSkKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQoc3RhdGlj
X2Nhc3Q8QWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcio+KGltYWdlQnVmZmVyKSk7CisgICAg
ZWxzZQorICAgICAgICBkaXNwbGF5TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChzdGF0aWNfY2Fz
dDxVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIqPihpbWFnZUJ1ZmZlcikpOworCisgICAg
aW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3QoKmRpc3BsYXlMaXN0KTsKKworICAgIGlmIChm
bHVzaENvbnRleHQgPT0gU2hvdWxkRmx1c2hDb250ZXh0OjpZZXMpCisgICAgICAgIGltYWdlQnVm
ZmVyLT5mbHVzaENvbnRleHQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpm
bHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIGlmIChhdXRvIGltYWdlQnVmZmVy
ID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRGlzcGxheUxpc3Qo
ZGlzcGxheUxpc3QpOwotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7Ci0gICAg
ICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVudGlmaWVyLCByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIH0KKyAgICBhcHBseURpc3BsYXlMaXN0KGhhbmRs
ZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Ok5vKTsK
K30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0QW5kQ29t
bWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5kbGUsIERpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBhcHBseURpc3BsYXlMaXN0KGhh
bmRsZSwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQ6Olll
cyk7CisgICAgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBJ
bnRSZWN0IHNyY1JlY3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoSVBDOjpJbWFnZURhdGFSZWZl
cmVuY2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xNjgsNiArMTkzLDEyIEBAIHZvaWQg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVJlbW90ZVJlc291cmNlKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByCiAgICAgbV9yZW1vdGVSZXNvdXJjZUNhY2hlLnJlbGVhc2VSZW1v
dGVSZXNvdXJjZShyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKERpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQQ0hh
bmRsZSYgaGFuZGxlKQoreworICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6bWFwKGhhbmRsZS5oYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkp
KQorICAgICAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLnNldChpZGVudGlmaWVyLCBXVEZNb3ZlKHNo
YXJlZE1lbW9yeSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IDI4NWUyZjc0YjRkNGZk
NmU2YThjNWU5MTAyNWExYzkyNmY1ZmZiMTUuLjMwNTIwNmI1ZmJmMGMxYWExMWIzZTEwMjk5ZjNl
NWRmZTgwYWQ0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMzUsNyArMzUsOSBAQAogI2lu
Y2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCkBAIC02Myw4ICs2NSw4
IEBAIHB1YmxpYzoKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCkgY29uc3Q7CiAKICAgICAvLyBSZW5kZXJpbmcgb3BlcmF0aW9ucy4KLSAg
ICBib29sIGFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYpOworICAgIGJvb2wgYXBwbHlSZXNvdXJjZUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIGJvb2wgYXBwbHlNZWRp
YUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYpOwogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAgICB2b2lkIGltYWdl
QnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLCBX
ZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtNzMsNiArNzUsOSBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAorICAgIGVudW0g
Y2xhc3MgU2hvdWxkRmx1c2hDb250ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGFw
cGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dCk7CisKICAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04MywxNCArODgsMTYgQEAgcHJpdmF0
ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZvaWQgY3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNl
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hE
aXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQgZmx1c2hEaXNwbGF5
TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBE
aXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZv
aWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJ
UEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9pZCByZWxlYXNlUmVtb3RlUmVz
b3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRp
ZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRl
bnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsKIAogICAgIFJlbW90ZVJl
c291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFdlYWtQdHI8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAgIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7CisgICAg
SGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0
cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGE4
OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMuLmJiOTE1YWIxOTVhZDM3Nzcy
MGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1l
c3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
IG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCB7Ci0gICAg
dm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVz
aERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlz
dCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkRpc3BsYXlMaXN0
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBDcmVhdGVJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdChXZWJLaXQ6
OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNo
RGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSBkaXNw
bGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZp
ZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50UmVjdCBzcmNSZWN0
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1hZ2VEYXRhKSBTeW5jaHJv
bm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRGlkQ3Jl
YXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlm
aWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5kbGUgaGFuZGxlKQor
ICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5k
ZXggM2I4MjM2ZGE4M2Q3YzY2MjM5M2MxNDc3ZjRmOWFlMDU3NzM1MzY3OS4uMjg2MTU1YTkxN2U0
YjMxNzUwYmNlNjBkMjg2NzliYjBhYTViN2MzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CkBAIC0yMDgsNiArMjA4LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90
X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1N0cmluZycsCiAgICAgICAgICdXZWJD
b3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRpY3RhdGlvbkNvbnRleHQnLAor
ICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzJywKICAgICAgICAgJ1dlYkNvcmU6
OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudE9yV29ya2Vy
SWRlbnRpZmllcicsCkBAIC01ODYsNiArNTg3LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlw
ZSk6CiAgICAgICAgICdKU0M6Ok1lc3NhZ2VTb3VyY2UnOiBbJzxKYXZhU2NyaXB0Q29yZS9Db25z
b2xlVHlwZXMuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVGFyZ2V0VHlwZSc6
IFsnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAogICAgICAgICAnSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlJzogWyc8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInOiBbJzxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+J10s
CiAgICAgICAgICdNZWRpYVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+J10sCiAgICAgICAgICdN
b25vdG9uaWNUaW1lJzogWyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwKICAgICAgICAgJ1NlY29u
ZHMnOiBbJzx3dGYvU2Vjb25kcy5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYTc0ZDYxNWFiZDNmNGEzMTg2
MjUyZmYwZmRjYjg3MWU3MGZhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3Qg
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBkaXNwbGF5TGlz
dC5mb3JFYWNoSXRlbUJ1ZmZlcihbJl0gKGF1dG8mIGhhbmRsZSkgeworICAgICAgICBtX2J1ZmZl
cnMuYXBwZW5kKHsgaGFuZGxlLmlkZW50aWZpZXIsIGhhbmRsZS5jYXBhY2l0eSB9KTsKKyAgICB9
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQcm92aWRlciYm
IGJ1ZmZlclByb3ZpZGVyKSBjb25zdAoreworICAgIERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFu
ZGxlcyBoYW5kbGVzOworICAgIGhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2J1ZmZl
cnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCBjYXBhY2l0eV0gOiBtX2J1
ZmZlcnMpIHsKKyAgICAgICAgYXV0byogZGF0YSA9IGJ1ZmZlclByb3ZpZGVyKGlkZW50aWZpZXIp
OworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBoYW5kbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGlkZW50aWZpZXIsIGRhdGEsIGNhcGFjaXR5
IH0pOworICAgIH0KKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3Q+KFdURk1vdmUoaGFuZGxlcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQxNzVlMTE0ZjIzYmM4ZmI4ZTU3Y2Q5MGY2NGEzM2JlMjYyZTFmMzEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJdGVtQnVmZmVyUHJvdmlkZXIg
PSBGdW5jdGlvbjx1aW50OF90KihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIpPjsKKworICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IGNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZmZXJQcm92
aWRlciYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZh
dGU6CisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+JiYgYnVmZmVycykK
KyAgICAgICAgOiBtX2J1ZmZlcnMoV1RGTW92ZShidWZmZXJzKSkKKyAgICB7CisgICAgfQorCisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIsIHNpemVfdD4+IG1fYnVmZmVyczsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgbV9idWZmZXJzOworfQorCit0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3Rv
cjxzdGQ6OnBhaXI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBz
aXplX3Q+Pj4gYnVmZmVyczsKKyAgICBkZWNvZGVyID4+IGJ1ZmZlcnM7CisgICAgaWYgKCFidWZm
ZXJzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7IFdURk1v
dmUoKmJ1ZmZlcnMpIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cmlu
ZGV4IGUwYWI3NDM2YmFkYzM0NjM3NDk0NjYzMzQ3MTliNDVlZGZkMmIzMDYuLjUwZTEwMjRjYWUw
ZGMwNDBjYWMzMjNjYmNkN2VjNWUxNDc0NDk0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMTczLDYgKzE3
Myw3IEBAIFNoYXJlZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcAogU2hhcmVk
L1Nlc3Npb25TdGF0ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwIEBuby11bmlmeQog
U2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAorU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAKIFNoYXJlZC9TaGFyZWRT
dHJpbmdIYXNoVGFibGVSZWFkT25seS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGUu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0NjY1Y2NiN2JjNmFmN2E3YTA4OTE1ZmRlNDY3MjZkOTY3ZjVmY2I0Li5jODFlNDhhYjE4
NzU4NDdjMGY1NjgwOWE1ODI3MGZhYjcxNTE5ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4NzMsNiArMTg3Myw3IEBACiAJCUY0
NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFFOUU3NTJGMDAzOEQx
OTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDhEMkE4NTIxNTgzQTdFMDBDNjc1
MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggKi87IH07CiAJ
CUY0OTZBNDMxMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OTZBNDJGMUY1
OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLzsgfTsKKwkJRjRB
NkQ2QkMyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2RDZCQjI1NENBM0U5
MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsKIAkJRjRDQjA5RTUy
MjVENUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5RTQyMjVENUEwMzAwODkx
NDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9OwogCQlGNEQ1RjUxRDIwNjA4
N0ExMDAzOEJCQTggLyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTE5MjA2MDg3QTAwMDM4
QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oICovOyB9OwogCQlGNEQ1RjUx
RjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ1RjUxQjIwNjA4
N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CkBA
IC01NDU5LDYgKzU0NjAsOCBAQAogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBwYXRoID0g
aW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBw
YXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0QUM2NTVFMjJB
MzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0RlZmF1bHRW
YWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIxRERCQkFCMDA5NUEzNzgg
LyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3RlcElELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Q0IwOUU0MjI1RDVBMDMwMDg5MTQ4NyAvKiBXZWJz
aXRlTWVkaWFTb3VyY2VQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZU1lZGlhU291cmNl
UG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTY2LDYgKzYxNjksOCBA
QAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRtYXAuaCAqLywK
IAkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuY3BwICov
LAogCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oICov
LAorCQkJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZS5jcHAgKi8sCisJCQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmggKi8sCiAJCQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVCIC8qIFNoYXJlZFN0
cmluZ0hhc2hTdG9yZS5jcHAgKi8sCiAJCQkJODMxM0Y3RTkxRjdEQUUwMzAwQjk0NEVCIC8qIFNo
YXJlZFN0cmluZ0hhc2hTdG9yZS5oICovLAogCQkJCTgzMTNGN0U4MUY3REFFMDMwMEI5NDRFQiAv
KiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwICovLApAQCAtMTEzMTUsNiArMTEzMjAsNyBAQAog
CQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8qIFNoYXJlZEJ1ZmZlckNv
cHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBDMTMwMTc2NyAvKiBTaGFy
ZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNEE2RDZCQzI1NENB
M0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRSaW5nQnVmZmVyU3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUwODAwQjk0NEVCIC8qIFNo
YXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCmluZGV4IGY3N2YzN2VlNDcxN2YzNzExYmRlM2ZhZmRkODgwODJjNmFhYjA4OTAuLjc1
ZTQwMTRjNzY4YTcwNWNkODc4YTMzZWRmZTQ1ZDcyY2Y5YjM2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQogCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KQEAgLTM2LDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxlZ2F0
ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7
CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7CkBAIC03Nyw2ICs4MSw4IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vha1B0cihyZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlz
dCgpLnNldEl0ZW1CdWZmZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1fZHJhd2luZ0NvbnRleHQu
ZGlzcGxheUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFsc2UpOwogICAgIH0K
IAogICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElk
ZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQpAQCAtMTg2LDYgKzE5Miwx
MTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOwogICAgIH0KIAor
ICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZm
ZXIoc2l6ZV90IGNhcGFjaXR5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KTsKKworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlIGl0ZW0pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBzd2l0
Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6
ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oKSk7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAg
ICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0
aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNv
ZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5k
cz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kcz4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmds
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
R2x5cGhzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oKSk7Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4o
aXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdOYXRpdmVJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRp
dmVJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3UGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmds
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVu
Y29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRl
cm4+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToK
KyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVy
biBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
VGlsZWRTY2FsZWRJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpF
bmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21w
b3NpdGVkUmVjdD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVk
UmVjdD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpG
aWxsUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJl
Y3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhD
b2xvcj4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVu
Y29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29k
ZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
Um91bmRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5n
bGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oKSk7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dElt
YWdlRGF0YT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNp
bmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJ
UEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3RhdGU+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U3Ryb2tlUGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46
CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGVhclJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkNsaXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGlwT3V0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVD
YXA6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0
aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlRyYW5zbGF0ZToKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAo
dHlwZSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBmOWE3ZGM1ZGUw
Mjg3NzE0ZTY2ZWNiMTcxNzQxYzJlODk1MzhlOTEyLi43N2I3MDYwMDQyMmZiNDA0ZWY2MjViODE2
NWM3ZjQ4Yzk5ZTgzNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMTYsMTMg
KzExOCwxNSBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aQogCiB2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3QoeyBkaXNwbGF5
TGlzdCB9LCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLmNsZWFyKCk7CiB9CiAKIERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hE
aXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKQogewogICAgIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50
aWZpZXIgPSBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29t
bWl0KGRpc3BsYXlMaXN0LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KHsg
ZGlzcGxheUxpc3QgfSwgc2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVt
QnVmZmVycy5jbGVhcigpOwogICAgIHJldHVybiBzZW50Rmx1c2hJZGVudGlmaWVyOwogfQogCkBA
IC0xNTUsNiArMTU5LDIzIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVz
aERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKERpc3BsYXlMaXN0Rmx1c2hJCiAgICAgICAgIGRvd25j
YXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5PigqaW1hZ2VCdWZmZXIpLmNv
bW1pdEZsdXNoRGlzcGxheUxpc3QoZmx1c2hJZGVudGlmaWVyKTsKIH0KIAorRGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJIYW5kbGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVt
QnVmZmVyKHNpemVfdCBjYXBhY2l0eSkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBk
ZWZhdWx0U2hhcmVkSXRlbUJ1ZmZlclNpemUgPSAxIDw8IDE2OworCisgICAgYXV0byBzaGFyZWRN
ZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmFsbG9jYXRlKHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVt
QnVmZmVyU2l6ZSwgY2FwYWNpdHkpKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gaWRlbnRpZmllciA9IERpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBzaGFy
ZWRNZW1vcnlIYW5kbGU7CisgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVkTWVt
b3J5SGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTaGFyZWRJdGVtRGF0
YShpZGVudGlmaWVyLCB7IFdURk1vdmUoc2hhcmVkTWVtb3J5SGFuZGxlKSwgc2hhcmVkTWVtb3J5
LT5zaXplKCkgfSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVk
SXRlbUJ1ZmZlcnMuc2V0KGlkZW50aWZpZXIsIHNoYXJlZE1lbW9yeS5jb3B5UmVmKCkpOworCisg
ICAgcmV0dXJuIHsgaWRlbnRpZmllciwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVk
TWVtb3J5LT5kYXRhKCkpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9OworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCmluZGV4IGU5OWUzZDcxY2E5MjYyNmE2OTYyY2M5NDg3
N2E3YzExYjg1ZWRiYTcuLmRjOGJlYjIyMWEzMmE0MmFlMjQ4MDY4ZmNmMDRiMzY1NDIxMzRmOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNh
Y2hlUHJveHkuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYw
LDYgKzYxLDcgQEAgcHVibGljOgogICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsK
IAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSYgcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
KCkgeyByZXR1cm4gbV9yZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk7IH0KKyAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCk7CiAK
ICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNzIsNiArNzQsNyBAQCBwdWJs
aWM6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOwogICAgIFJlZlB0cjxXZWJDb3Jl
OjpJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3Qo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRh
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVk
TWVtb3J5OjpJUENIYW5kbGUmKTsKICAgICBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVz
aERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBy
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKIApAQCAtODUsNiArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNr
ZW5kV2FzQ3JlYXRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0V2Fz
Q29tbWl0dGVkKERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpOwogCisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1C
dWZmZXJzOwogICAgIFJlbW90ZVJlc291cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eSB7ICp0aGlzIH07CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbgppbmRleCA4ZjI0NTg1NjM1ZjQ3MDgzZDFkYjI3YTViMzk2NjY1ZjMxNWVi
Y2IwLi45ZjI2YTIzMGNmNjhiMGJmODgwOTI4YjdjZWZiYmQ4N2Y4NTM0NGRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjMs
OCArMjMsOCBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMgLT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgewotICAgIHZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNv
cmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBo
YW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCi0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKFdl
YktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQorICAgIEltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoV2ViQ29yZTo6RmxvYXRTaXplIGxv
Z2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUgaGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RXYXND
b21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZp
ZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNl
Q2FjaGVQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKaW5kZXggM2Y1YTczYmVjM2JmMjg2ZTUyOTgxZGU0
OGI5MGMzMWQwMTlkOGMzZC4uMGY5YTZlOGYxOWUxZDk4NTY5ZmVkMWJiYzQxZDA3NjgzZWFjZjFh
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhYTYwYjA2MDc5
ZmVkNDE3ZDgyZTE3MjY0MTcwMWE4NzMwZjk2MjE2Li5jNTc4MDYzYjg5ZTAyZTc1OTVmZjZkYzdj
OWNhOTYzNjllN2FlZTZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMTAtMzAgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbmN1cnJlbnQg
ZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbnRvIHNo
YXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlYmFzZWxpbmUgc2V2ZXJhbCBleGlzdGluZyAobm9uLUdQVS1wcm9jZXNzKSBkaXNwbGF5
IGxpc3QgdGVzdHMgdG8gYWNjb3VudCBmb3IgYSBzbGlnaHQgdHdlYWsgaW4gdGhlIGZvcm1hdCBp
bgorICAgICAgICB3aGljaCBkaXNwbGF5IGxpc3RzIGFyZSBkdW1wZWQgYXMgdGV4dC4gTW9yZSBz
cGVjaWZpY2FsbHksIGRyYXdpbmcgaXRlbSBleHRlbnRzIGFyZSBub3cgZHVtcGVkIGFmdGVyIGVh
Y2gKKyAgICAgICAgZHJhd2luZyBpdGVtLCByYXRoZXIgdGhhbiBiZWZvcmUuCisKKyAgICAgICAg
KiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGRpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVj
dGVkLnR4dDoKKwogMjAyMC0xMS0wMyAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkIHRlc3QgZ2FyZGVuaW5nLCByZWJhc2VsaW5lIHRlc3Rz
IGZvciBCaWcgU3VyIGFmdGVyIHIyNjg5NTggYW5kIHIyNjg1MjAuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
aW5kZXggMzI4ODQ4MDYyNzAxOWQ1NDAyZDk0MjVmYzRhMTMxMzc3MGVjYjMxYS4uMTQ1MWIxOTI1
M2MzMjM4OTI4YmJkOWY1ZTVkZWJiOTI3NGM1MGQ1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAt
NiwxMCArNiw4IEBACiAgIChmaWxsLWNvbG9yICNDODAwMDApCiAgIChzaGFkb3dzLWlnbm9yZS10
cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAotICAoZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4
NTApCi0gIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCisgIChyZWN0IGF0ICgxMCwxMCkg
c2l6ZSA1NXg1MCkgZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCiAoc2V0LWlubGluZS1m
aWxsLWNvbG9yCiAgIChjb2xvciAjMDAwMEM4ODApKQogKGZpbGwtcmVjdAotICAoZXh0ZW50IGF0
ICgzMCwxMjApIHNpemUgNTV4NTApCi0gIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCisg
IChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkgZXh0ZW50IGF0ICgzMCwxMjApIHNpemUgNTV4
NTApCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggZTlmNTQwNDE3YmQ2ZTVkYzc3ODYxNWU1
ZjM3OTQ5NzZlNDE5NWY4ZC4uNTkwYjkzZjVjODkyY2FlMzdmNDI0NjA5YThmZTQ4MDMzZTY2ODM2
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1z
aGFkb3ctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQt
aW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtOSw5ICs5LDggQEAKICAgKHNoYWRvdy1v
ZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQogICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAw
KSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4
MTM3KQogICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYp
CiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEz
NykKIChyZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggZTA0NTJh
MTczYTFhZmUyMzdmNzI4ZDMwYmMyN2VjNjBlZWM5NjIzZC4uMjhjY2Y0YzAxODU5ZGUxOTBiMGE5
YTI3ZmEyZmVjMDA2M2VkOGUxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBA
IC0xMSwxMSArMTEsMTAgQEAKICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQog
ICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAot
ICAoZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQg
KDAsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVy
YXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2Rl
IG5vcm1hbCkgZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKIChyZXN0
b3JlKQogKHNldC1jdG0KICAgKHNldC1jdG0ge209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9
KDAuMDAsMjIuMDApfSkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5
ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCBiZDg3NmRmNDAzYTRhZGQwYmMzOTFm
N2M2MmFjMmI0YzNiY2Y3ZGEwLi5iYzE3YjUxMTQ5OWY4MjU2Yzk5MjkwZGFlODYxNGQ0ODk0Y2Fm
OWNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxp
c3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNw
YXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTMsMjkgKzMsMjQgQEAKICAgKHggMC4wMCkKICAgKHkg
MC4wMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEw
NHgxMDQpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKGNvbG9yICMwMDgwMDAp
CiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3Jt
YWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQp
CiAoc2V0LXN0YXRlCiAgIChjaGFuZ2UtZmxhZ3MgMzI5NjApCiAgIChmaWxsLWNvbG9yICMwMDAw
RkYpCiAgIChzdHJva2Utc3R5bGUgMCkKICAgKHNob3VsZC1hbnRpYWxpYXMgMCkpCiAoZHJhdy1y
ZWN0Ci0gIChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMCkgc2l6
ZSAxMDR4MikKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNz
IDEuMDApIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQogKGRyYXctcmVjdAotICAoZXh0ZW50
IGF0ICgwLDEwMikgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQot
ICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0
ZW50IGF0ICgwLDEwMikgc2l6ZSAxMDR4MikKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCww
KSBzaXplIDJ4MTA0KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDJ4MTA0KQotICAoYm9yZGVyLXRo
aWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDAp
IHNpemUgMngxMDQpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4MTA0
KQogICAocmVjdCBhdCAoMTAyLDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEu
MDApKQorICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4
MTA0KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNs
aXBwZWQtcmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5
LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBhZGRkMmNhNDI1MGMyNGEwYzll
ZTIyNTVkNDI3NWE3NmY2MDQzZWVkLi5iYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3
MmY4MmI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAt
Y2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
cmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMywxMSArMywxMCBAQCBy
ZWNvcmRlZDoKICAgKHggMC4wMCkKICAgKHkgMC4wMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QK
LSAgKGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKHJlY3QgYXQgKDQxMiwwKSBz
aXplIDEwMHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBz
b3VyY2Utb3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFs
KSBleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413343</attachid>
            <date>2020-11-05 12:47:24 -0800</date>
            <delta_ts>2020-11-05 12:58:45 -0800</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-218406-20201105124722.patch</filename>
            <type>text/plain</type>
            <size>370316</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg1NDBlNTkzODA3Y2Ux
YmJlMzg3MDdiMGMwNWMxNjRkNmE1N2NlMS4uYjJlMDc1NzdkZTEwYmE4NWM4Njc4ZTA3YzdjMjY5
OGQ2MmQ3ZDBlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwNyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgZGlzcGxheSBsaXN0cyAoYW5kIGRpc3BsYXkgbGlz
dCBpdGVtcykgaW4gcHJlcGFyYXRpb24gZm9yIHVwY29taW5nIGNoYW5nZXMgdG8gYWxsb3cgdGhl
CisgICAgICAgIEdQVSBhbmQgd2ViIHByb2Nlc3NlcyB0byBjb25jdXJyZW50bHkgcmVhZCBhbmQg
d3JpdGUgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YSwgd2hpY2ggYWxsb3dzIHVzIHRvIGFjaGlldmUK
KyAgICAgICAgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzIGluIHBlcmZvcm1hbmNlIG9uIG1hbnkg
Z3JhcGhpY3MgYmVuY2htYXJrcyBpbiBNb3Rpb25NYXJrIGJ5IHJlbW92aW5nIG92ZXJoZWFkIGlu
dm9sdmVkCisgICAgICAgIGluIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nIGRpc3BsYXkg
bGlzdCBpdGVtcyBvdmVyIElQQy4gVG8gaW1wbGVtZW50IHRoaXMsIHJhdGhlciB0aGFuIHVzaW5n
IElQQyB0byBlbmNvZGUKKyAgICAgICAgYW5kIGRlY29kZSBlYWNoIGl0ZW0sIHdlIHdpbGwgaW5z
dGVhZCBzdG9yZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW4gbWVtb3J5IHNoYXJlZCBi
ZXR3ZWVuIHRoZSB3ZWIgYW5kIEdQVQorICAgICAgICBwcm9jZXNzZXMuCisKKyAgICAgICAgVGhp
cyBzdHJhdGVneSwgb2YgY291cnNlLCB3aWxsIG5vdCB3b3JrIGZvciBkaXNwbGF5IGxpc3QgaXRl
bXMgdGhhdCBjb250YWluIHBvaW50ZXJzLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIGFm
ZmVjdHMgYWxsIGRpc3BsYXkgbGlzdCBpdGVtcyBhdCB0aGUgbW9tZW50LCBzaW5jZSBhbGwgaXRl
bXMgYXJlIHN1YmNsYXNzZXMgb2YgYERpc3BsYXlMaXN0OjpJdGVtYCwgYW5kCisgICAgICAgIHRo
ZXJlZm9yZSBjb250YWluIHZ0YWJsZSBwb2ludGVycywgZXZlbiBpZiBhbGwgbWVtYmVycyBhcmUg
cGxhaW4gZGF0YSB0eXBlcy4gVGh1cywgdGhlIGZpcnN0IHN0ZXAgdG93YXJkcyBiZWluZworICAg
ICAgICBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGl0ZW1zIGRpcmVjdGx5IGluIHNoYXJlZCBtZW1v
cnkgaXMgdG8gcmVtb3ZlIHRoaXMgdnRhYmxlIHBvaW50ZXIgYnkgbWFraW5nIGRpc3BsYXkgbGlz
dAorICAgICAgICBpdGVtcyBubyBsb25nZXIgaW5oZXJpdCBmcm9tIGBEcmF3aW5nSXRlbWAgb3Ig
YEl0ZW1gLgorCisgICAgICAgIEN1cnJlbnRseSwgZGlzcGxheSBsaXN0cyBhcmUgYmFja2VkIGJ5
IGBWZWN0b3I8UmVmPEl0ZW0+PmA7IGhvd2V2ZXIsIHRoaXMgbm8gbG9uZ2VyIHdvcmtzIG9uY2Ug
bm9uZSBvZiB0aGUKKyAgICAgICAgZGlzcGxheSBsaXN0IGl0ZW1zIGFyZSBkZXNjZW5kZWQgZnJv
bSBhIGNvbW1vbiBiYXNlIGNsYXNzLiBUbyBhZGRyZXNzIHRoaXMsIHdlIGludHJvZHVjZQorICAg
ICAgICBgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJgLCB3aGljaCBlbmNhcHN1bGF0ZXMgbG9naWMg
dG8gbWFuYWdlIG9uZSBvciBtb3JlIGRhdGEgc2VnbWVudHMgdGhhdCBjb250YWluIGRpc3BsYXkK
KyAgICAgICAgbGlzdCBpdGVtIGRhdGEgKGkuZS4gZGlzcGxheSBsaXN0IGl0ZW1zIHN0YWNrZWQg
YWRqYWNlbnQgdG8gZWFjaCBvdGhlciBpbiBtZW1vcnkpLiBEaXNwbGF5IGxpc3RzIG5vdyBhcHBl
bmQKKyAgICAgICAgaW5saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBieSBjb25zdHJ1Y3RpbmcgdGhl
c2UgaXRlbXMgZGlyZWN0bHkgaW5zaWRlIHRoZSBpdGVtIGJ1ZmZlciB1c2luZyBwbGFjZW1lbnQt
bmV3LgorCisgICAgICAgIEhvd2V2ZXIsIG1hbnkgdHlwZXMgb2YgZGlzcGxheSBsaXN0IGl0ZW1z
IGRvIG5vdCBjb25zaXN0IGVudGlyZWx5IG9mIGlubGluZSBkYXRhOyBzb21lIG9mIHRoZXNlIGFy
ZSBvYnZpb3VzLAorICAgICAgICBzdWNoIGFzIGBEcmF3SW1hZ2VgLCBgRHJhd0dseXBoc2AsIG9y
IGBTdHJva2VQYXRoYCAoc2luY2UgYSBgUGF0aGAgbWF5IGJlIGFyYml0cmFyaWx5IGNvbXBsZXgp
LiBPdGhlciBvdXQtb2YtCisgICAgICAgIGxpbmUgaXRlbSB0eXBlcyBhcmUgbGVzcyBvYnZpb3Vz
OiBmb3IgaW5zdGFuY2UsIGBGaWxsUm91bmRlZFJlY3RgIGlzIGFuIG91dC1vZi1saW5lIGl0ZW0g
ZHVlIHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgdGhlIGNvbG9yIG9mIHRoZSByZWN0IChgRmls
bFJvdW5kZWRSZWN0OjptX2NvbG9yYCkgbWF5IGJlIGFuIGV4dGVuZGVkIGNvbG9yLCB3aGljaCB0
aGVuIGNvbnRhaW5zIGEgcG9pbnRlci4gSW4KKyAgICAgICAgdGhlc2UgY2FzZXMsIHdlIGNhbid0
IHNpbXBseSBlbmNvZGUgdGhlIGl0ZW0gaW4gc2hhcmVkIG1lbW9yeSBhbmQgcmVhZCBpdCBpbiB0
aGUgR1BVIHByb2Nlc3MsIHNpbmNlIHRoZSBwb2ludGVyCisgICAgICAgIChpZiBpdCBwb2ludGVk
IHRvIGFueXRoaW5nIG90aGVyIHRoYW4gbnVsbCBpbiB0aGUgd2ViIHByb2Nlc3MpIHdpbGwgcG9p
bnQgdG8gYXJiaXRyYXJ5IG1lbW9yeSBpbiB0aGUgR1BVCisgICAgICAgIHByb2Nlc3MuIEluc3Rl
YWQsIHdlIGNhbiBsZXZlcmFnZSBvdXIgZXhpc3RpbmcgSVBDIGluZnJhc3RydWN0dXJlIGhlcmUg
YnkgZW5jb2RpbmcgZWFjaCBvZiB0aGVzZSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcyBk
YXRhIGFuZCBkZWNvZGluZyB0aGVtIGZyb20gdGhpcyBkYXRhIGluIHRoZSBHUFUgcHJvY2Vzcy4g
VG8gZG8gdGhpcywgd2UgZGVsZWdhdGUgb3V0IHRvIFdlYktpdDIgdG8KKyAgICAgICAgZW5jb2Rl
IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyB1c2luZyBXZWJLaXQncyBgSVBDOjpFbmNv
ZGVyYCwgYW5kIHBhc3MgYmFjayBhIGBTaGFyZWRCdWZmZXJgIHdoaWNoIHdlCisgICAgICAgIHRo
ZW4gY29weSBpbnRvIHRoZSBpdGVtIGJ1ZmZlci4gVGhpcyBkZWxlZ2F0aW9uIGhhcHBlbnMgdGhy
b3VnaCB0aGUgYEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YCBjbGFzcywgd2hpY2ggaGFzCisgICAg
ICAgIGFuIGltcGxlbWVudGF0aW9uIGluIFdlYktpdDIuIE9uIHRoZSBkZWNvZGluZyBzaWRlIGlu
IHRoZSBHUFUgcHJvY2Vzcywgd2UgdGhlbiBhc2sgYEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50YCAo
aWYKKyAgICAgICAgc2V0KSB0byBjb252ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhIGJhY2sgaW50byBh
IGRpc3BsYXkgbGlzdCBpdGVtLiBJbiBXZWJLaXQyLCB3ZSBpbXBsZW1lbnQgdGhpcyBpbnRlcmZh
Y2UgYW5kIHVzZQorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBgSVBDOjpEZWNvZGVyYCB0byBk
ZWNvZGUgdGhlIGRhdGEgd2Ugc2VyaWFsaXplZCBlYXJsaWVyLgorCisgICAgICAgIElmIG5vIGNs
aWVudCBpcyBzcGVjaWZpZWQgb3IgdGhlIGNsaWVudCBkb2VzIG5vdCByZXF1aXJlIGN1c3RvbSBl
bmNvZGluZy9kZWNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSwgd2UKKyAgICAgICAgZmFs
bCBiYWNrIHRvIGNvbnN0cnVjdGluZyB0aGUgaXRlbSBkaXJlY3RseSBpbnNpZGUgdGhlIHdyaXRh
YmxlIGl0ZW0gYnVmZmVyIGRhdGEuCisKKyAgICAgICAgVG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVh
c29uIGFib3V0IHRoZXNlIG5ldyAoaW5oZXJpdGFuY2UtZnJlZSkgZGlzcGxheSBsaXN0IGl0ZW1z
LCB3ZSBhZGRpdGlvbmFsbHkgaW50cm9kdWNlCisgICAgICAgIGBJdGVtSGFuZGxlYCwgd2hpY2gg
d3JhcHMgYSBwb2ludGVyIHRvIGEgZGlzcGxheSBsaXN0IGl0ZW0gYW5kIHByb3ZpZGVzIHNldmVy
YWwgaGVscGVyIG1ldGhvZHMuIFRoZSBmaXJzdCBieXRlCisgICAgICAgIG9mIGVhY2ggaXRlbSBo
YW5kbGUgYWx3YXlzIHBvaW50cyB0byBhbiBgSXRlbVR5cGVgLCBhbmQgdGhlIGZvbGxvd2luZyBg
TmAgYnl0ZXMgY29udGFpbiB0aGUgaXRlbSBpdHNlbGYsIHdoZXJlCisgICAgICAgIGBOYCBpcyB0
aGUgc2l6ZSBvZiB0aGUgaXRlbSBjbGFzcy4gSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBob3cg
dG8gdXNlIGFuIGBJdGVtSGFuZGxlYDoKKworICAgICAgICAgICAgICAgIGBEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSA9IGl0ZW1IYW5kbGUudHlwZSgpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3Vy
cmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAgICAgICAgICAgICAgIGBpZiAoaXRlbUhhbmRs
ZS5pczxTdHJva2VQYXRoPigpKSB7Li4uYCAoUmVwbGFjZXMgaXM8PiBpbiB0aGUgY3VycmVudCBt
b2RlbCkKKworICAgICAgICAgICAgICAgIGBhdXRvJiBzZXRTdGF0ZUl0ZW0gPSBpdGVtSGFuZGxl
LmdldDxTZXRTdGF0ZT4oKTtgIChSZXBsYWNlcyBkb3duY2FzdDw+IGluIHRoZSBjdXJyZW50IG1v
ZGVsKQorCisgICAgICAgICAgICAgICAgYGl0ZW1IYW5kbGUuYXBwbHkobXlHcmFwaGljc0NvbnRl
eHQpO2AgKFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBpbmhlcml0YW5jZSBtb2RlbCkKKworICAg
ICAgICAgICAgICAgIGBib29sIGlzRHJhd2luZ0l0ZW0gPSBpdGVtSGFuZGxlLmlzRHJhd2luZ0l0
ZW0oKTtgIChSZXBsYWNlcyBjaGVja3MgZm9yIGBpczxEcmF3aW5nSXRlbT4oaXRlbSlgKQorCisg
ICAgICAgIFdoZW4gd3JpdGluZyBkaXNwbGF5IGxpc3RzIGZvciB0aGUgR1BVIHByb2Nlc3MsIHRo
ZSB3cml0aW5nIGNsaWVudCAoYSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgKSB3aWxsIGJlIGFz
a2VkCisgICAgICAgIHRvIHByb3ZpZGUgYEl0ZW1CdWZmZXJIYW5kbGVgcyB3aGVyZSB0aGUgaXRl
bSBidWZmZXIgd2lsbCBwbGFjZSBpdGVtIGRhdGEgKHdoZXRoZXIgZW5jb2RlZCwgb3IgYXMgYW4g
aW5saW5lCisgICAgICAgIG9iamVjdCkuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgZGlzcGxheSBsaXN0
cyBvdXRzaWRlIG9mIHRoaXMgY29udGV4dCAoZS5nLiBpbiBvdGhlciBwYXJ0cyBvZiBXZWJDb3Jl
LCBzdWNoIGFzIHRoZQorICAgICAgICBnbHlwaCBkcmF3aW5nIGNhY2hlKSwgd2UgZG9uJ3QgaGF2
ZSBhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGAuIFRvIGhhbmRsZSB0aGlzLCB0aGUgaXRlbSBi
dWZmZXIgaW5zdGVhZAorICAgICAgICBhbGxvY2F0ZXMgaXRzIG93biAobm9uLXNoYXJlZC1tZW1v
cnkpIGJ1ZmZlcnMsIHdoaWNoIGl0IG1hbmFnZXMgYW5kIGRlbGV0ZXMgd2hlbiBpdCBpcyBkb25l
LiBJZiBhbnkgb3V0LW9mLWxpbmUKKyAgICAgICAgaXRlbXMgYXJlIGNvbnN0cnVjdGVkIHdpdGhp
biB0aGVzZSBidWZmZXJzLCBgSXRlbUJ1ZmZlcmAgd2lsbCBhZGRpdGlvbmFsbHkgY2FsbCB0aGVp
ciBkZXN0cnVjdG9ycyBwcmlvciB0bworICAgICAgICBkZWxldGluZyB0aGVzZSBidWZmZXJzLgor
CisgICAgICAgIFNlZSBwZXItY2hhbmdlIGNvbW1lbnRzIGJlbG93IGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Om9wZXJhdG9yPSk6CisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSBtb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIG1vdmUgY29uc3RydWN0b3IgYnkgZXhj
aGFuZ2luZyBvd25lcnNoaXAgb2YgdGhlIGl0ZW0gYnVmZmVyLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YXNUZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZHVtcCBjb25zdCk6CisKKyAgICAg
ICAgQWRqdXN0IHRoZSBmb3JtYXQgd2hlbiBwcmludGluZyBkaXNwbGF5IGxpc3RzIHRvIGBUZXh0
U3RyZWFtYC4gTm93IHRoYXQgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHRyYWNrZWQgb24gdGhl
CisgICAgICAgIGRpc3BsYXkgbGlzdCByYXRoZXIgdGhhbiBiZWluZyBvbiBlYWNoIGRyYXdpbmcg
aXRlbSwgd2UgcHJpbnQgdGhlbSBvdXQgYWZ0ZXIgZWFjaCBpdGVtIChhcyBvcHBvc2VkIHRvIGJl
aW5nIGluCisgICAgICAgIHRoZSBtaWRkbGUgb2YgZWFjaCBpdGVtKS4KKworICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzaXplSW5CeXRlcyBjb25zdCk6CisKKyAg
ICAgICAgVGFsbHkgdXAgdGhlIHNpemUgb2YgdGhlIGRpc3BsYXkgbGlzdCBieSB0YWtpbmcgdGhl
IHN1bSBvZiB0aGUgc2l6ZXMgb2YgZWFjaCByZWFkb25seSBzZWdtZW50LCBhcyB3ZWxsIGFzIHRo
ZQorICAgICAgICB3cml0YWJsZSBidWZmZXIgc2l6ZS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNvbnN0KToKKworICAgICAgICBBIERpc3Bs
YXlMaXN0IGlzIGVtcHR5IGlmIGl0IGNvbnRhaW5zIG5vIGl0ZW0gZGF0YTogaW4gb3RoZXIgd29y
ZHMsIHRoZXJlIGFyZSBubyByZWFkb25seSBidWZmZXIgc2VnbWVudHMsIGFuZAorICAgICAgICB0
aGVyZSBpcyBhbHNvIG5vdGhpbmcgd3JpdHRlbiB0byB0aGUgd3JpdGFibGUgYnVmZmVyIHNlZ21l
bnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNldEl0
ZW1CdWZmZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlciBjb25zdCk6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIHRv
IGl0ZXJhdGUgb3ZlciBlYWNoIEl0ZW1CdWZmZXJIYW5kbGUgaW4gdGhlIGRpc3BsYXkgbGlzdC4g
VGhpcyBpbmNsdWRlcyBhbGwgcmVhZG9ubHkgaGFuZGxlcywgYW5kCisgICAgICAgIHRoZW4gdGhl
IHdyaXRhYmxlIGhhbmRsZSAoaWYgaXQgZXhpc3RzKS4KKworICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMpOgorCisg
ICAgICAgIEFkZCBhbiBvcHRpb24gdG8gYWxsb3cgdGhlIGRpc3BsYXkgbGlzdCB0byB0cmFjayBk
cmF3aW5nIGl0ZW0gZXh0ZW50cy4gQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFsd2F5cyB0cmFj
aworICAgICAgICBleHRlbnRzIGZvciBkcmF3aW5nIGl0ZW1zOyBob3dldmVyLCB3aGVuIHByb3Bh
Z2F0aW5nIGRpc3BsYXkgbGlzdHMgdG8gdGhlIEdQVSBwcm9jZXNzIGZvciBwbGF5YmFjaywgdGhl
c2UKKyAgICAgICAgZXh0ZW50cyB3ZXJlIG5ldmVyIHNlbnQgYWxvbmcgd2l0aCBJUEMsIGFuZCBz
byB0aGlzIGVuZGVkIHVwIGp1c3QgYmVpbmcgdW5uZWNlc3Nhcnkgd29yay4gQWRkaXRpb25hbGx5
LCB0aGUKKyAgICAgICAgaW5pdGlhbCBjbGlwIGluIHRoZSBHUFUgcHJvY2VzcyBpcyBhbHNvIG5l
dmVyIHNldCwgc28gY29tcHV0aW5nIHRoZXNlIGV4dGVudHMgbmV2ZXIgaGVscGVkLgorCisgICAg
ICAgIFRoYXQgc2FpZCwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIHN0aWxsIHByaW50ZWQgb3V0
IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZywgc28gd2UgbmVlZCB0byBrZWVwIHRoaXMKKyAg
ICAgICAgbG9naWMgaW50YWN0OyB0aGlzIHJlZmFjdG9yaW5nIG9ubHkgZGlzYWJsZXMgZXh0ZW50
IGNvbXB1dGF0aW9uIGZvciBkaXNwbGF5IGxpc3RzIGJlaW5nIHNlbnQgdG8gdGhlIEdQVSBwcm9j
ZXNzCisgICAgICAgIHZpYSByZW1vdGUgaW1hZ2UgYnVmZmVycy4gSW4gYSBmdXR1cmUgcGF0Y2gs
IHdlIGNvdWxkIHJlZmFjdG9yIHRoaXMgc28gdGhhdCBkcmF3aW5nIGl0ZW1zIGNvbnRhaW4gZXh0
ZW50IHJlY3RzCisgICAgICAgIGFzIGlubGluZSBkYXRhIHRoYXQgY2FuIGJlIGNvbnN1bHRlZCBp
biB0aGUgR1BVIHByb2Nlc3MuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6YXBwZW5kKToKKworICAgICAgICBEaXNwbGF5IGxpc3QgaXRlbXMgYXJlIG5vIGxv
bmdlciBjb25zdHJ1Y3RlZCBhaGVhZCBvZiB0aW1lLCBhbmQgdGhlbiBhcHBlbmRlZCB0byB0aGUg
ZGlzcGxheSBsaXN0LiBJbnN0ZWFkLAorICAgICAgICBgYXBwZW5kYCBub3cgdGFrZXMgdGhlIHR5
cGUgb2YgdGhlIGl0ZW0gdG8gYXBwZW5kIGFzIGEgdGVtcGxhdGUgdHlwZW5hbWUgYXJndW1lbnQs
IGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50cyB0aGF0CisgICAgICAgIHdpbGwgYmUgdXNlZCB0byBj
b25zdHJ1Y3QgdGhlIGl0ZW0uCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6
Y2xlYXJDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6Oml0ZXJhdG9yOjptb3ZlVG9FbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZm
ZXIpOgorCisgICAgICAgIEltcGxlbWVudCBhIEMrKyBpdGVyYXRvciBmb3IgRGlzcGxheUxpc3Qu
IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gd3JpdGUgY29kZSBsaWtlIHRoaXM6CisgICAgICAg
IGBgYAorICAgICAgICAvLyBTdXBwb3NlIGRpc3BsYXlMaXN0IGlzIGFuIGluc3RhbmNlIG9mIERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdC4KKyAgICAgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRd
IDogZGlzcGxheUxpc3QpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyB0aGluZ3Mgd2l0aCBpdGVt
LCB3aGljaCBpcyBhIERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlLgorICAgICAgICAgICAgICAgIC8v
IE1heWJlIGRvIHRoaW5ncyB3aXRoIGV4dGVudCwgd2hpY2ggaXMgYW4gT3B0aW9uYWw8RmxvYXRS
ZWN0Pi4KKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0Ojp0cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRv
cjo6fml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OmJlZ2lu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5k
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRl
bUJ1ZmZlcklmRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdDo6YWRkRHJhd2luZ0l0ZW1FeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW06OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW06OmlzRHJhd2luZ0l0ZW0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpsaXN0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlbUF0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6aXNFbXB0
eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3Q6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjpsaXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6ZGVjb2RlKTogRGVsZXRlZC4KKworICAg
ICAgICBSZW1vdmUgdGhlIGFiaWxpdHkgdG8gYGVuY29kZWAgYW5kIGBkZWNvZGVgIGRpc3BsYXkg
bGlzdHMsIGZvciB0aGUgdGltZSBiZWluZy4gRm9yIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4g
dGhlCisgICAgICAgIHdlYiBhbmQgR1BVIHByb2Nlc3Nlcywgd2Ugbm93IHVzZSBgU2hhcmVkRGlz
cGxheUxpc3RIYW5kbGVgLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHksIHRoaXMgZG9lcyBtZWFu
IHRoYXQgdGhlIGV4dGFudCBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCBkaXNwbGF5IGxpc3QgaXRl
bSB3aWxsIGJlIGJyb2tlbiBmb3IgdGhlCisgICAgICAgIHRpbWUgYmVpbmcuIEluIGEgZm9sbG93
dXAgcGF0Y2gsIEkgcGxhbiB0byByZWltcGxlbWVudCBgRGlzcGxheUxpc3Q6OmVuY29kZWAgYW5k
IGBkZWNvZGVgIGluIHRoZSBuZXcgaW5saW5lIGl0ZW0KKyAgICAgICAgbW9kZWwgYnkgZW5jb2Rp
bmcgZWFjaCBpdGVtIChlaXRoZXIgYXMgaW5saW5lIGRhdGEgb3IgdmlhIGBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdGApLiBIb3dldmVyLCB0aGlzIGlzCisgICAgICAgIGNvbnRpbmdl
bnQgb24gYWxsIGRpc3BsYXkgbGlzdCBpdGVtIHR5cGVzIChlLmcuIGBEcmF3SW1hZ2VgIGFuZCBg
RHJhd0dseXBoYCkgbm90IHJlbHlpbmcgb24gYElQQzo6QXR0YWNobWVudGAKKyAgICAgICAgZm9y
IGVuY29kaW5nLCBzbyBzdXBwb3J0IGZvciBgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzYCB3aWxsIG5l
ZWQgdG8gd2FpdCB1bnRpbCBhZnRlciBmb250cyBhbmQgaW1hZ2VzIGFyZSB3b3JraW5nLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckhhcmZCdXp6LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgdG8gdXNlIHRoZSBuZXcgdGVtcGxhdGVkIGBE
aXNwbGF5TGlzdDo6YXBwZW5kYCBtZXRob2QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojp0YWtlRGlzcGxheUxpc3QpOgorCisg
ICAgICAgIFVzZSBgc3RkOjpleGNoYW5nZWAgaW5zdGVhZCBvZiBgV1RGTW92ZWAuIFRoaXMgaXMg
YWN0dWFsbHkgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyAoaS5lLiBu
bworICAgICAgICBsZWFrcyBvciBkb3VibGUtZnJlZWluZyksIHNpbmNlIHRoZSBgRGlzcGxheUxp
c3RgIGluc3RhbmNlIHRoYXQgaXMgYmVpbmcgbW92ZWQgZnJvbSBuZWVkcyB0byBiZSBlbXB0eSBz
byB0aGF0IGl0CisgICAgICAgIGRvZXMgbm90IHRyeSB0byBjYWxsIGRlc3RydWN0b3JzIG9uIHRo
ZSBpdGVtcyBmb3JtZXJseSBpbnNpZGUgb2YgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6YXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmRlc3Ryb3kpOgorCisgICAgICAgIEFk
ZCBoZWxwZXIgbWV0aG9kcyB0byBhcHBseSBhIGRpc3BsYXkgbGlzdCBpdGVtIHRvIGEgYEdyYXBo
aWNzQ29udGV4dGAgYW5kIGNhbGwgdGhlIGRpc3BsYXkgbGlzdCBpdGVtJ3MKKyAgICAgICAgZGVz
dHJ1Y3RvciwgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcjo6fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Om1fYWxsb2NhdGVkQnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUg
aXMgbm8gYG1fd3JpdGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2luZyBpbi1wcm9j
ZXNzIGBEaXNwbGF5TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFpbnRpbmcpLCB0
aGUgZGlzcGxheSBsaXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBh
bmQgbWFuYWdpbmcgZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBuZWVkcyB0byBy
ZW1lbWJlciB0byBmcmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdoZW4gYXBwZW5k
aW5nLCBhbmQgbXVzdCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAgICAgIGRpc3Bs
YXkgbGlzdCBpdGVtcyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1Y3RvcnMpIHdo
ZW4gaXQgaXMgZmluaXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3Jl
YWRPbmx5QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0YWJs
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0dGVuTnVtYmVy
T2ZCeXRlcyk6CisKKyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFib3ZlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6
OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZm
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhh
bmRsZTo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Ojp+SXRlbUJ1
ZmZlcldyaXRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJSZWFkaW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlCdWZmZXJzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp1bmNoZWNr
ZWRBcHBlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlzIGZpbGUgbWFr
ZSB1cCBtb3N0IG9mIHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0aGUgY2hhbmdl
cyBhcmUgbW9zdGx5IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRoaXMgcGF0Y2g6
CisgICAgICAgIC0gQWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1UeXBlYCBvZiBl
YWNoIGRpc3BsYXkgbGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIgb3Igbm90IGVh
Y2ggY2xhc3MKKyAgICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IGVh
Y2ggY2xhc3MgaXMgYSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBlbmNvZGVgIGFu
ZCBgZGVjb2RlYCBtZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAgICAgICAgLSBS
ZW1vdmUgYWxsIG92ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1wbGVtZW50cyBp
bmRpdmlkdWFsIG1ldGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAgIGBnbG9iYWxC
b3VuZHNgIChpZiBhcHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRzYCAoYWdhaW4s
IGlmIGFwcGxpY2FibGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBkdW1waW5nIGhl
bHBlcnMsIHNvIHRoYXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5nSXRlbWAgYmVm
b3JlIGR1bXBpbmcgZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJh
d0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRG
cmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpJdGVt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpzaXplSW5C
eXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0
ZW06OkRyYXdpbmdJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTYXZlOjpTYXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZXN0b3JlOjpSZXN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpUcmFuc2xhdGU6OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Um90YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNjYWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxD
b2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVE
YXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9p
bjo6U2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldE1pdGVyTGltaXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQ
YXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFn
ZTo6RHJhd1RpbGVkSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1h
Z2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdS
ZWN0OjpEcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0xpbmU6OkRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6
RHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXRoOjpEcmF3UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVj
dFdpdGhDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bENvbXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Rmls
bEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50
RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJ
bmxpbmVQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VQYXRoOjpTdHJva2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGVhclJlY3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJl
bmN5TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVy
bjo6QXBwbHlGaWxsUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9y
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpU
cmFuc2xhdGU6OlRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJh
bnNsYXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6VHJhbnNsYXRlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJvdGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSb3RhdGU6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSb3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2NhbGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
Y2FsZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNjYWxlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldENUTTo6U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRDVE06Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDb25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6
bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxHcmFkaWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpjb2xvciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9y
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
SW5saW5lRmlsbENvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ryb2tlVGhpY2tu
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6
OnRoaWNrbmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ry
b2tlVGhpY2tuZXNzOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJvdW5kcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6
OlNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFz
aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dExpbmVEYXNoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldExpbmVKb2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0TGluZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNo
YWRvdzo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyU2hhZG93OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXA6OnJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXQ6OkNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0Ojpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBP
dXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsaXBPdXRUb1BhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5k
czo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHM6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3R2x5cGhzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdHbHlwaHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ltYWdlOjpEcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3SW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6
OkRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0lt
YWdlQnVmZmVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvblJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFn
ZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNvZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjps
b2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6cmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UGF0aDo6RHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRo
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1JlY3RzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
OjpGaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OnJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJlY3RXaXRoQ29sb3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9y
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdy
YWRpZW50OjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UmVjdFdpdGhHcmFkaWVudDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
R3JhZGllbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENv
bXBvc2l0ZWRSZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJl
Y3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRS
ZWN0OjpGaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSb3VuZGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRo
OjpGaWxsSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElu
bGluZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbElubGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJ
bWFnZURhdGE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UHV0SW1hZ2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tl
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VJbmxpbmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0
cm9rZVBhdHRlcm46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0l0ZW06OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxC
b3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdJdGVtOjpnbG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6
OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
Um90YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNjYWxlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNjYWxlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNjYWxlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldENUTTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRDVE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpk
ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZUZpbGxHcmFkaWVudDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZp
bGxDb2xvcjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
U2V0U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZUNhcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRMaW5lSm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29k
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0
ZXJMaW1pdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpDbGVhclNoYWRvdzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGVhclNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRo
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBU
b0RyYXdpbmdDb21tYW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZm
ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d05hdGl2ZUltYWdlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdp
blRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0VsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0VsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91
bmRlZFJlY3Q6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBh
dGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbEVsbGlwc2U6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2Rl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZy
YW1lRm9yTWVkaWE6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U3Ryb2tlUmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTdHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpl
bmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0
cm9rZUlubGluZVBhdGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U3Ryb2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0
OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkNsZWFyUmVjdDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZp
bGxQYXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkFwcGx5RmlsbFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgRGVsZXRlIHRoZSBnZW5lcmljIGBJdGVtOjplbmNvZGVgIGFuZCBgSXRl
bTo6ZGVjb2RlYCBtZXRob2RzLCBzaW5jZSBvbmx5IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBp
dGVtcyBoYXZlCisgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGZ1bmN0aW9ucyBub3cuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0
YXRlQ2hhbmdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0
TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJh
d0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1Rp
bGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVy
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlY29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0
ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgbWV0aG9kcyB0aGF0IGFw
cGVuZCBkaXNwbGF5IGxpc3QgaXRlbXMgZW4gbWFzc2UsIHN1Y2ggdGhhdCB0aGV5IGdvIGZyb20g
dGhpczoKKworICAgICAgICAgICAgICAgIGBtX2Rpc3BsYXlMaXN0LmFwcGVuZChGb286OmNyZWF0
ZShhcmcxLCBhcmcyLCBhcmczKSk7YAorCisgICAgICAgIC4uLnRvIHRoaXM6CisKKyAgICAgICAg
ICAgICAgICBgbV9kaXNwbGF5TGlzdC5hcHBlbmQ8Rm9vPihhcmcxLCBhcmcyLCBhcmczKTtgCisK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KTogRGVs
ZXRlZC4KKworICAgICAgICBFeHRlbnRzIGFyZSBub3cgYXV0b21hdGljYWxseSB1cGRhdGVkICh1
bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCkgZm9yIGFueSBkcmF3aW5nIGl0ZW1zIHRoYXQgYXJl
IGFwcGVuZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVwbGF5ZXI6OnJlcGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZXBsYXllcjo6RGVsZWdhdGU6OmFwcGx5KToKKwogMjAyMC0xMS0wNSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBTY3JvbGxpbmdT
dGF0ZVRyZWUgc2V0UHJvcGVydHlDaGFuZ2VzQWZ0ZXJSZWF0dGFjaCgpIGNvZGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMjM3ZDE3MTA5OGQxNjFiYmVhM2UyODYzMDFjYmIyMjY4ZDczZDRhZS4uYTQxOGMzOWQzMzA2
ZGQyYTNiNzI4MDE3MDY3ODBlMTc4Y2MzOTFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MyBAQAor
MjAyMC0xMS0wMyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAg
ICAgICBbQ29uY3VycmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1z
IGRpcmVjdGx5IGludG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRqdXN0IGZvciBjaGFuZ2VzIHRvIGRpc3BsYXkgbGlzdHMg
YW5kIGRpc3BsYXkgbGlzdCBpdGVtcyBpbiBXZWJDb3JlIChzZWUgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGZvciBtb3JlCisgICAgICAgIGluZm9ybWF0aW9uKS4gSW4gcGFydGljdWxhciwgd2Ug
aW1wbGVtZW50IHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIGNsaWVudCBob29rcyBjb25zdWx0ZWQg
YnkgSXRlbUJ1ZmZlciwgYW5kIHdlCisgICAgICAgIGFsc28gYWRkIGEgdGVtcG9yYXJ5IG1lY2hh
bmlzbSB0aGF0IGFsbG93cyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgKGluIHRoZSB3ZWIg
cHJvY2VzcykgdG8gc2VuZCBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbSBkYXRhIHRocm91Z2gg
c2hhcmVkIG1lbW9yeSB0byB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCAoaW4gdGhlIEdQVSBw
cm9jZXNzKS4gVGhpcyB0ZW1wb3JhcnkgbWVjaGFuaXNtCisgICAgICAgIGRvZXMgbm90IGF0dGVt
cHQgdG8gbWFrZSBhbnkgcmVhZGluZyBvciB3cml0aW5nIGluIHNoYXJlZCBtZW1vcnkgY29uY3Vy
cmVudCBiZXR3ZWVuIHRoZSBHUFUgYW5kIHdlYiBwcm9jZXNzZXMsCisgICAgICAgIGFuZCBleGlz
dHMgb25seSB0byBtYWtlIHN1cmUgdGhhdCByZW5kZXJpbmcgd2l0aCB0aGUgR1BVIHByb2Nlc3Mg
c3RpbGwgd29ya3MgdXNpbmcgdGhlc2UgbmV3IGRpc3BsYXkgbGlzdCBpdGVtcy4KKworICAgICAg
ICBJbiB0aGUgbmV4dCBwYXRjaCwgSSB3aWxsIGFkZCBhIHNpbXBsZSBjb25jdXJyZW50IHJlYWRl
ci93cml0ZXIgbW9kZWwgZm9yIGRpc3BsYXkgbGlzdCBwcm9jZXNzaW5nIGJldHdlZW4gdGhlCisg
ICAgICAgIHdlYiBhbmQgR1BVIHByb2Nlc3NlcywgYW5kIChpbiBkb2luZyBzbykgcmV2ZXJ0IG1v
c3Qgb2YgdGhlIGNoYW5nZXMgaW4gYFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRgIGFuZAorICAgICAg
ICBgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5YCBiZWxvdy4KKworICAgICAgICBTZWUgY29t
bWVudHMgYmVsb3cgZm9yIG1vcmUgZGV0YWlsLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6ZGVjb2RlQW5kQ3JlYXRlKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjphcHBseVJlc291cmNlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKToKKworICAgICAgICBSZWZhY3RvciB0aGVz
ZSB0byB0YWtlIGBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZWAuCisKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlEaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0
QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlk
Q3JlYXRlU2hhcmVkSXRlbURhdGEpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OlNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxp
c3RIYW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKiBTaGFyZWQvU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUuaDogQWRkZWQuCisKKyAgICAgICAgQWRkIGEgV2ViS2l0MiBo
ZWxwZXIgY2xhc3MgdGhhdCByZXByZXNlbnRzIGRpc3BsYXkgbGlzdCBkYXRhIGluIHNoYXJlZCBt
ZW1vcnkgdGhhdCBpcyBwcm9wYWdhdGVkIGZyb20gdGhlIHdlYgorICAgICAgICBwcm9jZXNzIHRv
IHRoZSBHUFUgcHJvY2Vzcy4gSW4gdGhlIG5leHQgcGF0Y2gsIHRoaXMgY2xhc3Mgd2lsbCBiZSBy
ZXdyaXR0ZW4gdG8gc3VwcG9ydCBjb25jdXJyZW50IGRpc3BsYXkgbGlzdAorICAgICAgICByZWFk
aW5nIGFuZCB3cml0aW5nLCB3aXRoIHNwZWNpYWxpemVkIHN1YmNsYXNzZXMgaW4gc2VydmljZSBv
ZiBib3RoIHRoZSByZWFkZXIgKGkuZS4gdGhlIEdQVSBwcm9jZXNzKSBhbmQgdGhlCisgICAgICAg
IHdyaXRlciAoaS5lLiB0aGUgd2ViIHByb2Nlc3MpLgorCisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVjb2RlKToKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHkpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSXRlbUJ1ZmZlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHA6CisKIDIwMjAtMTEtMDUgIFJ5YW4g
SGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4
IHRoZSBidWlsZCB3aXRoIHJlY2VudCBTREtzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggNmY4YTA4
NzY0OTkwNTViYTQ4YWZlYjdhMzRhMWY0ZTg4NjVmZmE1Mi4uMTk3MzhlMzY3YjU2YWNkMzUxOTVj
NjYzYWIzODYyNTExZGExODE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMjUzLDYgKzEyNTMs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1UeXBlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBhNGU3MzE3YjMzMDk2MDJkZmE5YjU1NzBkMzU2
YzhiYmIzM2I4NDQzLi5mNzQzZGRhNWI3OTBkZWVmNWZhNTRlYmE1ZTUxOGMzMGRhY2Y3ZTg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMTk2Myw2ICsxOTYzLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY3B1
L2FybS9maWx0ZXJzL0ZFTGlnaHRpbmdORU9OLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtVHlwZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODZmMTg1OTliZjYzMDJjNDJhYTNkYWM3NGQ1YTQ0
MmFkOTViY2M5Zi4uNjIyN2M2ZDg2YjE1Yzc4Y2M1YjgzZWJkZGRjMjNiOTgxYmViOTQ0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTIwMiw2ICs1MjAyLDcgQEAKIAkJRjRDNUYyMDcyNDc5RTg4MjAwRTlCNEY1IC8qIENsaXBi
b2FyZEltYWdlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNEM1RjIwNTI0NzlFN0VFMDBFOUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIu
aCAqLzsgfTsKIAkJRjREMDc1NTgyMzREODIyRDAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1EYXRh
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NDZDNDQ3QTIzNDY1MzVFMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbURhdGFTb3VyY2UuaCAqLzsg
fTsKIAkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJk
RGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjQ2QzQ0ODAyMzQ2NTQ3QTAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1QYXN0ZWJvYXJkRGF0
YVNvdXJjZS5oICovOyB9OworCQlGNEQ0MEJDOTI1NTQ2M0JGMDA3MjEzNDkgLyogRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRENDNE
NjYyMTg4MDM4QjAwRUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENDNENjQyMTg4MDJFNjAw
RUNFQ0FDIC8qIFNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0RTU3RURDMjEzRjNGNUYwMDRFQTk4RSAv
KiBGb250QXR0cmlidXRlQ2hhbmdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjRFNTdFREEyMTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRjRFNTdFRTEyMTNGNDM0QTAwNEVBOThFIC8qIFdlYkNvcmVOU0ZvbnRNYW5hZ2VyRXh0cmFz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEU1N0VE
RjIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTYzMzgsNiArMTYz
MzksOCBAQAogCQlGM0Q0NjE0NzExNjFENTMyMDBDQTBEMDkgLyogSlNFcnJvckhhbmRsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFcnJvckhhbmRsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODUyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVy
S2V5SGludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnRlcktleUhpbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjQwM0U3ODYyMzYzQjU4QzAwMDQ0NTUwIC8qIEVudGVyS2V5SGludC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFbnRlcktleUhpbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MjkyNjE3MjUyNjRENDQw
MDAwNzg5OCAvKiBNZWRpYVBsYXllcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQ
bGF5ZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0MkNFQjU0
MjE0MDMxRUUwMDJEQ0E3MiAvKiBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRm9udEF0dHJpYnV0ZUNoYW5nZXNDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjQzM0U5MDIxREJCREJBMjAwRUYwRDE0IC8qIFN0YXRpY1Bhc3Rl
Ym9hcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljUGFzdGVib2Fy
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2NDcsNiArMTc2NTAsOCBAQAog
CQkJCTU1QzBBMjk1MjNGRTJDRTAwMEYyQ0I5MyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcCAqLywKIAkJCQk3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oICovLAogCQkJCTcyRUEwOUY3MjNGQ0NCM0QwMDg1MDRBNSAvKiBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmggKi8sCisJCQkJRjQyMkI4QjYyNTNGNzA2NTAwNEU3N0U4IC8qIERp
c3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAgKi8sCisJCQkJRjQyMkI4QjUyNTNGNzA2NTAwNEU3N0U4
IC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAw
N0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCUY0Mzc3RDU2MjU1MUM5QzYwMDgw
QUJGRSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcCAqLywKQEAgLTM1MDg0LDYgKzM1MDg5LDcg
QEAKIAkJCQlFMUVFOEI5NzI0MTMxOTUwMDBFNzk0RDYgLyogWFJFeWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxRUU4QjhGMjQxMzE5NTAwMEU3OTRENiAvKiBYUkZyYW1lUmVxdWVzdENhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVFOEI5MjI0MTMxOTUwMDBFNzk0RDYgLyogWFJIYW5k
ZWRuZXNzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNEQ0MEJDOTI1NTQ2M0JGMDA3MjEzNDkgLyog
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVFOEI5RjI0MTMx
OTUwMDBFNzk0RDYgLyogWFJJbnB1dFNvdXJjZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUVFOEI5OTI0MTMxOTUwMDBFNzk0RDYgLyogWFJJbnB1dFNvdXJjZXNDaGFuZ2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTEyQTlGNEEyNDhBOTlFMjAwM0YwNkM4IC8qIFhSSW50ZXJhY3Rp
b25Nb2RlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggOTYzNTNhZGVkZmYxMWVkNWQ0MTVhZDU3
ZmRmZGI0YjI4MGQ1MDRkZC4uMGIzNWFjNjRmYThiOWZmZTBjOTQ0ODVlOTczZjI0YzJhYTBmMzQ5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKQEAgLTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAKICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250
ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9w
ZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIGVudW0gQ2hhbmdlIDogdWlu
dDMyX3QgewogICAgICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCBmZmQ5ZDZkZGZiNjBhYzFh
MDk3MjJkZmFkYzgyZjExNTMwZTkyMGExLi42NjEwNzA1NjdmMzk3NWQxMmRiYTE3ZGJhMjUwMWM5
MDE5MjllZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKIAorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCkBAIC00OCwxNyArNTAsNDAgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcCgpIGNvbnN0
CiB9CiAjZW5kaWYKIAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYgb3Ro
ZXIpCisgICAgOiBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0cikp
CisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJhd2lu
Z0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoSXRl
bUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9pdGVtcyhtYWtlVW5pcXVlPEl0ZW1C
dWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3BsYXlMaXN0KCkgPSBkZWZhdWx0Owor
CitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9yPShEaXNwbGF5TGlzdCYmIG90aGVy
KQoreworICAgIG1faXRlbXMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIp
OworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdp
bmdJdGVtRXh0ZW50cywgeyB9KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHZvaWQgRGlzcGxh
eUxpc3Q6OmNsZWFyKCkKIHsKLSAgICBtX2xpc3QuY2xlYXIoKTsKKyAgICBpZiAobV9pdGVtcykK
KyAgICAgICAgbV9pdGVtcy0+Y2xlYXIoKTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0ZW50cy5jbGVh
cigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0Rmxh
Z3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKICAgICBzd2l0
Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAg
IGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBkb3duY2FzdDxTZXRTdGF0ZT4o
aXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRT
dGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0
ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4K
ICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODMsMTAgKzEwOCwxNCBAQCBib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0m
IGl0ZW0pCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1RleHRGbGFncyBmbGFncykgY29u
c3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFtOjpMaW5lTW9kZTo6TXVsdGlw
bGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHlsZVJlY3QpOwotICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0
aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdzKGZsYWdzLCBpdGVtKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3Jv
dXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07CisgICAgICAgIGlmIChpdGVtLmlz
RHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIGV4dGVudCAiIDw8IGV4dGVu
dDsKICAgICB9CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7CiB9CkBAIC05NiwxMCArMTI1
LDExIEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgImRpc3BsYXkgbGlz
dCI7CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBtX2xpc3Quc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBUZXh0U3RyZWFtOjpHcm91
cFNjb3BlIHNjb3BlKHRzKTsKLSAgICAgICAgdHMgPDwgaSA8PCAiICIgPDwgbV9saXN0W2ldLmdl
dCgpOworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7CisgICAgICAgIFRl
eHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgICAgICB0cyA8PCBpdGVtOworICAg
ICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICB0cyA8PCAiIGV4dGVu
dCAiIDw8IGV4dGVudDsKICAgICB9CiAgICAgdHMuc3RhcnRHcm91cCgpOwogICAgIHRzIDw8ICJz
aXplIGluIGJ5dGVzOiAiIDw8IHNpemVJbkJ5dGVzKCk7CkBAIC0xMDgsMTMgKzEzOCwyNzYgQEAg
dm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKIAogc2l6ZV90IERp
c3BsYXlMaXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gICAgZm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCArPSBJdGVtOjpz
aXplSW5CeXRlcyhyZWYpOworICAgIHJldHVybiBtX2l0ZW1zID8gbV9pdGVtcy0+c2l6ZUluQnl0
ZXMoKSA6IDA7Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6OmlzRW1wdHkoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCk7Cit9CisKK0l0ZW1CdWZmZXIm
IERpc3BsYXlMaXN0OjppdGVtQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXRlbXMpCisgICAgICAg
IG1faXRlbXMgPSBtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KCk7CisgICAgcmV0dXJuICptX2l0ZW1z
OworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChjbGll
bnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZm
ZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChj
bGllbnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlv
bjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJiBtYXBGdW5jdGlvbikgY29uc3QKK3sK
KyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Zm9yRWFjaEl0ZW1CdWZmZXIoV1RG
TW92ZShtYXBGdW5jdGlvbikpOworfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKK3ZvaWQgRGlzcGxh
eUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhib29sIHZhbHVlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2l0ZW1zIHx8IG1faXRlbXMtPmlzRW1wdHkoKSk7CisgICAgbV90cmFj
a3NEcmF3aW5nSXRlbUV4dGVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBEaXNwbGF5TGlzdDo6YXBw
ZW5kKEl0ZW1IYW5kbGUgaXRlbSkKK3sKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZlPihpdGVtLmdl
dDxTYXZlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0ZW0uZ2V0PFRy
YW5zbGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2NhbGU+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICByZXR1cm4gYXBwZW5k
PENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4oaXRlbS5nZXQ8
U2V0Q1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtLmdldDxTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0
PFNldElubGluZUZpbGxDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0
ZW0uZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNz
PihpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRl
bS5nZXQ8U2V0TGluZURhc2g+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRv
dz4oaXRlbS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0PihpdGVtLmdl
dDxDbGlwT3V0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PENsaXBPdXRUb1BhdGg+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPENs
aXBQYXRoPihpdGVtLmdldDxDbGlwUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzOgorICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBh
YmlsaXR5IHRvIGNsb25lIGRpc3BsYXkgbGlzdHMgKHRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNl
ZCBmb3IgZGlzcGxheSBsaXN0IHRyYWNraW5nKS4KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5
cGhzOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdHbHlwaHM+KGl0ZW0uZ2V0PERyYXdHbHlw
aHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxEcmF3SW1hZ2U+KGl0ZW0uZ2V0PERyYXdJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+
KGl0ZW0uZ2V0PERyYXdUaWxlZEltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4oaXRlbS5nZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+
KGl0ZW0uZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdOYXRpdmVJbWFnZT4oaXRlbS5n
ZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVybj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5k
PERyYXdSZWN0PihpdGVtLmdldDxEcmF3UmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0xpbmU+KGl0ZW0uZ2V0PERyYXdMaW5l
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICByZXR1
cm4gYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0uZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbS5nZXQ8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0VsbGlwc2U+KGl0ZW0uZ2V0PERyYXdFbGxpcHNl
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxEcmF3UGF0aD4oaXRlbS5nZXQ8RHJhd1BhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdGb2N1c1JpbmdQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRo
PihpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0
cz4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdD4oaXRlbS5nZXQ8RmlsbFJl
Y3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihpdGVtLmdldDxGaWxsUmVjdFdpdGhDb2xv
cj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0
aEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29t
cG9zaXRlZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVk
UmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0uZ2V0PEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZDxGaWxsSW5saW5lUGF0aD4oaXRlbS5nZXQ8RmlsbElubGluZVBhdGg+KCkpOworI2VuZGlmCisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFBh
dGg+KGl0ZW0uZ2V0PEZpbGxQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBz
ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsRWxsaXBzZT4oaXRlbS5nZXQ8RmlsbEVsbGlw
c2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICByZXR1cm4gYXBwZW5kPFBh
aW50RnJhbWVGb3JNZWRpYT4oaXRlbS5nZXQ8UGFpbnRGcmFtZUZvck1lZGlhPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZVJl
Y3Q+KGl0ZW0uZ2V0PFN0cm9rZVJlY3Q+KCkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbS5nZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKSk7Cisj
ZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPFN0cm9rZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZVBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4o
aXRlbS5nZXQ8U3Ryb2tlRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyUmVjdD4oaXRlbS5nZXQ8Q2xlYXJSZWN0Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0uZ2V0PEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OgorICAgICAgICByZXR1cm4gYXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdldDxF
bmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6
OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseVN0cm9rZVBh
dHRlcm4+KGl0ZW0uZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxBcHBseUZpbGxQYXR0
ZXJuPihpdGVtLmdldDxBcHBseUZpbGxQYXR0ZXJuPigpKTsKKyNlbmRpZgorICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbS5nZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKSk7
CisgICAgfQorfQorCitib29sIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6YXRFbmQoKSBjb25zdAor
eworICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBhdXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgYXV0byBl
bmRDdXJzb3IgPSBpdGVtcy5tX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBpdGVtcy5tX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzOworICAgIHJldHVybiBtX2N1cnNvciA9PSBlbmRDdXJzb3I7Cit9CisKK3Zv
aWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp1cGRhdGVDdXJyZW50SXRlbSgpCit7CisgICAgY2xl
YXJDdXJyZW50SXRlbSgpOworCisgICAgaWYgKGF0RW5kKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBhdXRvIGl0ZW1U
eXBlID0gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KG1fY3Vyc29yWzBdKTsKKyAgICBpZiAoaXNEcmF3
aW5nSXRlbShpdGVtVHlwZSkgJiYgIW1fZGlzcGxheUxpc3QubV9kcmF3aW5nSXRlbUV4dGVudHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudEV4dGVudCA9IG1fZGlzcGxheUxpc3QubV9k
cmF3aW5nSXRlbUV4dGVudHNbbV9kcmF3aW5nSXRlbUluZGV4XTsKKyAgICAgICAgbV9kcmF3aW5n
SXRlbUluZGV4Kys7CisgICAgfSBlbHNlCisgICAgICAgIG1fY3VycmVudEV4dGVudCA9IFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8qIGNsaWVudCA9IGl0ZW1zLm1fcmVhZGluZ0NsaWVudDsKKyAg
ICBpZiAoIWlzSW5saW5lSXRlbShpdGVtVHlwZSkgJiYgY2xpZW50KSB7CisgICAgICAgIGF1dG8g
c2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplT2ZJdGVtSW5CeXRlcyhpdGVtVHlwZSkgKyBzaXplb2Yo
SXRlbVR5cGUpOworICAgICAgICBtX2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSA9IHNpemVP
ZlR5cGVBbmRJdGVtIDw9IHNpemVPZkZpeGVkQnVmZmVyRm9yRGVjb2RlZEl0ZW1zID8gbV9maXhl
ZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA6IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGZhc3RN
YWxsb2Moc2l6ZU9mVHlwZUFuZEl0ZW0pKTsKKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9yRGVj
b2RlZEl0ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihpdGVtVHlwZSk7CisKKyAgICAgICAg
YXV0byBzaXplT2ZEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihtX2N1cnNvciArIHNp
emVvZihJdGVtVHlwZSkpWzBdOworICAgICAgICBhdXRvKiBzdGFydE9mUGFkZGluZyA9IG1fY3Vy
c29yICsgc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3QpOworICAgICAgICBzaXplX3Qg
cGFkZGluZyA9IChhbGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdGFydE9mUGFkZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90
KTsKKyAgICAgICAgYXV0byBkZWNvZGVkSXRlbUhhbmRsZSA9IGNsaWVudC0+ZGVjb2RlSXRlbShz
dGFydE9mUGFkZGluZyArIHBhZGRpbmcsIHNpemVPZkRhdGEsIGl0ZW1UeXBlLCBtX2N1cnJlbnRC
dWZmZXJGb3JEZWNvZGVkSXRlbSk7CisgICAgICAgIGlmICghZGVjb2RlZEl0ZW1IYW5kbGUpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGNyYXNoaW5nLCB0aGlzIG5lZWRzIHRv
IGZhaWwgZ3JhY2VmdWxseSBhbmQgaW5mb3JtIHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvLyBG
b3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgYXNzZXJ0aW9uIG1ha2VzIGJ1Z3MgaW4gaXRlbSBidWZm
ZXIgZW5jb2RpbmcgbG9naWMgZWFzaWVyCisgICAgICAgICAgICAvLyB0byBjYXRjaCBieSBhdm9p
ZGluZyBteXN0ZXJpb3VzIG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluY29ycmVjdGx5IGFsaWdu
ZWQgaXRlbXMKKyAgICAgICAgICAgIC8vIGRvd24gdGhlIGxpbmUuCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudEl0
ZW0gPSAqZGVjb2RlZEl0ZW1IYW5kbGU7CisgICAgICAgIG1fY3VycmVudEl0ZW1TaXplSW5CdWZm
ZXIgPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBwYWRkaW5nICsgc2l6ZU9m
RGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRJdGVtID0gSXRlbUhhbmRsZSB7
IG1fY3Vyc29yIH07CisgICAgICAgIG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgPSBtX2N1cnJl
bnRJdGVtLnNpemUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjph
ZHZhbmNlKCkKK3sKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
dXJzb3IgKz0gbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlcjsKKworICAgIGlmIChtX2N1cnNvciA9
PSBtX2N1cnJlbnRFbmRPZkJ1ZmZlciAmJiBtX3JlYWRPbmx5QnVmZmVySW5kZXggPCBtX2Rpc3Bs
YXlMaXN0Lm1faXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKSkgeworICAgICAgICBtX3Jl
YWRPbmx5QnVmZmVySW5kZXgrKzsKKyAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRC
dWZmZXIoKTsKKyAgICB9CisKKyAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworfQorCit2b2lkIERp
c3BsYXlMaXN0OjppdGVyYXRvcjo6Y2xlYXJDdXJyZW50SXRlbSgpCit7CisgICAgaWYgKG1fY3Vy
cmVudEJ1ZmZlckZvckRlY29kZWRJdGVtKSB7CisgICAgICAgIG1fY3VycmVudEl0ZW0uZGVzdHJv
eSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobV9jdXJyZW50QnVmZmVyRm9yRGVjb2RlZEl0ZW0g
IT0gbV9maXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcykpCisgICAgICAgICAgICBmYXN0RnJlZSht
X2N1cnJlbnRCdWZmZXJGb3JEZWNvZGVkSXRlbSk7CisgICAgfQorCisgICAgbV9jdXJyZW50SXRl
bSA9IHsgfTsKKyAgICBtX2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKyAgICBtX2N1cnJl
bnRCdWZmZXJGb3JEZWNvZGVkSXRlbSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6
Oml0ZXJhdG9yOjptb3ZlVG9FbmQoKQoreworICAgIGlmIChhdXRvJiBpdGVtcyA9IG1fZGlzcGxh
eUxpc3QubV9pdGVtcykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVm
ZmVyLmRhdGEgKyBpdGVtcy0+bV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICAgICAgbV9jdXJy
ZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvcjsKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlckluZGV4
ID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpCit7
CisgICAgYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgaWYgKCFpdGVt
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBudW1iZXJPZlJlYWRPbmx5QnVmZmVycyA9
IGl0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgaWYgKG1fcmVhZE9ubHlCdWZm
ZXJJbmRleCA8IG51bWJlck9mUmVhZE9ubHlCdWZmZXJzKSB7CisgICAgICAgIGF1dG8mIG5leHRC
dWZmZXJIYW5kbGUgPSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnNbbV9yZWFkT25seUJ1ZmZlcklu
ZGV4XTsKKyAgICAgICAgbV9jdXJzb3IgPSBuZXh0QnVmZmVySGFuZGxlLmRhdGE7CisgICAgICAg
IG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBuZXh0QnVmZmVySGFuZGxlLmNhcGFj
aXR5OworICAgIH0gZWxzZSBpZiAobV9yZWFkT25seUJ1ZmZlckluZGV4ID09IG51bWJlck9mUmVh
ZE9ubHlCdWZmZXJzKSB7CisgICAgICAgIG1fY3Vyc29yID0gaXRlbXMtPm1fd3JpdGFibGVCdWZm
ZXIuZGF0YTsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvciArIGl0ZW1z
LT5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdAogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaAppbmRleCBmOWM5Mzk4ZjBiNzIyMjRmNjkwMmEzOGY3OTU3NTYzMmQxYjFhMzIwLi4yMjQ2
NDMyNTUyYzFkNTNlMzU3NmJhYzlhNWJmNzcyYzFkYmY5OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaApAQCAtMjUsMTEgKzI1LDE0IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAt
NDAsMzQgKzQzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogCi1jbGFzcyBJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgot
ICAgIEl0ZW0oKSA9IGRlbGV0ZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmly
dHVhbCBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYg
IWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7Ci0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNv
bnN0IEl0ZW0mKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEl0ZW0+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBl
IG1fdHlwZTsKLX07Ci0KIGVudW0gQXNUZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDAsCiAgICAgSW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9
IDEgPDwgMCwKQEAgLTgwLDg2ICs1NSwxMDkgQEAgY2xhc3MgRGlzcGxheUxpc3QgewogICAgIGZy
aWVuZCBjbGFzcyBSZWNvcmRlcjsKICAgICBmcmllbmQgY2xhc3MgUmVwbGF5ZXI7CiBwdWJsaWM6
Ci0gICAgRGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7Ci0gICAgRGlzcGxheUxpc3QoRGlzcGxheUxp
c3QmJikgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgRGlzcGxheUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CiAKLSAgICBEaXNwbGF5TGlz
dCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB+RGlzcGxheUxpc3QoKTsKIAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0
JiYpOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Q7IH0KLSAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGluZGV4IDwgbV9saXN0LnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX2xpc3Rb
aW5kZXhdLmdldCgpOwotICAgIH0KKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJ
bkJ5dGVzKCkgY29uc3Q7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xp
c3QuaXNFbXB0eSgpOyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0gICAgCiAg
ICAgU3RyaW5nIGFzVGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAogICAg
IFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYpOwotCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0
ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBj
bGFzcy4uLiBBcmdzPiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9pZCBhcHBl
bmQoSXRlbUhhbmRsZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CisKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBlbnVtIGNsYXNzIEltbWVkaWF0ZWx5
TW92ZVRvRW5kIHsgTm8sIFllcyB9OworICAgICAgICBpdGVyYXRvcihjb25zdCBEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QsIEltbWVkaWF0ZWx5TW92ZVRvRW5kIGltbWVkaWF0ZWx5TW92ZVRvRW5k
ID0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6Ok5vKQorICAgICAgICAgICAgOiBtX2Rpc3BsYXlMaXN0
KGRpc3BsYXlMaXN0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHlNb3Zl
VG9FbmQgPT0gSW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcykKKyAgICAgICAgICAgICAgICBtb3Zl
VG9FbmQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmVDdXJzb3JU
b1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudEl0
ZW0oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5pdGVyYXRvcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICZt
X2Rpc3BsYXlMaXN0ID09ICZvdGhlci5tX2Rpc3BsYXlMaXN0ICYmIG1fY3Vyc29yID09IG90aGVy
Lm1fY3Vyc29yOyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIHZvaWQgb3BlcmF0b3Ir
KygpIHsgYWR2YW5jZSgpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxJdGVtSGFuZGxlLCBPcHRpb25h
bDxGbG9hdFJlY3Q+PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiB7IG1fY3VycmVudEl0ZW0s
IG1fY3VycmVudEV4dGVudCB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBzaXplT2ZGaXhlZEJ1ZmZlckZvckRlY29kZWRJdGVtcyA9IDI1NjsKKwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVm
ZmVyKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZVRvRW5kKCk7CisgICAgICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYWR2YW5jZSgpOworICAgICAgICBib29sIGF0RW5kKCkgY29uc3Q7CisKKyAgICAgICAg
Y29uc3QgRGlzcGxheUxpc3QmIG1fZGlzcGxheUxpc3Q7CisgICAgICAgIHVpbnQ4X3QqIG1fY3Vy
c29yIHsgbnVsbHB0ciB9OworICAgICAgICBzaXplX3QgbV9yZWFkT25seUJ1ZmZlckluZGV4IHsg
MCB9OworICAgICAgICBzaXplX3QgbV9kcmF3aW5nSXRlbUluZGV4IHsgMCB9OworICAgICAgICB1
aW50OF90KiBtX2N1cnJlbnRFbmRPZkJ1ZmZlciB7IG51bGxwdHIgfTsKKworICAgICAgICB1aW50
OF90IG1fZml4ZWRCdWZmZXJGb3JEZWNvZGVkSXRlbXNbc2l6ZU9mRml4ZWRCdWZmZXJGb3JEZWNv
ZGVkSXRlbXNdIHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRCdWZmZXJGb3JEZWNv
ZGVkSXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgSXRlbUhhbmRsZSBtX2N1cnJlbnRJdGVtOwor
ICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fY3VycmVudEV4dGVudDsKKyAgICAgICAgc2l6
ZV90IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgeyAwIH07CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcyB9OyB9CisgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkltbWVkaWF0ZWx5TW92ZVRvRW5k
OjpZZXMgfTsgfQogCiBwcml2YXRlOgotICAgIEl0ZW0mIGFwcGVuZChSZWY8SXRlbT4mJiBpdGVt
KQotICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLSAgICAgICAg
cmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAgfQorICAgIEl0ZW1CdWZmZXIqIGl0ZW1C
dWZmZXJJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuZ2V0KCk7IH0KKyAgICBXRUJD
T1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVyKCk7CiAKLSAgICAvLyBMZXNzIGVmZmlj
aWVudCBhcHBlbmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tpbmcgcmVwbGF5LgotICAgIHZvaWQgYXBw
ZW5kSXRlbShJdGVtJiBpdGVtKQorICAgIHZvaWQgYWRkRHJhd2luZ0l0ZW1FeHRlbnQoT3B0aW9u
YWw8RmxvYXRSZWN0PiYmIGV4dGVudCkKICAgICB7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoaXRl
bSk7CisgICAgICAgIEFTU0VSVChtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk7CisgICAgICAg
IG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZNb3ZlKGV4dGVudCkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgY29uc3QgSXRl
bSYpOworICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncywgSXRl
bUhhbmRsZSk7CiAKLSAgICBWZWN0b3I8UmVmPEl0ZW0+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlz
dDsgfQotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJdGVtQnVmZmVyPiBtX2l0ZW1zOworICAgIFZlY3RvcjxPcHRpb25hbDxGbG9hdFJlY3Q+PiBt
X2RyYXdpbmdJdGVtRXh0ZW50czsKKyAgICBib29sIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRz
IHsgdHJ1ZSB9OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEaXNwbGF5
TGlzdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdz
Pgordm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQogewotICAgIE9wdGlv
bmFsPHVpbnQ2NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVjb2RlciA+PiBpdGVtQ291bnQ7Ci0gICAg
aWYgKCFpdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBEaXNw
bGF5TGlzdCBkaXNwbGF5TGlzdDsKLQotICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCAqaXRl
bUNvdW50OyBpKyspIHsKLSAgICAgICAgYXV0byBpdGVtID0gSXRlbTo6ZGVjb2RlKGRlY29kZXIp
OwotICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gZGVjb2RlIGFsbCB0eXBlcywgZmFpbGlu
ZyB0byBkZWNvZGUgYW4gaXRlbSBzaG91bGQgdHVybiBpbnRvIGEgZGVjb2RlIGZhaWx1cmUuCi0g
ICAgICAgIC8vIEZvciBub3csIHdlIGp1c3QgaGF2ZSB0byBpZ25vcmUgaXQuCi0gICAgICAgIGlm
ICghaXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXNwbGF5TGlzdC5hcHBl
bmQoV1RGTW92ZSgqaXRlbSkpOwotICAgIH0KLQotICAgIHJldHVybiBkaXNwbGF5TGlzdDsKKyAg
ICBpdGVtQnVmZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9
CiAKIH0gLy8gRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBmN2NhNmJiZmZk
OThmYTBkZjY4YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4wODFjZWM3OWUzYzlhZTJhMjgwNGMwMTUx
ZWVhZjNjNWIyOWI5Njc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zMzMsNyArMzMzLDcg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1cGRhdGVTdHJva2VDb2xvcihDR0dTdGF0
ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVwZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0
eWxlKGdzdGF0ZSkpOwogCi0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERy
YXdHbHlwaHM6OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFkdmFuY2Vz
RnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCkuZGF0YSgp
LCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwgbV9zbW9v
dGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oKm1fb3JpZ2luYWxG
b250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3Vu
dCwgY3VycmVudFRleHRNYXRyaXgpLmRhdGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4Lm1h
cFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5nTW9kZSk7CiAKICAgICBtX293bmVyLmNv
bmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQpAQCAtMzUyLDcgKzM1Miw3IEBAIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYgZ3N0YXRlCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKIAog
ICAgIGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UpOwotICAgIG1fb3du
ZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgcmVj
dCwge3sgfSwgaW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVm
dCB9KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgRmxvYXRSZWN0KHJl
Y3QpLCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUoKX0sIEltYWdlUGFpbnRpbmdPcHRpb25z
IHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KTsKIAogICAgIC8vIFVuZG8gdGhl
IGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250ZXh0LgogICAgIG1fb3duZXIuc2NhbGUo
RmxvYXRTaXplKDEsIC0xKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKaW5kZXggMjNhYzMyNGI3YjAw
YTllMTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRjMGVjNzJjNDBlMGU4OGIxNjNiYmNhOWE4
NTg0ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcApAQCAtNDMsNyArNDMsNyBAQCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIpCiAK
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChE
cmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBv
aW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJX
aW4uY3BwCmluZGV4IDIzYWMzMjRiN2IwMGE5ZTE2YTU2YWQ2NzBjZTA0Y2ZhNzdmYzlmYTguLjE0
YzBlYzcyYzQwZTBlODhiMTYzYmJjYTlhODU4NGVhYWVmNmE2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdH
bHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNv
cmRlciYgb3duZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdjYzAuLjk2ZTRi
MWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6
CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9j
YXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlz
dCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNwbGF5TGlzdCB0
YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxpc3QsIHsg
fSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlM
aXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXllZERpc3Bs
YXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUx
NDI5NjcwZWVhNTgxZTZiNmJiZTAzZGZiZmE2NjM2NDFkZTczMjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDYzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKKworI2luY2x1
ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCisjaWYgIWRlZmlu
ZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECitDU3RyaW5nIEl0ZW1IYW5kbGU6OmRlc2NyaXB0
aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0aGlzOworICAg
IHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQorI2VuZGlmCisKK3ZvaWQgSXRlbUhhbmRs
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRjaCAodHlwZSgp
KSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogeworICAgICAgICBnZXQ8U2F2ZT4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpS
ZXN0b3JlOiB7CisgICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAg
ICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBnZXQ8Um90YXRlPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOiB7CisgICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAg
ICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIGdldDxTZXRD
VE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVG
aWxsR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIGdldDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgZ2V0
PFNldElubGluZVN0cm9rZUNvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAg
ICBnZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIGdldDxT
ZXRTdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIGdldDxTZXRMaW5lQ2FwPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVEYXNoOiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9p
bjogeworICAgICAgICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogeworICAg
ICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBnZXQ8
Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBnZXQ8Q2xpcD4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0
OiB7CisgICAgICAgIGdldDxDbGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsKKyAgICAgICAg
Z2V0PENsaXBPdXRUb1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRo
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZElt
YWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXI6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjogewor
ICAgICAgICBnZXQ8RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAgICAgZ2V0PERy
YXdSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAgICAgIGdldDxEcmF3TGluZT4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TGluZXNGb3JUZXh0OiB7CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI6IHsKKyAgICAgICAgZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgZ2V0PERyYXdFbGxpcHNlPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXRoOiB7CisgICAgICAgIGdldDxEcmF3UGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsK
KyAgICAgICAgZ2V0PEZpbGxSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7CisgICAgICAg
IGdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAg
ICAgICBnZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7
CisgICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7
CisgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxGaWxs
SW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNl
bmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxsUGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsRWxsaXBzZTogeworICAgICAgICBnZXQ8RmlsbEVsbGlwc2U+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOiB7CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZv
ck1lZGlhOiB7CisgICAgICAgIGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVj
dDogeworICAgICAgICBnZXQ8U3Ryb2tlUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VJbmxpbmVQYXRo
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOiB7CisgICAgICAgIGdldDxTdHJva2VFbGxpcHNlPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
UmVjdDogeworICAgICAgICBnZXQ8Q2xlYXJSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6IHsKKyAgICAgICAgZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykKKyAgICBjYXNl
IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFwcGx5U3Ryb2tl
UGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseUZpbGxQ
YXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjogeworICAgICAgICBn
ZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJveSgpCit7Cisg
ICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7
CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRoPigpLn5DbGlwT3V0VG9QYXRoKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAg
Z2V0PENsaXBQYXRoPigpLn5DbGlwUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzPigpLn5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogewor
ICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQYXRoKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkufkRyYXdGb2N1c1JpbmdS
ZWN0cygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdH
bHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkufkRyYXdHbHlwaHMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdJbWFnZT4oKS5+RHJhd0ltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIGdldDxEcmF3
SW1hZ2VCdWZmZXI+KCkufkRyYXdJbWFnZUJ1ZmZlcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERy
YXdMaW5lc0ZvclRleHQ+KCkufkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0
PERyYXdOYXRpdmVJbWFnZT4oKS5+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQ
YXRoPigpLn5EcmF3UGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXR0ZXJuOiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5+RHJhd1Bh
dHRlcm4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkufkRyYXdUaWxlZElt
YWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLn5E
cmF3VGlsZWRTY2FsZWRJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0
ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCku
fkZpbGxQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLn5G
aWxsUmVjdFdpdGhDb2xvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhH
cmFkaWVudD4oKS5+RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAg
ICBnZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkufkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVj
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdl
RGF0YTogeworICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogewor
ICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuflNldExpbmVEYXNoKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNl
dFN0YXRlPigpLn5TZXRTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuflN0cm9r
ZVBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eURldmljZVNjYWxlRmFjdG9yOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RmlsbFBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8QXBwbHlGaWxsUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQ
YXR0ZXJuPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2Fz
ZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxCZWdpblRyYW5zcGFyZW5jeUxheWVy
Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNs
ZWFyUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcE91
dD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpD
b25jYXRlbmF0ZUNUTTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7Cisg
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd0xpbmU+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1JlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8RHJhd1JlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+Ojp2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVs
bGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8RmlsbEVsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBh
dGg6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8RmlsbElubGluZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxGaWxsUmVjdD46OnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
UGFpbnRGcmFtZUZvck1lZGlhPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Um90YXRlPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTY2Fs
ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRDVE06IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8U2V0Q1RNPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFNldElubGluZUZpbGxHcmFkaWVudD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxp
bmVTdHJva2VDb2xvcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0
ZXJMaW1pdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxTZXRNaXRlckxpbWl0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRTdHJva2VUaGlja25lc3M+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxTdHJva2VFbGxpcHNlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZUlubGluZVBhdGg6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U3Ryb2tlSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlUmVjdD46
OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFu
c2xhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0K
K30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhhbmRsZXMp
CisgICAgOiBtX3JlYWRPbmx5QnVmZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQorCitJdGVt
QnVmZmVyOjpJdGVtQnVmZmVyKCkgPSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZl
cigpCit7CisgICAgY2xlYXIoKTsKK30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVm
ZmVyJiYgb3RoZXIpCisgICAgOiBtX3JlYWRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5t
X3JlYWRpbmdDbGllbnQsIG51bGxwdHIpKQorICAgICwgbV93cml0aW5nQ2xpZW50KHN0ZDo6ZXhj
aGFuZ2Uob3RoZXIubV93cml0aW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1faXRlbXNUb0Rl
c3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zVG9EZXN0
cm95SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9hbGxvY2F0ZWRCdWZmZXJzKHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9yZWFk
T25seUJ1ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9KSkK
KyAgICAsIG1fd3JpdGFibGVCdWZmZXIoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlQnVm
ZmVyLCB7IH0pKQorICAgICwgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyhzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVt
QnVmZmVyOjpvcGVyYXRvcj0oSXRlbUJ1ZmZlciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0Ns
aWVudCA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAg
ICBtX3dyaXRpbmdDbGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwg
bnVsbHB0cik7CisgICAgbV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycywgeyB9KTsK
KyAgICBtX2FsbG9jYXRlZEJ1ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVk
QnVmZmVycywgeyB9KTsKKyAgICBtX3JlYWRPbmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9yZWFkT25seUJ1ZmZlcnMsIHsgfSk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAw
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0l0ZW1CdWZmZXJIYW5kbGUgSXRlbUJ1ZmZlcjo6
Y3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAgaWYgKG1fd3JpdGluZ0Ns
aWVudCkgeworICAgICAgICBpZiAoYXV0byBoYW5kbGUgPSBtX3dyaXRpbmdDbGllbnQtPmNyZWF0
ZUl0ZW1CdWZmZXIoY2FwYWNpdHkpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9
CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkgPSAxIDw8
IDEwOworCisgICAgYXV0byBuZXdCdWZmZXJDYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBk
ZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5KTsKKyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAgbV9h
bGxvY2F0ZWRCdWZmZXJzLmFwcGVuZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpLCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisK
K3ZvaWQgSXRlbUJ1ZmZlcjo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJ
dGVtQnVmZmVySGFuZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRv
JiBoYW5kbGUgOiBtX3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxl
KTsKKworICAgIGlmIChtX3dyaXRhYmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMp
CisgICAgICAgIG1hcEZ1bmN0aW9uKHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBtX3dy
aXRhYmxlQnVmZmVyLmRhdGEsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3ZvaWQg
SXRlbUJ1ZmZlcjo6Y2xlYXIoKQoreworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5n
ZShtX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBpdGVt
LmRlc3Ryb3koKTsKKworICAgIGZvciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZShtX2Fs
bG9jYXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisKKyAgICBt
X3JlYWRPbmx5QnVmZmVycy5jbGVhcigpOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSB7IH07Cisg
ICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyA9IDA7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6c3dh
cFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpCit7CisgICAgaWYg
KG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKyBudW1iZXJPZkJ5dGVzIDw9IG1fd3JpdGFibGVCdWZm
ZXIuY2FwYWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmV4dEJ1ZmZlciA9IGNy
ZWF0ZUl0ZW1CdWZmZXIobnVtYmVyT2ZCeXRlcyk7CisgICAgYm9vbCBoYWRQcmV2aW91c0J1ZmZl
ciA9IG1fd3JpdGFibGVCdWZmZXI7CisgICAgYXV0byBwcmV2aW91c0J1ZmZlciA9IHN0ZDo6ZXhj
aGFuZ2UobV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBwcmV2aW91c0J1ZmZlci5jYXBhY2l0
eSA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAgaWYgKGhh
ZFByZXZpb3VzQnVmZmVyKQorICAgICAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQoV1RGTW92
ZShwcmV2aW91c0J1ZmZlcikpOworCisgICAgbV93cml0YWJsZUJ1ZmZlciA9IFdURk1vdmUobmV4
dEJ1ZmZlcik7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6YXBwZW5kRGF0YUFuZExlbmd0aChSZWY8
U2hhcmVkQnVmZmVyPiYmIGRhdGEsIHVpbnQ4X3QqIGxvY2F0aW9uKQoreworICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8c2l6ZV90Kj4obG9jYXRpb24pWzBdID0gZGF0YS0+c2l6ZSgpOworCisgICAgYXV0
byogc3RhcnRPZlBhZGRpbmcgPSBsb2NhdGlvbiArIHNpemVvZihzaXplX3QpOworICAgIHNpemVf
dCBwYWRkaW5nID0gKGFsaWdub2YodWludDY0X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHN0YXJ0T2ZQYWRkaW5nKSAlIGFsaWdub2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0
X3QpOworICAgIGF1dG8qIHN0YXJ0T2ZEYXRhID0gc3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nOwor
ICAgIG1lbWNweShzdGFydE9mRGF0YSwgZGF0YS0+ZGF0YUFzVUludDhQdHIoKSwgZGF0YS0+c2l6
ZSgpKTsKKworICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSAr
IHNpemVvZihzaXplX3QpICsgcGFkZGluZyArIGRhdGEtPnNpemUoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1CdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWY0MmNmNjQ4YTcwYzQ5Yzhi
NmYxNGM0MDEwYzEwMTQzZjVlM2NkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCkBA
IC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdEl0ZW1UeXBlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3Q7CisKK2VudW0gSXRlbUJ1ZmZl
cklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEl0ZW1CdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0
SWRlbnRpZmllcjxJdGVtQnVmZmVySWRlbnRpZmllclR5cGU+OworCisvLyBBbiBJdGVtQnVmZmVy
SGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGRpc3BsYXkg
bGlzdCBpdGVtIGRhdGEuCitzdHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZSB7CisgICAgSXRlbUJ1ZmZl
cklkZW50aWZpZXIgaWRlbnRpZmllcjsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9Owor
ICAgIHNpemVfdCBjYXBhY2l0eSB7IDAgfTsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhISgqdGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFkYXRhOyB9Cit9OworCit1c2luZyBJdGVtQnVmZmVySGFuZGxlcyA9IFZlY3RvcjxJdGVtQnVm
ZmVySGFuZGxlLCAyPjsKKworLy8gQW4gSXRlbUhhbmRsZSB3cmFwcyBhIHBvaW50ZXIgdG8gYW4g
SXRlbVR5cGUsIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIGl0ZW0gb2YgdGhhdCB0eXBlLgor
c3RydWN0IEl0ZW1IYW5kbGUgeworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZGVzdHJveSgpOworICAg
IGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0
Ojppc0RyYXdpbmdJdGVtKHR5cGUoKSk7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAhISgqdGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFkYXRhOyB9CisKKyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAgICBD
U3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworICAgIEl0ZW1UeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxJdGVtVHlwZT4oZGF0YVswXSk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVt
SW5CeXRlcyh0eXBlKCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGlzKCkg
Y29uc3QgeyByZXR1cm4gdHlwZSgpID09IFQ6Oml0ZW1UeXBlOyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCYgZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpczxUPigpKTsK
KyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQqPigmZGF0YVtzaXplb2YoSXRlbVR5
cGUpXSk7CisgICAgfQorfTsKKworY2xhc3MgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KCkgeyB9CisKKyAgICB2
aXJ0dWFsIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpID0gMDsKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGVuY29kZUl0ZW0oSXRlbUhhbmRsZSkgY29u
c3QgPSAwOworfTsKKworY2xhc3MgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFs
IE9wdGlvbmFsPEl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJdGVtKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBJdGVtVHlwZSwgdWludDhfdCogaGFu
ZGxlTG9jYXRpb24pID0gMDsKK307CisKKy8vIEFuIEl0ZW1CdWZmZXIgY29udGFpbnMgZGlzcGxh
eSBsaXN0IGl0ZW0gZGF0YSwgYW5kIGNvbnNpc3RzIG9mIGEgcmVhZHdyaXRlIEl0ZW1CdWZmZXJI
YW5kbGUgKHRvIHdoaWNoIGRpc3BsYXkKKy8vIGxpc3QgaXRlbXMgYXJlIGFwcGVuZGVkKSBhcyB3
ZWxsIGFzIGEgbnVtYmVyIG9mIHJlYWRvbmx5IEl0ZW1CdWZmZXJIYW5kbGVzLiBJdGVtcyBhcmUg
YXBwZW5kZWQgdG8gdGhlIHJlYWR3cml0ZQorLy8gYnVmZmVyIHVudGlsIGFsbCBhdmFpbGFibGUg
Y2FwYWNpdHkgaXMgZXhoYXVzdGVkLCBhdCB3aGljaCBwb2ludCB3ZSB3aWxsIG1vdmUgdGhpcyB3
cml0YWJsZSBoYW5kbGUgdG8gdGhlIGxpc3QKKy8vIG9mIHJlYWRvbmx5IGhhbmRsZXMuCitjbGFz
cyBJdGVtQnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJdGVtQnVmZmVyKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERpc3BsYXlM
aXN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIH5JdGVtQnVmZmVyKCk7CisgICAgSXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlciYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBvcGVyYXRvcj0oSXRlbUJ1ZmZlciYmKTsKKworICAgIHNp
emVfdCBzaXplSW5CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0g
MDsKKyAgICAgICAgZm9yIChhdXRvIGJ1ZmZlciA6IG1fcmVhZE9ubHlCdWZmZXJzKQorICAgICAg
ICAgICAgcmVzdWx0ICs9IGJ1ZmZlci5jYXBhY2l0eTsKKyAgICAgICAgcmVzdWx0ICs9IG1fd3Jp
dHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
dm9pZCBjbGVhcigpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhbV93cml0dGVuTnVtYmVyT2ZCeXRlcyAmJiBtX3JlYWRPbmx5QnVmZmVycy5pc0Vt
cHR5KCk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlckhhbmRsZSBjcmVh
dGVJdGVtQnVmZmVyKHNpemVfdCk7CisKKyAgICAvLyBJdGVtQnVmZmVyOjphcHBlbmQ8VD4oLi4u
KSBhcHBlbmRzIGEgZGlzcGxheSBsaXN0IGl0ZW0gb2YgdHlwZSBUIHRvIHRoZSBlbmQgb2YgdGhl
IGN1cnJlbnQKKyAgICAvLyB3cml0YWJsZSBidWZmZXIgaGFuZGxlOyBpZiByZW1haW5pbmcgYnVm
ZmVyIGNhcGFjaXR5IGlzIGluc3VmZmljaWVudCB0byBzdG9yZSB0aGUgaXRlbSwgYQorICAgIC8v
IG5ldyBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgKGVpdGhlciBieSB0aGUgSXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQsIGlmIHNldCwgb3IgYnkgdGhlIGl0ZW0KKyAgICAvLyBidWZmZXIgaXRzZWxm
IGlmIHRoZXJlIGlzIG5vIGNsaWVudCkuIEl0ZW1zIGFyZSBwbGFjZWQgYmFjay10by1iYWNrIGlu
IHRoZXNlIGl0ZW0gYnVmZmVycywKKyAgICAvLyB3aXRoIGFuIEl0ZW1UeXBlIHNlcGFyYXRpbmcg
ZWFjaCBpdGVtLgorICAgIC8vCisgICAgLy8gSWYgYSB3cml0aW5nIGNsaWVudCBpcyBwcmVzZW50
IGFuZCByZXF1aXJlcyBjdXN0b20gZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBpdGVtIHR5cGUgVCwg
dGhlCisgICAgLy8gaXRlbSBidWZmZXIgd2lsbCBhc2sgdGhlIGNsaWVudCBmb3IgYW4gb3BhcXVl
IFNoYXJlZEJ1ZmZlciBjb250YWluaW5nIGVuY29kZWQgZGF0YSBmb3IgdGhlCisgICAgLy8gaXRl
bS4gVGhpcyBlbmNvZGVkIGRhdGEgaXMgdGhlbiBhcHBlbmRlZCB0byB0aGUgaXRlbSBidWZmZXIs
IHdpdGggcGFkZGluZyB0byBlbnN1cmUgdGhhdAorICAgIC8vIHRoZSBzdGFydCBvZiB0aGlzIGRh
dGEgaXMgYWxpZ25lZCB0byA4IGJ5dGVzLCBpZiBuZWNlc3NhcnkuIFdoZW4gY29uc3VtaW5nIGVu
Y29kZWQgaXRlbQorICAgIC8vIGRhdGEsIGEgY29ycmVzcG9uZGluZyBJdGVtQnVmZmVyUmVhZGlu
Z0NsaWVudCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbnZlcnQgdGhpcyBlbmNvZGVkIGRhdGEKKyAg
ICAvLyBiYWNrIGludG8gYW4gaXRlbSBvZiB0eXBlIFQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgY2xhc3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFs
dWUgfHwgIVQ6OmlzSW5saW5lSXRlbSk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNpemVPZlR5
cGVBbmRJdGVtID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihUKTsKKworICAgICAgICBpZiAo
IVQ6OmlzSW5saW5lSXRlbSAmJiBtX3dyaXRpbmdDbGllbnQpIHsKKyAgICAgICAgICAgIHN0YXRp
YyB1aW50OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlwZUFuZEl0ZW1dOworICAgICAgICAgICAgaXRl
bUJ1ZmZlclswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAg
ICAgIG5ldyAoaXRlbUJ1ZmZlciArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYXJlZEJ1ZmZlciA9IG1fd3Jp
dGluZ0NsaWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1CdWZmZXIgfSkpIHsKKyAgICAgICAgICAgICAg
ICBzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaGFyZWRCdWZmZXItPnNpemUoKSArIHNpemVv
ZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KSArIGFsaWdub2YodWludDY0X3QpKTsKKyAgICAg
ICAgICAgICAgICBtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10g
PSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgYXBw
ZW5kRGF0YUFuZExlbmd0aChzaGFyZWRCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgbV93cml0YWJs
ZUJ1ZmZlci5kYXRhICsgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIHNpemVvZihJdGVtVHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZU9mVHlwZUFuZEl0ZW0pOworCisgICAg
ICAgIGlmICghc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKKyAgICAg
ICAgICAgIG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMuYXBwZW5kKHsgJm1fd3Jp
dGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSB9KTsKKworICAgICAgICB1
bmNoZWNrZWRBcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1f
d3JpdGluZ0NsaWVudCA9IGNsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9CisKK3By
aXZhdGU6CisgICAgY29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZE9ubHlCdWZmZXJzOyB9CisgICAgdm9pZCBmb3JFYWNoSXRlbUJ1
ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVf
dCBudW1iZXJPZkJ5dGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZERhdGFBbmRM
ZW5ndGgoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDhfdCopOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgdW5jaGVja2VkQXBwZW5kKEFyZ3MmJi4uLiBhcmdz
KQorICAgIHsKKyAgICAgICAgYXV0byogc3RhcnRPZkl0ZW0gPSAmbV93cml0YWJsZUJ1ZmZlci5k
YXRhW21fd3JpdHRlbk51bWJlck9mQnl0ZXNdOworICAgICAgICBzdGFydE9mSXRlbVswXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgbmV3IChzdGFydE9mSXRl
bSArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAg
ICAgICAgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9m
SXRlbUluQnl0ZXMoVDo6aXRlbVR5cGUpOworICAgIH0KKworICAgIEl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50KiBtX3JlYWRpbmdDbGllbnQgeyBudWxscHRyIH07CisgICAgSXRlbUJ1ZmZlcldyaXRp
bmdDbGllbnQqIG1fd3JpdGluZ0NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8SXRlbUhh
bmRsZT4gbV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVyczsKKyAgICBWZWN0b3I8dWlu
dDhfdCo+IG1fYWxsb2NhdGVkQnVmZmVyczsKKyAgICBJdGVtQnVmZmVySGFuZGxlcyBtX3JlYWRP
bmx5QnVmZmVyczsKKyAgICBJdGVtQnVmZmVySGFuZGxlIG1fd3JpdGFibGVCdWZmZXI7CisgICAg
c2l6ZV90IG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwCmluZGV4IDU2YjU3ZjA3YzNjM2M5M2NkM2YwMTkwZjVkNGFjZDFiYjZj
MmE0ZTkuLjcyMjNkNDU1N2M3Zjc3YjYxMDkxYTZlNzNjOTM0MGEzMzY5NDkxMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTQzLDIwNCArNDMsMTYgQEAgbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKIC8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1G
b2N1c1JpbmdXaWR0aCgpCiBzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0
aCA9IDM7CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLVdURjo6Q1N0
cmluZyBJdGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAg
ICB0cyA8PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKLX0KLSNlbmRp
ZgotCi1JdGVtOjpJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0K
LQotSXRlbTo6fkl0ZW0oKSA9IGRlZmF1bHQ7Ci0KLXNpemVfdCBJdGVtOjpzaXplSW5CeXRlcyhj
b25zdCBJdGVtJiBpdGVtKQotewotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTYXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNhdmU+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFJlc3RvcmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFJv
dGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PFNjYWxlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RN
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldENUTT4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZp
bGxHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdGF0ZT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldE1pdGVyTGltaXQ+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxDbGVhclNoYWRvdz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
Q2xpcE91dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENs
aXBQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERy
YXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdl
QnVmZmVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
UGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0xpbmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmU+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
RWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJh
d0ZvY3VzUmluZ1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3Rz
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdp
dGhDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50Pihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSkpOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4oaXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFB1dEltYWdlRGF0
YT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFN0cm9rZVJlY3Q+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tl
UGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVh
clJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwot
I2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pKTsKLSAgICB9Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEcmF3aW5nSXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3VwKCk7Ci0gICAgdHMg
PDwgImV4dGVudCAiOwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0gICAgICAgIHRzIDw8
IGl0ZW0uZXh0ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5rbm93biI7Ci0gICAg
Ci0gICAgdHMuZW5kR3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdpbmdJdGVtOjpE
cmF3aW5nSXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogSXRlbSh0eXBlKQotewotfQotCi1EcmF3
aW5nSXRlbTo6fkRyYXdpbmdJdGVtKCkgPSBkZWZhdWx0OwotCi1TYXZlOjpTYXZlKCkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OlNhdmUpCi17Ci19Ci0KLVNhdmU6On5TYXZlKCkgPSBkZWZhdWx0Owot
CiB2b2lkIFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LnNhdmUoKTsKIH0KIAotUmVzdG9yZTo6UmVzdG9yZSgpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpSZXN0b3JlKQotewotfQotCi1SZXN0b3JlOjp+UmVzdG9yZSgpID0gZGVmYXVsdDsK
LQogdm9pZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLVRyYW5zbGF0ZTo6VHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUpCi0gICAgLCBtX3go
eCkKLSAgICAsIG1feSh5KQotewotfQotCi1UcmFuc2xhdGU6On5UcmFuc2xhdGUoKSA9IGRlZmF1
bHQ7Ci0KIHZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwpAQCAtMjU0LDE0ICs2Niw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBU
cmFuc2xhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Sb3RhdGU6OlJvdGF0ZShmbG9h
dCBhbmdsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJvdGF0ZSkKLSAgICAsIG1fYW5nbGUoYW5n
bGUpCi17Ci19Ci0KLVJvdGF0ZTo6flJvdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBSb3RhdGU6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJv
dGF0ZShtX2FuZ2xlKTsKQEAgLTI3NCwxNCArNzgsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQogICAgIHJldHVybiB0
czsKIH0KIAotU2NhbGU6OlNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNjYWxlKQotICAgICwgbV9zaXplKHNpemUpCi17Ci19Ci0KLVNjYWxlOjp+U2Nh
bGUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7CkBAIC0yOTQsMTQgKzkw
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNjYWxlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0Q1RNOjpTZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRDVE0p
Ci0gICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLVNldENUTTo6flNldENUTSgp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7CkBAIC0zMTQsMTQg
KzEwMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTZXRDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Db25jYXRlbmF0ZUNUTTo6
Q29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKLSAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9y
bSkKLXsKLX0KLQotQ29uY2F0ZW5hdGVDVE06On5Db25jYXRlbmF0ZUNUTSgpID0gZGVmYXVsdDsK
LQogdm9pZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMzNSw4ICsx
MTUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCiB9CiAKIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0
SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0YShncmFkaWVudC5k
YXRhKCkpCisgICAgOiBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQogICAgICwgbV9ncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnQuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKQogICAg
ICwgbV9zcHJlYWRNZXRob2QoZ3JhZGllbnQuc3ByZWFkTWV0aG9kKCkpCiAgICAgLCBtX2NvbG9y
U3RvcENvdW50KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpKSkK
QEAgLTM1OCwxNCArMTM3LDggQEAgUmVmPEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6
OmdyYWRpZW50KCkgY29uc3QKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKLVJlZjxTZXRJbmxp
bmVGaWxsR3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEdyYWRp
ZW50JiBncmFkaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxs
R3JhZGllbnQoZ3JhZGllbnQpKTsKLX0KLQogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBk
YXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwg
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50
KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQotICAgICwgbV9k
YXRhKGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKICAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybWF0aW9uKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKICAgICAsIG1fc3ByZWFkTWV0
aG9kKHNwcmVhZE1ldGhvZCkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoY29sb3JTdG9wQ291bnQp
CkBAIC0zNzcsOCArMTUwLDYgQEAgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFMKICAgICB9CiB9CiAK
LVNldElubGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVudCgpID0gZGVmYXVs
dDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0
b3BDb3VudCkKQEAgLTQwNCwxMyArMTc1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYpCiAgICAgcmV0
dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxpbmVGaWxsQ29sb3I6
OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0SW5saW5lRmlsbENvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1TZXRJbmxpbmVGaWxs
Q29sb3I6On5TZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5l
RmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC00MjIsMTMgKzE4Niw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVG
aWxsQ29sb3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldElubGluZVN0cm9r
ZUNvbG9yPiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9y
RGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVTdHJva2VDb2xvcihj
b2xvckRhdGEpKTsKLX0KLQotU2V0SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJbmxpbmVTdHJva2VD
b2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVTdHJva2VDb2xvcjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoY29sb3IoKSk7CkBAIC00NDAsMTMgKzE5Nyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVTdHJva2VDb2xvciYgc3RhdGUp
CiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBTZXRTdHJva2VU
aGlja25lc3M6OmNyZWF0ZShmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwotfQotCi1TZXRTdHJva2VUaGlj
a25lc3M6On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0U3Ryb2tl
VGhpY2tuZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwpAQCAtNDU5LDE5ICsyMDks
MTUgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB9CiAKIFNldFN0YXRlOjpTZXRTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAg
LCBtX3N0YXRlKHN0YXRlLCBmbGFncykKKyAgICA6IG1fc3RhdGUoc3RhdGUsIGZsYWdzKQogewog
fQogCiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
IHN0YXRlQ2hhbmdlKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgLCBtX3N0
YXRlKHN0YXRlQ2hhbmdlKQorICAgIDogbV9zdGF0ZShzdGF0ZUNoYW5nZSkKIHsKIH0KIAotU2V0
U3RhdGU6On5TZXRTdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIG1fc3RhdGUuYXBwbHkoY29udGV4
dCk7CkBAIC00ODMsMTQgKzIyOSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQog
Ci1TZXRMaW5lQ2FwOjpTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldExpbmVDYXApCi0gICAgLCBtX2xpbmVDYXAobGluZUNhcCkKLXsKLX0KLQotU2V0
TGluZUNhcDo6flNldExpbmVDYXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUNhcDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGlu
ZUNhcChtX2xpbmVDYXApOwpAQCAtNTAyLDE1ICsyNDAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVEYXNoOjpTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNl
dExpbmVEYXNoKQotICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICwgbV9kYXNoT2Zm
c2V0KGRhc2hPZmZzZXQpCi17Ci19Ci0KLVNldExpbmVEYXNoOjp+U2V0TGluZURhc2goKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rhc2hP
ZmZzZXQpOwpAQCAtNTIzLDE0ICsyNTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQogICAgIHJldHVy
biB0czsKIH0KIAotU2V0TGluZUpvaW46OlNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQot
ICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAgLCBtX2xpbmVKb2luKGxpbmVK
b2luKQotewotfQotCi1TZXRMaW5lSm9pbjo6flNldExpbmVKb2luKCkgPSBkZWZhdWx0OwotCiB2
b2lkIFNldExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsKQEAgLTU0MiwxNCArMjYzLDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNl
dExpbmVKb2luJiBsaW5lSm9pbikKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldE1pdGVyTGltaXQ6
OlNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQpCi0gICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKLXsKLX0KLQotU2V0
TWl0ZXJMaW1pdDo6flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TWl0ZXJM
aW1pdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuc2V0TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwpAQCAtNTYxLDI2ICsyNzQsMTEgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVy
TGltaXQmIG1pdGVyTGltaXQpCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGVhclNoYWRvdzo6Q2xl
YXJTaGFkb3coKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCi17Ci19Ci0KLUNs
ZWFyU2hhZG93Ojp+Q2xlYXJTaGFkb3coKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJTaGFkb3c6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNs
ZWFyU2hhZG93KCk7CiB9CiAKLUNsaXA6OkNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAg
IDogSXRlbShJdGVtVHlwZTo6Q2xpcCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGlw
Ojp+Q2xpcCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBAIC01OTIsMTQg
KzI5MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDbGlwJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91dDo6Q2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAg
ICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXBPdXQ6On5DbGlwT3V0KCkgPSBkZWZhdWx0Owot
CiB2b2lkIENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmNsaXBPdXQobV9yZWN0KTsKQEAgLTYxMSwxNCArMzAxLDYgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0
ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoKQotICAg
ICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUNsaXBPdXRUb1BhdGg6On5DbGlwT3V0VG9QYXRoKCkg
PSBkZWZhdWx0OwotCiB2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKQEAgLTYzMCwx
NSArMzEyLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENsaXBPdXRUb1BhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwUGF0
aDo6Q2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV93aW5k
UnVsZSh3aW5kUnVsZSkKLXsKLX0KLQotQ2xpcFBhdGg6On5DbGlwUGF0aCgpID0gZGVmYXVsdDsK
LQogdm9pZCBDbGlwUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuY2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsKQEAgLTY1MSwxNiAr
MzI0LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENsaXBQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykK
LSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kcykKLSAgICAsIG1fZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLSAg
ICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkKLXsKLX0KLQot
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjp+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCkgPSBkZWZhdWx0
OwotCiB2b2lkIENsaXBUb0RyYXdpbmdDb21tYW5kczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFRvRHJhd2luZ0NvbW1hbmRzKG1fZGVz
dGluYXRpb24sIG1fY29sb3JTcGFjZSwgWyZdIChHcmFwaGljc0NvbnRleHQmIGNsaXBwaW5nQ29u
dGV4dCkgewpAQCAtNjc3LDggKzM0MCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIGl0ZW0pCiB9CiAK
IERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVm
ZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4m
JiBhZHZhbmNlcywgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0dseXBo
cykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250KSkKKyAgICA6IG1fZm9udCht
YWtlUmVmUHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAgICAsIG1fZ2x5cGhzKFdURk1v
dmUoZ2x5cGhzKSkKICAgICAsIG1fYWR2YW5jZXMoV1RGTW92ZShhZHZhbmNlcykpCiAgICAgLCBt
X2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQpAQCAtNjg4LDggKzM1MCw3IEBAIERyYXdHbHlwaHM6
OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEy
OD4mJiBnbHlwaHMsCiB9CiAKIERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNo
b3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0dseXBocykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250
KSkKKyAgICA6IG1fZm9udChtYWtlUmVmUHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAg
ICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgLCBtX3Ntb290aGluZ01vZGUoc21v
b3RoaW5nTW9kZSkKIHsKQEAgLTcwMiwxOSArMzYzLDE3IEBAIERyYXdHbHlwaHM6OkRyYXdHbHlw
aHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25z
dCBHCiAgICAgY29tcHV0ZUJvdW5kcygpOwogfQogCi1EcmF3R2x5cGhzOjp+RHJhd0dseXBocygp
ID0gZGVmYXVsdDsKLQogaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5
cGhCdWZmZXIoKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRk
KG1fZ2x5cGhzW2ldLCBtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0sIEdseXBoQnVmZmVyOjpu
b09mZnNldCk7CisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICptX2ZvbnQsIG1fYWR2
YW5jZXNbaV0sIEdseXBoQnVmZmVyOjpub09mZnNldCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBEcmF3R2x5cGhzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7Ci0gICAgY29udGV4dC5kcmF3R2x5cGhzKG1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigp
LCAwLCBtX2dseXBocy5zaXplKCksIGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7Cisg
ICAgY29udGV4dC5kcmF3R2x5cGhzKCptX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwg
bV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB2
b2lkIERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQpAQCAtNzM0LDE0ICszOTMsOCBAQCB2b2lk
IERyYXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQogICAgIH0KIH0KIAotT3B0aW9uYWw8RmxvYXRS
ZWN0PiBEcmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dAotewotICAgIHJldHVybiBtX2JvdW5kczsKLX0KLQogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiB7Ci0gICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTog
ZHVtcCBtb3JlIHN0dWZmLgogICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRl
bS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFuY2hvci1wb2ludCIsIGl0
ZW0uYW5jaG9yUG9pbnQoKSk7CkBAIC03NTAsMTcgKzQwMyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotRHJhd0ltYWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJh
d0ltYWdlOjp+RHJhd0ltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdJbWFnZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ltYWdl
KG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zKTsKQEAgLTc2OCwyNiArNDEwLDEyIEBAIHZvaWQgRHJhd0ltYWdlOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwg
c3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1y
ZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBp
dGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1RpbGVkSW1hZ2U6
OkRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJ
bWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0
aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkK
LSAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhp
bWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd1RpbGVkSW1hZ2U6On5EcmF3VGlsZWRJ
bWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9p
bWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2lu
ZywgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03OTUsNyArNDIzLDYgQEAgdm9pZCBEcmF3
VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVk
SW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1wb2ludCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKQEAgLTgwNCwy
MCArNDMxLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZs
b2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpU
aWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdl
KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24p
Ci0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTY2FsZUZhY3Rvcih0aWxlU2Nh
bGVGYWN0b3IpCi0gICAgLCBtX2hSdWxlKGhSdWxlKQotICAgICwgbV92UnVsZSh2UnVsZSkKLSAg
ICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0K
LURyYXdUaWxlZFNjYWxlZEltYWdlOjp+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCks
IG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTY2FsZUZhY3RvciwgbV9oUnVsZSwgbV92
UnVsZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC04MjUsMjQgKzQzOCwxNSBAQCB2b2lk
IERyYXdUaWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3VGlsZWRTY2FsZWRJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBp
dGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNv
dXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRp
b24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1
ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKLSAgICAsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICAsIG1fZGVzdGluYXRpb25S
ZWN0KGRlc3RSZWN0KQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCi0gICAgLCBtX29wdGlvbnMo
b3B0aW9ucykKLXsKLX0KLQotRHJhd0ltYWdlQnVmZmVyOjp+RHJhd0ltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OwotCisjaWYgIWRlZmluZWQoTkRFQlVHKQorTk9fUkVUVVJOCisjZW5kaWYKIHZvaWQg
RHJhd0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIC8v
IFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KQEAgLTg1MSw3ICs0NTUsNiBAQCB2
b2lkIERyYXdJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdJbWFn
ZUJ1ZmZlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3RlLXJlc291cmNlLWlkZW50aWZp
ZXIiLCBpdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJkZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg1OSw4ICs0NjIsNyBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0ltYWdlQnVmZmVyJiBpdGVtKQogfQogCiBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFn
ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OkRyYXdOYXRpdmVJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2lt
YWdlKGltYWdlKQogICAgICwgbV9pbWFnZVNpemUoaW1hZ2VTaXplKQogICAgICwgbV9kZXN0aW5h
dGlvblJlY3QoZGVzdFJlY3QpCiAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKQEAgLTg2OCw4ICs0
NzAsNiBAQCBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaQogewogfQogCi1EcmF3TmF0aXZlSW1hZ2U6
On5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd05hdGl2ZUltYWdlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3
TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFnZVNpemUsIG1fZGVzdGluYXRpb25SZWN0LCBtX3Ny
Y1JlY3QsIG1fb3B0aW9ucyk7CkBAIC04NzcsNyArNDc3LDYgQEAgdm9pZCBEcmF3TmF0aXZlSW1h
Z2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdOYXRpdmVJbWFnZSYg
aXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0p
OwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJz
b3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1y
ZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBAIC04ODUsOCArNDg0LDcgQEAgc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdOYXRpdmVJ
bWFnZSYgaXRlbSkKIH0KIAogRHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3UGF0dGVybikKLSAg
ICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICwgbV9wYXR0ZXJu
VHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgLCBtX3RpbGVSZWN0KHRpbGVSZWN0KQog
ICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKQEAgLTg5Niw4ICs0OTQsNiBAQCBEcmF3UGF0
dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlYwogewogfQogCi1EcmF3UGF0dGVybjo6fkRyYXdQYXR0ZXJuKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UGF0dGVybihtX2ltYWdlLmdldCgpLCBtX2Rl
c3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFuc2Zvcm0sIG1fcGhhc2UsIG1fc3Bh
Y2luZywgbV9vcHRpb25zKTsKQEAgLTkwNSw3ICs1MDEsNiBAQCB2b2lkIERyYXdQYXR0ZXJuOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVybiYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5UcmFuc2Zvcm0oKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVSZWN0KCkpOwpAQCAtOTE1LDE1ICs1
MTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3UmVjdDo6RHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAg
ICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKLXsKLX0KLQotRHJhd1JlY3Q6
On5EcmF3UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UmVjdDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1JlY3QobV9yZWN0LCBt
X2JvcmRlclRoaWNrbmVzcyk7CkBAIC05MzEsMjEgKzUxNywxMSBAQCB2b2lkIERyYXdSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UmVjdCYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImJv
cmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVzcygpKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKLURyYXdMaW5lOjpEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGlu
ZSkKLSAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAsIG1fcG9pbnQyKHBvaW50MikKLXsKLX0K
LQotRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVsdDsKLQogT3B0aW9uYWw8RmxvYXRSZWN0
PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsK
ICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtOTYwLDE1ICs1MzYsMTMgQEAgdm9pZCBEcmF3TGlu
ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmUmIGl0ZW0pCiB7
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50MSgpKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIERy
YXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0KQotICAgICwgbV9i
bG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgOiBtX2Jsb2NrTG9jYXRpb24oYmxvY2tM
b2NhdGlvbikKICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgLCBtX3dpZHRo
cyh3aWR0aHMpCiAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MpCkBAIC05NzcsOCArNTUxLDYg
QEAgRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBi
bG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFMKIHsKIH0KIAotRHJhd0xpbmVzRm9yVGV4dDo6fkRy
YXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0xpbmVzRm9yVGV4dDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0xp
bmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywgbV93aWR0aHMsIG1fcHJpbnRpbmcsIG1f
ZG91YmxlTGluZXMpOwpAQCAtOTk4LDcgKzU3MCw2IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJh
d0xpbmVzRm9yVGV4dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QK
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdMaW5lc0ZvclRleHQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImJsb2NrLWxvY2F0aW9uIiwg
aXRlbS5ibG9ja0xvY2F0aW9uKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9y
IiwgaXRlbS5sb2NhbEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50IiwgaXRl
bS5wb2ludCgpKTsKQEAgLTEwMTAsMTUgKzU4MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JUZXh0JiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6RHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIHN0eWxlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fc3R5bGUoc3R5bGUpCi17Ci19
Ci0KLURyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6On5EcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIobV9yZWN0LCBtX3N0eWxlKTsKQEAgLTEwMzEsMTkgKzU5MywxMCBAQCBP
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlciYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
LURyYXdFbGxpcHNlOjpEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0VsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsK
LX0KLQotRHJhd0VsbGlwc2U6On5EcmF3RWxsaXBzZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3
RWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuZHJhd0VsbGlwc2UobV9yZWN0KTsKQEAgLTEwNTUsMTQgKzYwOCw2IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYg
aXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdQYXRoOjpEcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXRoKQotICAgICwgbV9w
YXRoKHBhdGgpCi17Ci19Ci0KLURyYXdQYXRoOjp+RHJhd1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICNp
ZiBVU0UoQ0cpCkBAIC0xMDcyLDI0ICs2MTcsMTIgQEAgdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogI2VuZGlmCiB9CiAKLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYgaXRlbSkKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0
aCYpCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
LS8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFk
ZCBsb2dnaW5nIGZvciBwYXRocy4KKyAgICAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhz
LgogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0ZvY3VzUmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLURyYXdGb2N1c1JpbmdQ
YXRoOjp+RHJhd0ZvY3VzUmluZ1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ZvY3VzUmlu
Z1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LmRyYXdGb2N1c1JpbmcobV9wYXRoLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7CkBA
IC0xMTA0LDcgKzYzNyw2IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1BhdGg6
OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUGF0
aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogLy8gICAgdHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhN
RTogYWRkIGxvZ2dpbmcgZm9yIHBhdGhzLgogICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBp
dGVtLndpZHRoKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQo
KSk7CkBAIC0xMTEzLDE2ICs2NDUsMTMgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQogfQogCiBEcmF3
Rm9jdXNSaW5nUmVjdHM6OkRyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHMpCi0gICAgLCBt
X3JlY3RzKHJlY3RzKQorICAgIDogbV9yZWN0cyhyZWN0cykKICAgICAsIG1fd2lkdGgod2lkdGgp
CiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NvbG9yKGNvbG9yKQogewogfQogCi1E
cmF3Rm9jdXNSaW5nUmVjdHM6On5EcmF3Rm9jdXNSaW5nUmVjdHMoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcmVjdHMsIG1fd2lkdGgsIG1fb2Zm
c2V0LCBtX2NvbG9yKTsKQEAgLTExMzksNyArNjY4LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBE
cmF3Rm9jdXNSaW5nUmVjdHM6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnMKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdHMiLCBpdGVt
LnJlY3RzKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgid2lkdGgiLCBpdGVtLndpZHRoKCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgib2Zmc2V0IiwgaXRlbS5vZmZzZXQoKSk7CkBAIC0xMTQ3LDE0
ICs2NzUsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1JlY3RzJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRmls
bFJlY3Q6OkZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpGaWxsUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1GaWxsUmVj
dDo6fkZpbGxSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUmVjdChtX3JlY3Qp
OwpAQCAtMTE2MiwyMCArNjgyLDEwIEBAIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0
IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbFJlY3RXaXRoQ29sb3I6
OkZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yKQotICAg
ICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQotewotfQotCi1GaWxsUmVjdFdp
dGhDb2xvcjo6fkZpbGxSZWN0V2l0aENvbG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0
V2l0aENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsUmVjdChtX3JlY3QsIG1fY29sb3IpOwpAQCAtMTE4MywyMSArNjkzLDE3IEBA
IHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEZpbGxSZWN0V2l0aENvbG9yJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwog
ICAgIHJldHVybiB0czsKIH0KIAogRmlsbFJlY3RXaXRoR3JhZGllbnQ6OkZpbGxSZWN0V2l0aEdy
YWRpZW50KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50KQotICAgICwgbV9yZWN0
KHJlY3QpCisgICAgOiBtX3JlY3QocmVjdCkKICAgICAsIG1fZ3JhZGllbnQoZ3JhZGllbnQpCiB7
CiB9CiAKLUZpbGxSZWN0V2l0aEdyYWRpZW50Ojp+RmlsbFJlY3RXaXRoR3JhZGllbnQoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwgbV9ncmFk
aWVudC5nZXQoKSk7CkBAIC0xMjA1LDIzICs3MTEsMTEgQEAgdm9pZCBGaWxsUmVjdFdpdGhHcmFk
aWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0m
PihpdGVtKTsKICAgICAvLyBGSVhNRTogbG9nIGdyYWRpZW50LgogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxDb21wb3Np
dGVkUmVjdDo6RmlsbENvbXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QpCi0gICAgLCBt
X3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgLCBtX29wKG9wKQotICAgICwg
bV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1GaWxsQ29tcG9zaXRlZFJlY3Q6On5GaWxs
Q29tcG9zaXRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxs
UmVjdChtX3JlY3QsIG1fY29sb3IsIG1fb3AsIG1fYmxlbmRNb2RlKTsKQEAgLTEyMjksNyArNzIz
LDYgQEAgdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVj
dCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbXBvc2l0ZS1vcGVyYXRpb24iLCBpdGVtLmNv
bXBvc2l0ZU9wZXJhdG9yKCkpOwpAQCAtMTIzNywxNiArNzMwLDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxDb21wb3NpdGVkUmVjdCYg
aXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUm91bmRl
ZFJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi0gICAgLCBt
X2JsZW5kTW9kZShibGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxSb3VuZGVkUmVjdDo6fkZpbGxSb3Vu
ZGVkUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVj
dChtX3JlY3QsIG1fY29sb3IsIG1fYmxlbmRNb2RlKTsKQEAgLTEyNTQsMjMgKzczNywxMiBAQCB2
b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
RmlsbFJvdW5kZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yb3Vu
ZGVkUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoImJsZW5kLW1vZGUiLCBpdGVtLmJsZW5kTW9kZSgpKTsKICAg
ICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotICAgICwgbV9yZWN0KHJlY3QpCi0g
ICAgLCBtX3JvdW5kZWRIb2xlUmVjdChyb3VuZGVkSG9sZVJlY3QpCi0gICAgLCBtX2NvbG9yKGNv
bG9yKQotewotfQotCi1GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6fkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShtX3JlY3QsIG1fcm91bmRlZEhvbGVSZWN0LCBtX2NvbG9yKTsKQEAg
LTEyNzgsNyArNzUwLDYgQEAgdm9pZCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJyb3VuZGVkLWhvbGUtcmVjdCIsIGl0ZW0ucm91bmRlZEhvbGVSZWN0KCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwpAQCAtMTI4NywxNCArNzU4LDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGUKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogCi1GaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEm
IHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoKQot
ICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKLXsKLX0KLQotRmlsbElubGluZVBhdGg6On5GaWxs
SW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsSW5saW5lUGF0aDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0
aCgpKTsKQEAgLTEzMDIsMjEgKzc2NSwxMiBAQCB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsSW5saW5lUGF0aCYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotRmlsbFBhdGg6OkZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFBhdGgpCi0g
ICAgLCBtX3BhdGgocGF0aCkKLXsKLX0KLQotRmlsbFBhdGg6On5GaWxsUGF0aCgpID0gZGVmYXVs
dDsKLQogdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKQEAgLTEzMjQsMTkgKzc3OCwxMCBA
QCB2b2lkIEZpbGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxs
UGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+
KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICBy
ZXR1cm4gdHM7CiB9CiAKLUZpbGxFbGxpcHNlOjpGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbEVsbGlwc2UpCi0gICAgLCBt
X3JlY3QocmVjdCkKLXsKLX0KLQotRmlsbEVsbGlwc2U6On5GaWxsRWxsaXBzZSgpID0gZGVmYXVs
dDsKLQogdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZmlsbEVsbGlwc2UobV9yZWN0KTsKQEAgLTEzNDQsMTQgKzc4
OSwxMiBAQCB2b2lkIEZpbGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsRWxsaXBzZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgOiBtX3Ny
Y1JlY3Qoc3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkKICAgICAsIG1faW1h
Z2VEYXRhKGltYWdlRGF0YS5kZWVwQ2xvbmUoKSkgLy8gVGhpcyBjb3B5IGlzIGFjdHVhbGx5IHJl
cXVpcmVkIHRvIHByZXNlcnZlIHRoZSBzZW1hbnRpY3Mgb2YgcHV0SW1hZ2VEYXRhKCkuCiAgICAg
LCBtX2lucHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQpAQCAtMTM2MCw4ICs4MDMsNyBAQCBQdXRJbWFn
ZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmCiB9CiAKIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhKQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCisgICAgOiBtX3NyY1JlY3Qo
c3JjUmVjdCkKICAgICAsIG1fZGVzdFBvaW50KGRlc3RQb2ludCkKICAgICAsIG1faW1hZ2VEYXRh
KFdURk1vdmUoaW1hZ2VEYXRhKSkKICAgICAsIG1faW5wdXRGb3JtYXQoaW5wdXRGb3JtYXQpCkBA
IC0xMzY5LDggKzgxMSw5IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYKIHsKIH0KIAotUHV0SW1h
Z2VEYXRhOjp+UHV0SW1hZ2VEYXRhKCkgPSBkZWZhdWx0OwotCisjaWYgIWRlZmluZWQoTkRFQlVH
KQorTk9fUkVUVVJOCisjZW5kaWYKIHZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAogewogICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0
ZS4KQEAgLTEzNzksNyArODIyLDYgQEAgdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBQdXRJbWFnZURhdGEmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlucHV0
Rm9ybWF0IiwgaXRlbS5pbnB1dEZvcm1hdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdl
RGF0YVNpemUiLCBpdGVtLmltYWdlRGF0YSgpLnNpemUoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwpAQCAtMTM4OCwzMiArODMwLDE1IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQdXRJbWFnZURh
dGEmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQ
YWludEZyYW1lRm9yTWVkaWE6OmNyZWF0ZShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBhaW50RnJh
bWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KLVJlZjxQYWludEZyYW1lRm9y
TWVkaWE+IFBhaW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKE1lZGlhUGxheWVySWRlbnRpZmllciBp
ZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFBhaW50RnJhbWVGb3JNZWRpYShpZGVudGlmaWVyLCBkZXN0aW5hdGlvbikp
OwotfQotCiBQYWludEZyYW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXll
ciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihwbGF5
ZXIuaWRlbnRpZmllcigpKQorICAgIDogbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkp
CiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQogewogfQogCi1QYWludEZyYW1lRm9y
TWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikK
LSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLVBhaW50RnJhbWVGb3JN
ZWRpYTo6flBhaW50RnJhbWVGb3JNZWRpYSgpID0gZGVmYXVsdDsKLQorI2lmICFkZWZpbmVkKE5E
RUJVRykKK05PX1JFVFVSTgorI2VuZGlmCiB2b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSB0
aGUgZGVsZWdhdGUuCkBAIC0xNDIyLDIwICs4NDcsMTAgQEAgdm9pZCBQYWludEZyYW1lRm9yTWVk
aWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQYWludEZyYW1lRm9yTWVkaWEmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImRlc3RpbmF0aW9uIiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZVJlY3Q6OlN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ry
b2tlUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9saW5lV2lkdGgobGluZVdpZHRo
KQotewotfQotCi1TdHJva2VSZWN0Ojp+U3Ryb2tlUmVjdCgpID0gZGVmYXVsdDsKLQogT3B0aW9u
YWw8RmxvYXRSZWN0PiBTdHJva2VSZWN0Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdAogewogICAgIEZsb2F0UmVjdCBib3VuZHMgPSBtX3JlY3Q7CkBAIC0xNDUwLDcg
Kzg2NSw2IEBAIHZvaWQgU3Ryb2tlUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU3Ryb2tlUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVj
dCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImxpbmUtd2lkdGgiLCBpdGVtLmxpbmVXaWR0aCgp
KTsKICAgICByZXR1cm4gdHM7CkBAIC0xNDczLDE5ICs4ODcsMTAgQEAgdm9pZCBTdHJva2VQYXRo
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VQYXRoJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAotU3Ryb2tlRWxsaXBzZTo6U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZSkKLSAgICAsIG1fcmVjdChy
ZWN0KQotewotfQotCi1TdHJva2VFbGxpcHNlOjp+U3Ryb2tlRWxsaXBzZSgpID0gZGVmYXVsdDsK
LQogT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VFbGxpcHNlOjpsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tu
ZXNzID0gY29udGV4dC5zdHJva2VUaGlja25lc3MoKTsKQEAgLTE1MDIsNyArOTA3LDYgQEAgdm9p
ZCBTdHJva2VFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJv
a2VFbGxpcHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJ
dGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwog
ICAgIHJldHVybiB0czsKIH0KQEAgLTE1MjYsMzcgKzkzMCwxMiBAQCB2b2lkIFN0cm9rZUlubGlu
ZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUlubGluZVBh
dGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0
dXJuIHRzOwogfQogCi1TdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElu
bGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VJbmxpbmVQYXRoKQotICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKLXsKLX0KLQotU3Ryb2tl
SW5saW5lUGF0aDo6flN0cm9rZUlubGluZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KICNlbmRpZiAvLyBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotU3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVBhdGgpCi0gICAg
LCBtX3BhdGgocGF0aCkKLXsKLX0KLQotU3Ryb2tlUGF0aDo6flN0cm9rZVBhdGgoKSA9IGRlZmF1
bHQ7Ci0KLUNsZWFyUmVjdDo6Q2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpDbGVhclJlY3QpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsK
LX0KLQotQ2xlYXJSZWN0Ojp+Q2xlYXJSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lkIENsZWFyUmVj
dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
Y2xlYXJSZWN0KG1fcmVjdCk7CkBAIC0xNTY0LDE5ICs5NDMsMTAgQEAgdm9pZCBDbGVhclJlY3Q6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsZWFyUmVjdCYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAK
LUJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
KQotICAgICwgbV9vcGFjaXR5KG9wYWNpdHkpCi17Ci19Ci0KLUJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6On5CZWdpblRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCiB2b2lkIEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9vcGFjaXR5KTsKQEAgLTE1ODQs
NTcgKzk1NCwyOCBAQCB2b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXImIGl0ZW0pCiB7Ci0g
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoIm9wYWNpdHkiLCBpdGVtLm9wYWNpdHkoKSk7CiAgICAgcmV0dXJuIHRzOwog
fQogCi1FbmRUcmFuc3BhcmVuY3lMYXllcjo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyKQotewotfQotCi1FbmRU
cmFuc3BhcmVuY3lMYXllcjo6fkVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSBkZWZhdWx0OwotCiB2
b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogfQogCiAjaWYg
VVNFKENHKQotQXBwbHlTdHJva2VQYXR0ZXJuOjpBcHBseVN0cm9rZVBhdHRlcm4oKQotICAgIDog
SXRlbShJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuKQotewotfQotCi1BcHBseVN0cm9rZVBh
dHRlcm46On5BcHBseVN0cm9rZVBhdHRlcm4oKSA9IGRlZmF1bHQ7CiAKIHZvaWQgQXBwbHlTdHJv
a2VQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5hcHBseVN0cm9rZVBhdHRlcm4oKTsKIH0KIAotQXBwbHlGaWxsUGF0dGVybjo6QXBw
bHlGaWxsUGF0dGVybigpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuKQot
ewotfQotCi1BcHBseUZpbGxQYXR0ZXJuOjp+QXBwbHlGaWxsUGF0dGVybigpID0gZGVmYXVsdDsK
LQogdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5hcHBseUZpbGxQYXR0ZXJuKCk7CiB9CiAjZW5kaWYKIAot
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2Fs
ZUZhY3RvcikKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi0g
ICAgLCBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQotewotfQotCi1BcHBseURldmljZVNjYWxl
RmFjdG9yOjp+QXBwbHlEZXZpY2VTY2FsZUZhY3RvcigpID0gZGVmYXVsdDsKLQogdm9pZCBBcHBs
eURldmljZVNjYWxlRmFjdG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fc2NhbGVGYWN0b3IpOwpA
QCAtMTY0Niw3ICs5ODcsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciYgaXRlbQogICAgIHJldHVybiB0
czsKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEl0ZW1UeXBlJiB0eXBlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIEl0ZW1UeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZTogdHMgPDwgInNhdmUiOyBicmVhazsKQEAgLTE3MTcsMTcyICsxMDU4
LDE3MCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgSXRlbVR5cGUmIHR5cGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1UZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQorVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgSXRlbUhhbmRsZSBpdGVtKQogewotICAgIFRleHRTdHJl
YW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOwogICAgIHRzIDw8IGl0ZW0udHlwZSgpOwogCi0gICAg
Ly8gRklYTUU6IE1ha2UgYSBtYWNybyB3aGljaCB0YWtlcyBhIG1hY3JvIGZvciBhbGwgdGhlc2Ug
ZW51bWVyYXRpb24gc3dpdGNoZXMKICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxUcmFuc2xhdGU+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxUcmFuc2xhdGU+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
Um90YXRlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Um90YXRlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2NhbGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTY2FsZT4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTZXRDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRDVE0+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElu
bGluZUZpbGxHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGlu
ZUZpbGxHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29s
b3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldFN0cm9rZVRoaWNrbmVzcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0YXRlPihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dExpbmVDYXA+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lQ2FwPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTZXRMaW5lRGFzaD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUpvaW46Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNl
dE1pdGVyTGltaXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRNaXRlckxpbWl0
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8Q2xpcE91dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENs
aXBPdXQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXRUb1BhdGg+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0VG9QYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFBhdGg+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwUGF0aD4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdH
bHlwaHM+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3R2x5cGhzPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdJ
bWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1h
Z2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1RpbGVkSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdUaWxlZFNjYWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1
ZmZlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3TmF0aXZlSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0dGVy
bj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1JlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UmVjdD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PERyYXdMaW5lPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0xpbmU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5l
c0ZvclRleHQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3TGluZXNGb3JUZXh0PigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJh
d0VsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRo
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3UGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdQYXRoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmlu
Z1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUGF0aD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxG
aWxsUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0PigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0
PEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxDb21wb3NpdGVkUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0
ZWRSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0
PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRo
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRp
ZgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxG
aWxsUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxQYXRoPigpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxG
aWxsRWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1h
Z2VEYXRhOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxQdXRJbWFnZURhdGE+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxQdXRJbWFnZURhdGE+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UGFp
bnRGcmFtZUZvck1lZGlhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0PihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5l
UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSk7Cisg
ICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9rZUlubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFr
OwogI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0cm9r
ZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlw
c2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxTdHJva2VFbGxpcHNlPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsZWFyUmVj
dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsZWFyUmVjdD4oKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpOwogICAgICAgICBicmVhazsKIAog
ICAgIC8vIEl0ZW1zIHdpdGggbm8gYWRkaXRpb25hbCBkYXRhLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKaW5kZXggZjAxNWJlNWU4NjYwNmVjYzJmNmNlODU3YzFmNzExNjc2OTRmZThl
My4uZTI1OGU4NjE5NDQ3YzE5ODM5MGUwOGU0ODk4ODdmYjMzMTA2OGNmYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC01MSwzMjAgKzUxLDE2MyBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdp
bmdJdGVtIDogcHVibGljIEl0ZW0geworY2xhc3MgU2F2ZSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgZXhwbGljaXQgRHJhd2luZ0l0ZW0oSXRlbVR5cGUpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2F2ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RHJhd2luZ0l0ZW0oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgRmxvYXRSZWN0JiByKSB7IG1fZXh0ZW50ID0gcjsg
fQotICAgIGNvbnN0IEZsb2F0UmVjdCYgZXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnQu
dmFsdWUoKTsgfQotCi0gICAgYm9vbCBleHRlbnRLbm93bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1fZXh0ZW50KTsgfQotCi0gICAgLy8gUmV0dXJuIGJvdW5kcyBvZiB0aGlz
IGRyYXdpbmcgb3BlcmF0aW9uIGluIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIC8vIERvZXMgbm90
IGluY2x1ZGUgZWZmZXRzIG9mIHRyYW5zZm9ybSwgc2hhZG93IGV0YyBpbiB0aGUgc3RhdGUuCi0g
ICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQotCi0gICAgLy8gU29tZSBv
cGVyYXRpb25zIChlLmcuIHB1dEltYWdlRGF0YSkgb3BlcmF0ZSBpbiBnbG9iYWwgYm91bmRzLiBG
b3IgdGhlc2Ugb3BlcmF0aW9ucywgb3ZlcnJpZGUgdGhpcyBtZXRob2QuCi0gICAgLy8gSWYgYXBw
bGljYWJsZSwgdGhlIHJldHVybiB2YWx1ZSBuZWVkcyB0byBpbmNsdWRlIHRoZSBlZmZlY3RzIG9m
IHNoYWRvd3MsIGNsaXBwaW5nLCBldGMuCi0gICAgdmlydHVhbCBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQotCi1wcml2YXRl
OgotICAgIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbV9leHRlbnQ7IC8vIEluIGJhc2UgY29vcmRp
bmF0ZXMsIHRha2luZyBzaGFkb3dzIGFuZCB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi1jbGFzcyBT
YXZlIDogcHVibGljIEl0ZW0geworY2xhc3MgUmVzdG9yZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxTYXZlPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2F2ZSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6UmVzdG9yZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2F2ZSgpOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxTYXZlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBTYXZlKCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNhdmU6
OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTYXZlPj4gU2F2ZTo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVy
biBTYXZlOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgUmVzdG9yZSA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFRyYW5zbGF0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZXN0b3JlPiBjcmVhdGUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVzdG9yZSk7Ci0gICAgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVzdG9yZSgpOwotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UmVzdG9yZT4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVzdG9yZSgpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFJlc3RvcmU6OmVuY29kZShFbmNvZGVyJikgY29uc3QK
LXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxSZXN0b3JlPj4g
UmVzdG9yZTo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBSZXN0b3JlOjpjcmVhdGUo
KTsKLX0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OlRyYW5zbGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1j
bGFzcyBUcmFuc2xhdGUgOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxU
cmFuc2xhdGU+IGNyZWF0ZShmbG9hdCB4LCBmbG9hdCB5KQorICAgIFRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQorICAgICAgICA6IG1feCh4KQorICAgICAgICAsIG1feSh5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhbnNsYXRlKHgsIHkpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5UcmFuc2xhdGUoKTsKLQogICAgIGZsb2F0IHgoKSBj
b25zdCB7IHJldHVybiBtX3g7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxUcmFu
c2xhdGU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CiAKLSAgICBmbG9hdCBtX3g7Ci0gICAgZmxvYXQgbV95OworcHJpdmF0ZToKKyAgICBmbG9hdCBt
X3ggeyAwIH07CisgICAgZmxvYXQgbV95IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgVHJhbnNsYXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1feDsKLSAgICBlbmNvZGVyIDw8IG1feTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxUcmFuc2xhdGU+PiBUcmFuc2xhdGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAgIGRlY29k
ZXIgPj4geDsKLSAgICBpZiAoIXgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBPcHRpb25hbDxmbG9hdD4geTsKLSAgICBkZWNvZGVyID4+IHk7Ci0gICAgaWYgKCF5KQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFRyYW5zbGF0ZTo6Y3JlYXRl
KCp4LCAqeSk7Ci19Ci0KLWNsYXNzIFJvdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFJvdGF0
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSb3RhdGU+IGNyZWF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlJvdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisg
ICAgUm90YXRlKGZsb2F0IGFuZ2xlKQorICAgICAgICA6IG1fYW5nbGUoYW5nbGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSb3RhdGUoYW5nbGVJblJhZGlhbnMpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Sb3RhdGUoKTsKLQogICAgIGZsb2F0
IGFuZ2xlKCkgY29uc3QgeyByZXR1cm4gbV9hbmdsZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Um90YXRlPj4gZGVjb2RlKERlY29kZXImKTsK
LQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSb3RhdGUoZmxvYXQgYW5nbGUpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGZsb2F0IG1fYW5nbGU7IC8vIEluIHJhZGlh
bnMuCitwcml2YXRlOgorICAgIGZsb2F0IG1fYW5nbGUgeyAwIH07IC8vIEluIHJhZGlhbnMuCiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBSb3RhdGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9hbmdsZTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxSb3RhdGU+PiBSb3RhdGU6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBhbmdsZTsKLSAgICBkZWNv
ZGVyID4+IGFuZ2xlOwotICAgIGlmICghYW5nbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gUm90YXRlOjpjcmVhdGUoKmFuZ2xlKTsKLX0KLQotY2xhc3MgU2Nh
bGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTY2FsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxTY2FsZT4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNjYWxlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTY2FsZShjb25zdCBGbG9hdFNpemUmIHNp
emUpCisgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTY2FsZShzaXplKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+U2NhbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0U2l6ZSYgYW1vdW50KCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTY2FsZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgU2NhbGUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9w
dDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0U2l6ZSBtX3NpemU7CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBTY2FsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3NpemU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2NhbGU+PiBTY2FsZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzY2FsZTsKLSAgICBkZWNvZGVyID4+IHNjYWxlOwot
ICAgIGlmICghc2NhbGUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gU2NhbGU6OmNyZWF0ZSgqc2NhbGUpOwotfQotCi1jbGFzcyBTZXRDVE0gOiBwdWJsaWMgSXRl
bSB7CitjbGFzcyBTZXRDVE0gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0Q1RNPiBjcmVh
dGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRDVE07CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKKyAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0Q1RNKCk7Ci0KICAgICBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRDVE0+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZh
dGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgU2V0Q1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fdHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPFNldENUTT4+IFNldENUTTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVj
b2RlciA+PiB0cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0Q1RNOjpjcmVhdGUoKnRyYW5zZm9ybSk7Ci19
Ci0KLWNsYXNzIENvbmNhdGVuYXRlQ1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgQ29uY2F0ZW5h
dGVDVE0gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29uY2F0ZW5hdGVDVE0+IGNyZWF0ZShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICAgICAgOiBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0p
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb25jYXRlbmF0ZUNUTShtYXRy
aXgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Db25jYXRlbmF0ZUNU
TSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8Q29uY2F0ZW5hdGVDVE0+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2
YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBDb25jYXRlbmF0ZUNUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxDb25jYXRlbmF0ZUNUTT4+IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9y
bTsKLSAgICBkZWNvZGVyID4+IHRyYW5zZm9ybTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDb25jYXRlbmF0ZUNUTTo6Y3Jl
YXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBTZXRJbmxpbmVGaWxsR3JhZGllbnQgOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBTZXRJbmxpbmVGaWxsR3JhZGllbnQgewogcHVibGljOgorICAgIHN0
YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50OF90IG1heENvbG9yU3RvcENvdW50ID0gNDsKIAotICAgIHN0
YXRpYyBSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBjcmVhdGUoY29uc3QgR3JhZGllbnQmKTsK
LSAgICBzdGF0aWMgYm9vbCBpc0lubGluZShjb25zdCBHcmFkaWVudCYpOwotCi0gICAgdmlydHVh
bCB+U2V0SW5saW5lRmlsbEdyYWRpZW50KCk7Ci0KLSAgICBSZWY8R3JhZGllbnQ+IGdyYWRpZW50
KCkgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRl
OgotICAgIHN0YXRpYyBSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBjcmVhdGUoZmxvYXQgb2Zm
c2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0
b3BDb3VudF0sCi0gICAgICAgIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRN
ZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRpZW50KG9mZnNldHMsIGNv
bG9ycywgZGF0YSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBzcHJlYWRNZXRob2QsIGNv
bG9yU3RvcENvdW50KSk7Ci0gICAgfQotCisgICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0
IEdyYWRpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2V0SW5saW5lRmlsbEdyYWRpZW50KGZs
b2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4
Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYsCiAgICAgICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVh
ZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCk7CiAKLSAgICBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQoY29uc3QgR3JhZGllbnQmKTsKKyAgICBzdGF0aWMgYm9vbCBpc0lubGluZShjb25zdCBH
cmFkaWVudCYpOworICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQoKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKworcHJpdmF0ZToKICAgICBmbG9hdCBtX29mZnNldHNbbWF4
Q29sb3JTdG9wQ291bnRdOwogICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JzW21heENvbG9yU3Rv
cENvdW50XTsKICAgICBHcmFkaWVudDo6RGF0YSBtX2RhdGE7CkBAIC0zNzMsMTk4ICsyMTYsNzkg
QEAgcHJpdmF0ZToKICAgICB1aW50OF90IG1fY29sb3JTdG9wQ291bnQgeyAwIH07CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9jb2xvclN0b3BD
b3VudDsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kp
IHsKLSAgICAgICAgZW5jb2RlciA8PCBtX29mZnNldHNbaV07Ci0gICAgICAgIGVuY29kZXIgPDwg
UGFja2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yc1tpXSB9LnZhbHVlOwotICAgIH0KLSAgICBlbmNv
ZGVyIDw8IG1fZGF0YTsKLSAgICBlbmNvZGVyIDw8IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOwotICAgIGVuY29kZXIgPDwgbV9zcHJlYWRNZXRob2Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50Pj4gU2V0SW5saW5l
RmlsbEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1
aW50OF90PiBjb2xvclN0b3BDb3VudDsKLSAgICBkZWNvZGVyID4+IGNvbG9yU3RvcENvdW50Owot
ICAgIGlmICghY29sb3JTdG9wQ291bnQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICBpZiAoKmNvbG9yU3RvcENvdW50ID4gbWF4Q29sb3JTdG9wQ291bnQpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50
XTsKLSAgICBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwotICAgIGZv
ciAodWludDhfdCBpID0gMDsgaSA8ICpjb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIE9w
dGlvbmFsPGZsb2F0PiBvZmZzZXQ7Ci0gICAgICAgIGRlY29kZXIgPj4gb2Zmc2V0OwotICAgICAg
ICBpZiAoIW9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAg
ICAgT3B0aW9uYWw8dWludDMyX3Q+IGNvbG9yOwotICAgICAgICBkZWNvZGVyID4+IGNvbG9yOwot
ICAgICAgICBpZiAoIWNvbG9yKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgICAgICBjb2xvcnNbaV0gPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKmNvbG9yIH0p
OwotICAgICAgICBvZmZzZXRzW2ldID0gKm9mZnNldDsKLSAgICB9Ci0KLSAgICBPcHRpb25hbDxH
cmFkaWVudDo6RGF0YT4gZGF0YTsKLSAgICBkZWNvZGVyID4+IGRhdGE7Ci0gICAgaWYgKCFkYXRh
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8QWZmaW5lVHJh
bnNmb3JtPiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgZGVjb2RlciA+PiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb247Ci0gICAgaWYgKCFncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb24pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxHcmFk
aWVudFNwcmVhZE1ldGhvZD4gc3ByZWFkTWV0aG9kOwotICAgIGRlY29kZXIgPj4gc3ByZWFkTWV0
aG9kOwotICAgIGlmICghc3ByZWFkTWV0aG9kKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIHsgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUob2Zmc2V0cywg
Y29sb3JzLCAqZGF0YSwgKmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgKnNwcmVhZE1ldGhv
ZCwgKmNvbG9yU3RvcENvdW50KSB9OwotfQotCi1jbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBTZXRJbmxpbmVGaWxsQ29sb3IgewogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2V0SW5saW5lRmlsbENvbG9yPiBjcmVhdGUoU1JHQkE8
dWludDhfdD4pOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRJbmxpbmVGaWxsQ29s
b3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9
OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxT
ZXRJbmxpbmVGaWxsQ29sb3I+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgogICAgIFNl
dElubGluZUZpbGxDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRl
bShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yKQotICAgICAgICAsIG1fY29sb3JEYXRhKGNv
bG9yRGF0YSkKKyAgICAgICAgOiBtX2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAgewogICAgIH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIFNSR0JBPHVpbnQ4X3Q+
IG1fY29sb3JEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0SW5s
aW5lRmlsbENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+PiBT
ZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAgICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0SW5saW5l
RmlsbENvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7
Ci19Ci0KLWNsYXNzIFNldElubGluZVN0cm9rZUNvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0SW5saW5lU3Ryb2tlQ29sb3IgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRJbmxpbmVTdHJva2VDb2xvcigpOwotCi0gICAg
Q29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07IH0KLQotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZVN0cm9r
ZUNvbG9yPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6CiAgICAgU2V0SW5saW5lU3Ry
b2tlQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yKQotICAgICAgICAsIG1fY29sb3JEYXRhKGNvbG9yRGF0
YSkKKyAgICAgICAgOiBtX2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAgewogICAgIH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBTUkdC
QTx1aW50OF90PiBtX2NvbG9yRGF0YTsKLX07CisgICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJl
dHVybiB7IG1fY29sb3JEYXRhIH07IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgUGFja2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwot
fQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+PiBTZXRJbmxp
bmVTdHJva2VDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8
dWludDMyX3Q+IHZhbHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICByZXR1cm4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6
OmNyZWF0ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKLX0KK3ByaXZh
dGU6CisgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7Cit9OwogCi1jbGFzcyBTZXRTdHJv
a2VUaGlja25lc3MgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRTdHJva2VUaGlja25lc3Mgewog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2V0U3Ryb2tlVGhpY2tuZXNz
PiBjcmVhdGUoZmxvYXQgdGhpY2tuZXNzKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
flNldFN0cm9rZVRoaWNrbmVzcygpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJl
dHVybiBtX3RoaWNrbmVzczsgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKICAgICBTZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcykKLSAgICAgICAgLCBtX3RoaWNr
bmVzcyh0aGlja25lc3MpCisgICAgICAgIDogbV90aGlja25lc3ModGhpY2tuZXNzKQogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Ci19OworICAgIGZsb2F0IHRoaWNrbmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fdGhpY2tuZXNzOyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIFNldFN0cm9rZVRoaWNrbmVzczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3RoaWNrbmVzczsKLX0KKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFNldFN0cm9rZVRoaWNrbmVzcz4+IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHRoaWNrbmVzczsKLSAgICBk
ZWNvZGVyID4+IHRoaWNrbmVzczsKLSAgICBpZiAoIXRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiAKLSAgICByZXR1cm4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoKnRoaWNrbmVz
cyk7Ci19Citwcml2YXRlOgorICAgIGZsb2F0IG1fdGhpY2tuZXNzIHsgMCB9OworfTsKIAotY2xh
c3MgU2V0U3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRTdGF0ZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi0g
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZSwgZmxhZ3Mp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2hhbmdlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGVDaGFuZ2UpKTsKLSAgICB9CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRTdGF0ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflNldFN0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyk7CisgICAgV0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2UmKTsKICAgICAKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CiAKQEAgLTU3MywxNCArMjk3LDE0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0
cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpOwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXIm
KTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZSBtX3N0YXRlOwogfTsKIApAQCAtNjY5LDcgKzM5Myw3IEBA
IHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3RhdGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncz4gY2hhbmdlRmxhZ3M7CiAgICAgZGVjb2RlciA+PiBjaGFuZ2VG
bGFnczsKQEAgLTg5Niw2OCArNjIwLDU1IEBAIE9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0
YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9ICpzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAg
ICB9CiAKLSAgICByZXR1cm4gU2V0U3RhdGU6OmNyZWF0ZShzdGF0ZUNoYW5nZSk7CisgICAgcmV0
dXJuIHsgc3RhdGVDaGFuZ2UgfTsKIH0KIAotY2xhc3MgU2V0TGluZUNhcCA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldExpbmVDYXAgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZUNh
cD4gY3JlYXRlKExpbmVDYXAgbGluZUNhcCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVDYXA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQorICAg
ICAgICA6IG1fbGluZUNhcChsaW5lQ2FwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0TGluZUNhcChsaW5lQ2FwKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+U2V0TGluZUNhcCgpOwotICAgIAogICAgIExpbmVDYXAgbGluZUNhcCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUNhcDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZUNhcChMaW5lQ2FwKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGluZUNhcCBtX2xpbmVDYXA7CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lQ2FwOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fbGluZUNhcDsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRMaW5lQ2FwPj4gU2V0TGluZUNh
cDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TGluZUNhcD4gbGlu
ZUNhcDsKLSAgICBkZWNvZGVyID4+IGxpbmVDYXA7Ci0gICAgaWYgKCFsaW5lQ2FwKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldExpbmVDYXA6OmNyZWF0ZSgq
bGluZUNhcCk7Ci19Ci0KLWNsYXNzIFNldExpbmVEYXNoIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0TGluZURhc2ggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGluZURhc2g+IGNyZWF0
ZShjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVEYXNoOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgICAg
IDogbV9kYXNoQXJyYXkoZGFzaEFycmF5KQorICAgICAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zm
c2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZURhc2goZGFz
aEFycmF5LCBkYXNoT2Zmc2V0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+U2V0TGluZURhc2goKTsKLQogICAgIGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5KCkgY29u
c3QgeyByZXR1cm4gbV9kYXNoQXJyYXk7IH0KICAgICBmbG9hdCBkYXNoT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9kYXNoT2Zmc2V0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0TGluZURhc2g+IGRlY29kZShE
ZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRGFzaEFycmF5IG1fZGFzaEFycmF5OwogICAgIGZs
b2F0IG1fZGFzaE9mZnNldDsKIH07CkBAIC05NzAsNyArNjgxLDcgQEAgdm9pZCBTZXRMaW5lRGFz
aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TGluZURhc2g+PiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCitPcHRpb25hbDxTZXRMaW5lRGFzaD4gU2V0TGluZURhc2g6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPERhc2hBcnJheT4gZGFzaEFycmF5
OwogICAgIGRlY29kZXIgPj4gZGFzaEFycmF5OwpAQCAtOTgyLDIxNSArNjkzLDEzOCBAQCBPcHRp
b25hbDxSZWY8U2V0TGluZURhc2g+PiBTZXRMaW5lRGFzaDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgaWYgKCFkYXNoT2Zmc2V0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIFNldExpbmVEYXNoOjpjcmVhdGUoKmRhc2hBcnJheSwgKmRhc2hPZmZzZXQp
OworICAgIHJldHVybiB7eyAqZGFzaEFycmF5LCAqZGFzaE9mZnNldCB9fTsKIH0KIAotY2xhc3Mg
U2V0TGluZUpvaW4gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lSm9pbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lSm9pbj4gY3JlYXRlKExpbmVKb2luIGxpbmVKb2luKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGlu
ZUpvaW47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQorICAgICAgICA6IG1fbGluZUpvaW4obGluZUpv
aW4pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lSm9pbihsaW5l
Sm9pbikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVKb2lu
KCk7Ci0gICAgCiAgICAgTGluZUpvaW4gbGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBtX2xpbmVK
b2luOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxTZXRMaW5lSm9pbj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgU2V0TGluZUpvaW4oTGluZUpvaW4pOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KIAorcHJpdmF0ZToKICAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TGluZUpvaW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9saW5lSm9pbjsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRMaW5lSm9pbj4+IFNldExpbmVKb2luOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lSm9pbj4gbGluZUpvaW47
Ci0gICAgZGVjb2RlciA+PiBsaW5lSm9pbjsKLSAgICBpZiAoIWxpbmVKb2luKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldExpbmVKb2luOjpjcmVhdGUoKmxp
bmVKb2luKTsKLX0KLQotY2xhc3MgU2V0TWl0ZXJMaW1pdCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNz
IFNldE1pdGVyTGltaXQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TWl0ZXJMaW1pdD4g
Y3JlYXRlKGZsb2F0IGxpbWl0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgU2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQorICAg
ICAgICA6IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2V0TWl0ZXJMaW1pdChsaW1pdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgflNldE1pdGVyTGltaXQoKTsKLQogICAgIGZsb2F0IG1pdGVyTGltaXQo
KSBjb25zdCB7IHJldHVybiBtX21pdGVyTGltaXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldE1pdGVyTGltaXQ+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldE1pdGVyTGltaXQoZmxvYXQp
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBmbG9hdCBtX21p
dGVyTGltaXQ7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRNaXRlckxp
bWl0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
bWl0ZXJMaW1pdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxT
ZXRNaXRlckxpbWl0Pj4gU2V0TWl0ZXJMaW1pdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IG1pdGVyTGltaXQ7Ci0gICAgZGVjb2RlciA+PiBtaXRlckxp
bWl0OwotICAgIGlmICghbWl0ZXJMaW1pdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBTZXRNaXRlckxpbWl0OjpjcmVhdGUoKm1pdGVyTGltaXQpOwotfQotCi1j
bGFzcyBDbGVhclNoYWRvdyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsZWFyU2hhZG93IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyU2hhZG93PiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJTaGFkb3cpOwotICAgIH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyU2hhZG93KCk7Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGVhclNoYWRvdz4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsZWFyU2hhZG93KCk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xlYXJT
aGFkb3c6OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGVhclNoYWRvdz4+IENsZWFyU2hhZG93OjpkZWNvZGUoRGVj
b2RlciYpCi17Ci0gICAgcmV0dXJuIENsZWFyU2hhZG93OjpjcmVhdGUoKTsKLX0KLQotLy8gRklY
TUU6IHRyZWF0IGFzIERyYXdpbmdJdGVtPwotY2xhc3MgQ2xpcCA6IHB1YmxpYyBJdGVtIHsKKy8v
IEZJWE1FOiB0cmVhdCBhcyBkcmF3aW5nIGl0ZW0/CitjbGFzcyBDbGlwIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENsaXA+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXAocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkNsaXAoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXA+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwKGNvbnN0IEZsb2F0UmVjdCYp
OwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQog
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBDbGlwOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8
IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlw
Pj4gQ2xpcDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcDo6Y3JlYXRlKCpyZWN0KTsK
LX0KLQotY2xhc3MgQ2xpcE91dCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBPdXQgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNs
aXBPdXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dChyZWN0KSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcE91dCgpOworICAgIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8Q2xpcE91dD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIENsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsaXBPdXQ6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBDbGlwT3V0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVj
b2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBDbGlwT3V0OjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGlw
T3V0VG9QYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dFRvUGF0aCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxDbGlwT3V0VG9QYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBP
dXRUb1BhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAg
ICBDbGlwT3V0VG9QYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBh
dGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xpcE91dFRvUGF0aChw
YXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q2xpcE91dFRvUGF0
aCgpOworICAgIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3Bh
dGgocGF0aCkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xpcE91dFRvUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBPdXRUb1BhdGg+IGRlY29kZShE
ZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcE91dFRvUGF0aChj
b25zdCBQYXRoJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgY29uc3QgUGF0
aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KQEAgLTEyMDAsMzcgKzgzNCw0NyBAQCB2b2lkIENsaXBPdXRUb1BhdGg6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PgotT3B0aW9uYWw8UmVmPENsaXBPdXRUb1BhdGg+PiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENsaXBPdXRUb1BhdGg+IENsaXBPdXRUb1BhdGg6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAg
ZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBDbGlwT3V0VG9QYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJl
dHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgQ2xpcFBhdGggOiBwdWJsaWMg
SXRlbSB7CitjbGFzcyBDbGlwUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwUGF0
aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcFBhdGg7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwUGF0aChQYXRo
JiYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0
aCkpCisgICAgICAgICwgbV93aW5kUnVsZSh3aW5kUnVsZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgfkNsaXBQYXRoKCk7CisgICAgQ2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgICAgICwg
bV93aW5kUnVsZSh3aW5kUnVsZSkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29u
c3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgQ2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICBjb25z
dCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiAgICAgV2luZFJ1bGUg
bV93aW5kUnVsZTsKIH07CiAKQEAgLTEyNDIsNyArODg2LDcgQEAgdm9pZCBDbGlwUGF0aDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCitPcHRpb25hbDxDbGlwUGF0aD4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwpAQCAt
MTI1NCwzMCArODk4LDM1IEBAIE9wdGlvbmFsPFJlZjxDbGlwUGF0aD4+IENsaXBQYXRoOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIXdpbmRSdWxlKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIENsaXBQYXRoOjpjcmVhdGUoKnBhdGgsICp3aW5k
UnVsZSk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpLCAqd2luZFJ1bGUgfX07CiB9CiAK
LWNsYXNzIENsaXBUb0RyYXdpbmdDb21tYW5kcyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENsaXBU
b0RyYXdpbmdDb21tYW5kcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwVG9EcmF3aW5n
Q29tbWFuZHM+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgICAgIDog
bV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JT
cGFjZSkKKyAgICAgICAgLCBtX2RyYXdpbmdDb21tYW5kcyhXVEZNb3ZlKGRyYXdpbmdDb21tYW5k
cykpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwVG9EcmF3aW5nQ29t
bWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsK
LQogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xvclNwYWNlOyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRyYXdpbmdDb21tYW5kcygp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0NvbW1hbmRzOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRz
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IG1fZGVzdGluYXRpb247CiAgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7CiAgICAgRGlzcGxh
eUxpc3QgbV9kcmF3aW5nQ29tbWFuZHM7CkBAIC0xMjg4LDExICs5MzcsMTEgQEAgdm9pZCBDbGlw
VG9EcmF3aW5nQ29tbWFuZHM6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAg
IGVuY29kZXIgPDwgbV9kZXN0aW5hdGlvbjsKICAgICBlbmNvZGVyIDw8IG1fY29sb3JTcGFjZTsK
LSAgICBlbmNvZGVyIDw8IG1fZHJhd2luZ0NvbW1hbmRzOworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgYSB3YXkgdG8gZW5jb2RlIGluLW1lbW9yeSBkaXNwbGF5IGxpc3RzLgogfQogCiB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IENs
aXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxD
bGlwVG9EcmF3aW5nQ29tbWFuZHM+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsKICAg
ICBkZWNvZGVyID4+IGRlc3RpbmF0aW9uOwpAQCAtMTMwNCwyNyArOTUzLDE2IEBAIE9wdGlvbmFs
PFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29k
ZShEZWNvZGVyJiBkZWNvCiAgICAgaWYgKCFjb2xvclNwYWNlKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IGRyYXdpbmdDb21tYW5kczsK
LSAgICBkZWNvZGVyID4+IGRyYXdpbmdDb21tYW5kczsKLSAgICBpZiAoIWRyYXdpbmdDb21tYW5k
cykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6OmNyZWF0ZSgqZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKCpk
cmF3aW5nQ29tbWFuZHMpKTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGRlY29k
ZSBpbi1tZW1vcnkgZGlzcGxheSBsaXN0cy4KKyAgICBEaXNwbGF5TGlzdCBkcmF3aW5nQ29tbWFu
ZHM7CisgICAgcmV0dXJuIHt7ICpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoZHJh
d2luZ0NvbW1hbmRzKSB9fTsKIH0KIAotY2xhc3MgRHJhd0dseXBocyA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3R2x5cGhzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdH
bHlwaHM+IGNyZWF0ZShjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMo
Zm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgY291bnQsIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2Rl
KSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9u
dCYgZm9udCwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiBnbHlwaHMsIFZlY3RvcjxH
bHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiBhZHZhbmNlcywgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIFdURk1vdmUoZ2x5cGhzKSwg
V1RGTW92ZShhZHZhbmNlcyksIGxvY2FsQW5jaG9yLCBzbW9vdGhpbmdNb2RlKSk7Ci0gICAgfQot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0dseXBocygpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0dseXBoczsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCiAgICAgY29uc3QgRmxvYXRQb2lu
dCYgbG9jYWxBbmNob3IoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsQW5jaG9yOyB9CiAKQEAgLTEz
MzMsMjEgKzk3MSwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEdseXBoQnVmZmVyR2x5
cGgsIDEyOD4mIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzOyB9CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3R2x5cGhzPj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8RHJhd0dseXBocz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKICAgICBEcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9y
LCBGb250U21vb3RoaW5nTW9kZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0dseXBocyhjb25z
dCBGb250JiwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiwgVmVjdG9yPEdseXBoQnVm
ZmVyQWR2YW5jZSwgMTI4PiYmLCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNt
b290aGluZ01vZGUpOwogCi0gICAgdm9pZCBjb21wdXRlQm91bmRzKCk7Ci0KLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogCitwcml2YXRlOgorICAgIHZvaWQgY29t
cHV0ZUJvdW5kcygpOwogICAgIEdseXBoQnVmZmVyIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSBjb25z
dDsKIAotICAgIFJlZjxGb250PiBtX2ZvbnQ7CisgICAgUmVmUHRyPEZvbnQ+IG1fZm9udDsKICAg
ICBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiBtX2dseXBoczsKICAgICBWZWN0b3I8R2x5
cGhCdWZmZXJBZHZhbmNlLCAxMjg+IG1fYWR2YW5jZXM7CiAgICAgRmxvYXRSZWN0IG1fYm91bmRz
OwpAQCAtMTM1OCw3ICs5OTYsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
IHZvaWQgRHJhd0dseXBoczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAg
ZW5jb2RlciA8PCBtX2ZvbnQ7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ZvbnQpOwogICAg
IGVuY29kZXIgPDwgbV9nbHlwaHM7CiAgICAgZW5jb2RlciA8PCBtX2FkdmFuY2VzOwogICAgIGVu
Y29kZXIgPDwgbV9sb2NhbEFuY2hvcjsKQEAgLTEzNjYsNyArMTAwNCw3IEBAIHZvaWQgRHJhd0ds
eXBoczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdHbHlwaHM6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0dseXBocz4gRHJhd0dseXBoczo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVmPEZvbnQ+PiBmb250OwogICAg
IGRlY29kZXIgPj4gZm9udDsKQEAgLTEzOTYsMzIgKzEwMzQsMzYgQEAgT3B0aW9uYWw8UmVmPERy
YXdHbHlwaHM+PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IXNtb290aGluZ01vZGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQtPmdldCgpLCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZN
b3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hvciwgKnNtb290aGluZ01vZGUpOworICAgIHJldHVy
biB7eyBmb250LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAq
bG9jYWxBbmNob3IsICpzbW9vdGhpbmdNb2RlIH19OwogfQogCi1jbGFzcyBEcmF3SW1hZ2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2lt
YWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1h
Z2VQYWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25z
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ltYWdlKCk7Ci0K
ICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAg
RmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0lt
YWdlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ltYWdlPiBkZWNvZGUoRGVjb2Rl
ciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFn
ZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmlt
YXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAg
ICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAt
MTQ0MSw3ICsxMDgzLDcgQEAgdm9pZCBEcmF3SW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdJ
bWFnZT4+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3
SW1hZ2U+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7
CkBAIC0xNDYzLDE3ICsxMTA1LDE0IEBAIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1h
Z2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlv
bnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ltYWdl
OjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1h
Z2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAq
ZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xh
c3MgRHJhd1RpbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1RpbGVk
SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkSW1hZ2U+IGNyZWF0ZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3VGlsZWRJbWFnZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdP
cHRpb25zKSk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVk
SW1hZ2UoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdl
dCgpOyB9CiAgICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsg
fQpAQCAtMTQ4MiwxNiArMTEyMSwyNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHRpbGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2Up
CisgICAgICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAgICAgLCBtX3NwYWNpbmcoc3Bh
Y2luZykKKyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQorICAgIHsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGls
ZWRJbWFnZT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJ
bWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBh
bmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUu
CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRQb2ludCBtX3NvdXJjZTsK
QEAgLTE1MTQsNyArMTE2Miw3IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPERyYXdUaWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7
CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE1NDYsMzIgKzExOTQsMzkgQEAgT3B0
aW9uYWw8UmVmPERyYXdUaWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSgqaW1h
Z2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNp
bmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+
aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdl
UGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAg
ICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQorICAgICAgICAsIG1faFJ1
bGUoaFJ1bGUpCisgICAgICAgICwgbV92UnVsZSh2UnVsZSkKKyAgICAgICAgLCBtX2ltYWdlUGFp
bnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9u
cykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZFNjYWxl
ZEltYWdlKCk7Ci0KICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlLmdldCgpOyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlOyB9CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4g
ZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGls
ZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFi
bGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNl
IHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUg
bXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9z
b3VyY2U7CkBAIC0xNTk2LDcgKzEyNTEsNyBAQCB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4+IERyYXdUaWxlZFNjYWxlZElt
YWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZFNjYWxlZElt
YWdlPiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1h
Z2VIYW5kbGU7CkBAIC0xNjMxLDMzICsxMjg2LDM3IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4+IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
CiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhh
bmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1
bGUsIHZSdWxlLCAqaW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VI
YW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3SW1h
Z2VCdWZmZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlQnVmZmVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZUJ1ZmZlcj4gY3JlYXRlKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCisgICAgICAgIDogbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgICAgICAsIG1fZGVzdGluYXRp
b25SZWN0KGRlc3RSZWN0KQorICAgICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgICAgICAs
IG1fb3B0aW9ucyhvcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0ltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZGVzdGluYXRpb24s
IHNvdXJjZSwgb3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkRyYXdJbWFnZUJ1ZmZlcigpOwotCiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyOyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3JjUmVjdDsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxEcmF3SW1hZ2VCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZh
dGU6CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyOwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKICAgICBGbG9hdFJl
Y3QgbV9zcmNSZWN0OwpAQCAtMTY3NCw3ICsxMzMzLDcgQEAgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3SW1hZ2VCdWZmZXI+IERyYXdJbWFn
ZUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAg
ZGVjb2RlciA+PiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CkBAIC0xNjk2LDMxICsxMzU1
LDI5IEBAIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSgqcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpvcHRpb25z
KTsKKyAgICByZXR1cm4ge3sgKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKmRlc3RpbmF0
aW9uLCAqc291cmNlLCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdOYXRpdmVJbWFnZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05h
dGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7
Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJl
Y3Q7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3TmF0aXZlSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOwogICAgIEZsb2F0U2l6
ZSBtX2ltYWdlU2l6ZTsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CkBAIC0xNzM5
LDcgKzEzOTYsNyBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d05hdGl2ZUltYWdlPj4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxOYXRpdmVJbWFnZVB0cj4gaW1hZ2U7CiAgICAg
ZGVjb2RlciA+PiBpbWFnZTsKQEAgLTE3NjYsMTcgKzE0MjMsMTYgQEAgT3B0aW9uYWw8UmVmPERy
YXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKCppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3Rp
bmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlLCAq
aW1hZ2VTaXplLCAqZGVzdGluYXRpb25SZWN0LCAqc3JjUmVjdCwgKm9wdGlvbnMgfX07CiB9CiAK
LWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXR0
ZXJuIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RHJhd1BhdHRlcm4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIGNv
bnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3BhdHRlcm5UcmFuc2Zvcm07IH0KQEAgLTE3ODUsMTYgKzE0NDEsMTUgQEAgcHVibGljOgogICAg
IEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9CiAgICAgRmxvYXRT
aXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEcmF3UGF0dGVybj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBt
dXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBj
YXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRv
IGJlIG11dGFibGUuCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAg
ICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKQEAgLTE4MTksNyArMTQ3NCw3IEBAIHZvaWQgRHJhd1Bh
dHRlcm46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1BhdHRlcm4+IERyYXdQYXR0ZXJuOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1h
Z2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE4NTYsMTgyICsxNTEx
LDEwMCBAQCBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQYXR0ZXJuOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5p
bWFnZSwgKmRlc3RpbmF0aW9uLCAqdGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2Us
ICpzcGFjaW5nLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2Us
ICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3Bh
Y2luZywgKm9wdGlvbnMgfX07CiB9CiAKLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNp
emUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5k
cy4KLWNsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoZmxvYXQgb3BhY2l0eSkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOyAvLyBJcyBkcmF3
aW5nIGl0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGlt
cGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQorICAgICAgICA6IG1fb3BhY2l0eShvcGFjaXR5KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpOwotCiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QmVn
aW5UcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X29wYWNpdHk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QmVn
aW5UcmFuc3BhcmVuY3lMYXllcj4+IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBvcGFjaXR5OwotICAgIGRlY29k
ZXIgPj4gb3BhY2l0eTsKLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCpvcGFj
aXR5KTsKLX0KLQotY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7Ci0gICAgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVy
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBFbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUo
RW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+PiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2Rl
KERlY29kZXImKQotewotICAgIHJldHVybiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCk7
Ci19Ci0KLWNsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdS
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UmVjdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3UmVjdChGbG9hdFJlY3QgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAs
IG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdSZWN0KCk7Ci0KICAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGJvcmRlclRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNzOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UmVjdD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd1JlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9i
b3JkZXJUaGlja25lc3M7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd1JlY3Q+PiBEcmF3UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAo
IXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9h
dD4gYm9yZGVyVGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4gYm9yZGVyVGhpY2tuZXNzOwotICAg
IGlmICghYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIERyYXdSZWN0OjpjcmVhdGUoKnJlY3QsICpib3JkZXJUaGlja25lc3MpOwotfQot
Ci1jbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3TGluZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0xpbmU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0xpbmUoRmxvYXRQb2ludCBwb2lu
dDEsIEZsb2F0UG9pbnQgcG9pbnQyKQorICAgICAgICA6IG1fcG9pbnQxKHBvaW50MSkKKyAgICAg
ICAgLCBtX3BvaW50Mihwb2ludDIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdMaW5lKCk7Ci0KICAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnQxOyB9CiAgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVy
biBtX3BvaW50MjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8RHJhd0xpbmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBt
X3BvaW50MTsKICAgICBGbG9hdFBvaW50IG1fcG9pbnQyOwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgRHJhd0xpbmU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9wb2ludDE7Ci0gICAgZW5jb2RlciA8PCBtX3BvaW50MjsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZT4+IERyYXdM
aW5lOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFBvaW50
PiBwb2ludDE7Ci0gICAgZGVjb2RlciA+PiBwb2ludDE7Ci0gICAgaWYgKCFwb2ludDEpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2lu
dDI7Ci0gICAgZGVjb2RlciA+PiBwb2ludDI7Ci0gICAgaWYgKCFwb2ludDIpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQx
LCAqcG9pbnQyKTsKLX0KLQotY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3TGluZXNGb3JUZXh0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9u
LCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0
aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpOwogCiAgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQogICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9j
YXRpb247IH0KQEAgLTIwNDIsMTYgKzE2MTUsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcmlu
dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICBib29sIGRvdWJsZUxpbmVz
KCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2Fs
QW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4
dD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYmxvY2tM
b2NhdGlvbjsKICAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKICAgICBEYXNoQXJyYXkgbV93
aWR0aHM7CkBAIC0yMDcyLDcgKzE2NDQsNyBAQCB2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IERyYXdMaW5lc0Zv
clRleHQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IGJsb2NrTG9jYXRpb247CiAgICAgZGVjb2RlciA+PiBibG9ja0xvY2F0aW9uOwpAQCAtMjEw
NCwxMTkgKzE2NzYsODMgQEAgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGlu
ZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRvdWJsZUxpbmVz
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdMaW5lc0Zv
clRleHQ6OmNyZWF0ZSgqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAq
d2lkdGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyk7CisgICAgcmV0dXJuIHt7ICpibG9ja0xv
Y2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMsICpwcmludGluZywgKmRv
dWJsZUxpbmVzIH19OwogfQogCi1jbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAg
ICAgICAgLCBtX3N0eWxlKHN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKTsKLQog
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgog
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHls
ZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9zdHlsZTsKLX0KK2NsYXNzIERyYXdFbGxpcHNl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkRyYXdFbGxpcHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyPj4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIg
Pj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICBPcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gc3R5bGU7Ci0gICAgZGVjb2Rl
ciA+PiBzdHlsZTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZSgqcmVjdCwg
KnN0eWxlKTsKLX0KLQotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewot
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3RWxsaXBz
ZShyZWN0KSk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkRyYXdFbGxpcHNlKCk7Cisg
ICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChy
ZWN0KQorICAgIHsKKyAgICB9CiAKICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8RHJhd0VsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCitwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBEcmF3RWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RHJhd0VsbGlwc2U+PiBEcmF3RWxsaXBzZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsK
LSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gRHJhd0VsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIERyYXdQYXRoIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERyYXdQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdQYXRoOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3UGF0aChjb25zdCBQYXRoJiBw
YXRoKQorICAgICAgICA6IG1fcGF0aChwYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRHJhd1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkRyYXdQYXRoKCk7CisgICAgRHJhd1BhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDog
bV9wYXRoKFdURk1vdmUocGF0aCkpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUo
RGVjb2RlciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAot
ICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAK
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0yMjI2LDI0ICsxNzYyLDM3IEBAIHZvaWQgRHJh
d1BhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdQYXRoPj4gRHJhd1BhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1BhdGg+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4g
cGF0aDsKICAgICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICByZXR1cm4gRHJhd1BhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUo
KnBhdGgpIH19OwogfQogCi1jbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEcmF3Rm9jdXNSaW5nUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0
aChQYXRoJiYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisg
ICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgs
IHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RHJhd0ZvY3VzUmluZ1BhdGgoKTsKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAg
ICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CiAK
ICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgZmxv
YXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CkBAIC0yMjUxLDE2ICsxODAwLDE1
IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxEcmF3Rm9jdXNSaW5nUGF0aD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZh
dGU6CisgICAgUGF0aCBtX3BhdGg7CiAgICAgZmxvYXQgbV93aWR0aDsKICAgICBmbG9hdCBtX29m
ZnNldDsKICAgICBDb2xvciBtX2NvbG9yOwpAQCAtMjI3Niw3ICsxODI0LDcgQEAgdm9pZCBEcmF3
Rm9jdXNSaW5nUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3
Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9j
dXNSaW5nUGF0aD4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ewogICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwpAQCAtMjI5
OCwzMyArMTg0NiwzMSBAQCBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3Rm9j
dXNSaW5nUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUGF0
aDo6Y3JlYXRlKCpwYXRoLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvcik7CisgICAgcmV0dXJuIHt7
IFdURk1vdmUoKnBhdGgpLCAqd2lkdGgsICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3Mg
RHJhd0ZvY3VzUmluZ1JlY3RzIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1
c1JpbmdSZWN0cyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+
IGNyZWF0ZShjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdGb2N1c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3Ip
KTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdSZWN0
cygpOworICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CiAK
ICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dHM7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBm
bG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIGNvbnN0IENvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IGRlY29k
ZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
OwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1JlY3RzPiBkZWNv
ZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7
CiAgICAgZmxvYXQgbV93aWR0aDsKICAgICBmbG9hdCBtX29mZnNldDsKQEAgLTIzNDEsNyArMTg4
Nyw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1JlY3RzOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3Rm9j
dXNSaW5nUmVjdHM+PiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1JlY3RzPiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFZlY3RvcjxGbG9hdFJlY3Q+PiBy
ZWN0czsKICAgICBkZWNvZGVyID4+IHJlY3RzOwpAQCAtMjM2Myw3MSArMTkwOSw1NSBAQCBPcHRp
b25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKCpyZWN0cywg
KndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdHMsICp3aWR0aCwg
Km9mZnNldCwgKmNvbG9yIH19OwogfQogCi1jbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBGaWxsUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVj
dD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0OworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEZpbGxSZWN0KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5GaWxsUmVjdCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsUmVjdDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBGaWxsUmVj
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBy
ZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRmlsbFJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19
Ci0KLS8vIEZJWE1FOiBNYWtlIHRoZXNlIGluaGVyaXQgZnJvbSBGaWxsUmVjdCBwcm9wZXIuCi1j
bGFzcyBGaWxsUmVjdFdpdGhDb2xvciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxs
UmVjdFdpdGhDb2xvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xv
cj4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAg
IEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0
LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0
V2l0aENvbG9yKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxS
ZWN0V2l0aENvbG9yPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0
V2l0aENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJl
Y3RXaXRoQ29sb3I+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IG1fcmVjdDsKICAgICBDb2xvciBtX2NvbG9yOwogfTsKQEAgLTI0NDAsNyArMTk3MCw3IEBAIHZv
aWQgRmlsbFJlY3RXaXRoQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9y
Pj4gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
RmlsbFJlY3RXaXRoQ29sb3I+IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiBy
ZWN0OwpAQCAtMjQ1MiwyOSArMTk4MiwyOSBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29s
b3I+PiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxs
UmVjdFdpdGhDb2xvcjo6Y3JlYXRlKCpyZWN0LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVj
dCwgKmNvbG9yIH19OwogfQogCi1jbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRmlsbFJlY3RXaXRoR3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKLSAgICB9CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpOwogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICBjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50Lmdl
dCgpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJl
ZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgog
ICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGll
bnQ7IC8vIEZJWE1FOiBNYWtlIHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3LDcgKzIwMTcs
NyBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVj
dFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVu
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBy
ZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwMjgsMzcgQEAgT3B0aW9u
YWw8UmVmPEZpbGxSZWN0V2l0aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUoKnJl
Y3QsIGdyYWRpZW50LT5nZXQoKSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0
KCkgfX07CiB9CiAKLWNsYXNzIEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RmlsbENvbXBvc2l0ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisK
KyAgICBGaWxsQ29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAg
ICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwg
bV9vcChvcCkKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9w
LCBibGVuZE1vZGUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxs
Q29tcG9zaXRlZFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcDsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X2JsZW5kTW9kZTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8RmlsbENvbXBvc2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIEZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVj
dD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0Owog
ICAgIENvbG9yIG1fY29sb3I7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKQEAgLTI1NDAs
NyArMjA3NSw3IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxG
aWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dDsKICAgICBkZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTYyLDMxICsyMDk3LDM1IEBAIE9wdGlvbmFs
PFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKCpyZWN0LCAq
Y29sb3IsICpvcCwgKmJsZW5kTW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpv
cCwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERy
YXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxGaWxsUm91bmRlZFJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9j
b2xvcihjb2xvcikKKyAgICAgICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJs
ZW5kTW9kZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSb3Vu
ZGVkUmVjdCgpOwotCiAgICAgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yOyB9CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxlbmRNb2RlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IGRl
Y29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlY3QucmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdC5yZWN0KCk7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVj
dDsKICAgICBDb2xvciBtX2NvbG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKQEAgLTI2
MDEsNyArMjE0MCw3IEBAIHZvaWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxG
aWxsUm91bmRlZFJlY3Q+PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQorT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+IHJlY3Q7CiAg
ICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjYxOCwzMSArMjE1NywzNSBAQCBPcHRpb25hbDxSZWY8
RmlsbFJvdW5kZWRSZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBGaWxsUm91bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqYmxlbmRN
b2RlKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKIH0KIAot
Y2xhc3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qo
cm91bmRlZEhvbGVSZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CiAg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERlY29k
ZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBt
X3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIEZsb2F0Um91
bmRlZFJlY3QgbV9yb3VuZGVkSG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTI2NTcs
NyArMjIwMCw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjY3
NCw3NCArMjIxNyw2MyBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYgKCFjb2xvcikK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6Y3JlYXRlKCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29sb3IpOworICAg
IHJldHVybiB7eyAqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19OwogfQogCiAjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRoIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEZpbGxJbmxpbmVQYXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhE
YXRhKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwor
CisgICAgRmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAg
ICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25z
dCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGluZVBhdGgo
Y29uc3QgSW5saW5lUGF0aERhdGEmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1Jl
Y3QoKTsgfQogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwotfQot
Ci10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4g
RmlsbElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAg
IGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gRmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAjZW5k
aWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEZpbGxQYXRoPiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYgcGF0aCkKKyAg
ICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEZpbGxQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5GaWxsUGF0aCgpOworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAg
ICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgo
KSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+IGRlY29kZShE
ZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBhdGgoY29uc3Qg
UGF0aCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBj
b25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMjc1MSw5MCArMjI4Myw2NSBAQCB2b2lkIEZpbGxQYXRo
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7
CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIEZpbGxQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRo
KSB9fTsKIH0KIAotY2xhc3MgRmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRmlsbEVsbGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsRWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RmlsbEVsbGlwc2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxGaWxsRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcmVjdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAor
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgRmlsbEVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPEZpbGxFbGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+
IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIEZpbGxFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBQdXRJbWFn
ZURhdGEgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRhIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
dXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBk
ZXN0Rm9ybWF0KSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVhdGUo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFn
ZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92ZShpbWFnZURh
dGEpLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflB1dEltYWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRh
PiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0KLSAg
ICBJbWFnZURhdGEmIGltYWdlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9Cisg
ICAgSW1hZ2VEYXRhJiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0K
ICAgICBJbnRSZWN0IHNyY1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBJ
bnRQb2ludCBkZXN0UG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQogICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdEZv
cm1hdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8UHV0SW1hZ2VEYXRhPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VE
YXRhPiYmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiB7eyBtX2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNpemUoKSB9fTsgfQogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
RmxvYXRSZWN0KG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVj
b2RlciYpOwogCitwcml2YXRlOgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIEludFBvaW50
IG1fZGVzdFBvaW50OwotICAgIFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgIFJlZlB0
cjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9p
bnB1dEZvcm1hdDsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsKIH07
CkBAIC0yODQzLDE0ICsyMzUwLDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1
dEltYWdlRGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rl
ciA8PCBtX2lucHV0Rm9ybWF0OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7CisgICAgZW5j
b2RlciA8PCBtYWtlUmVmKCptX2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7
CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZvcm1h
dDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQdXRJbWFnZURh
dGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0
SW1hZ2VEYXRhPiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEFscGhhUHJlbXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9wdGlv
bmFsPFJlZjxJbWFnZURhdGE+PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjM4NSwxMDkgQEAg
T3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZvcm1hdCwgV1RG
TW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0KTsKKyAg
ICByZXR1cm4ge3sgKmlucHV0Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVjdCwg
KmRlc3RQb2ludCwgKmRlc3RGb3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJhbWVGb3JNZWRp
YSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5QYWludEZyYW1lRm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAg
ICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lk
ZW50aWZpZXI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0
ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBQYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKLSAg
ICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXJJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5h
dGlvbiB9OyB9CiAKK3ByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAgZW5jb2RlciA8
PCBtX2Rlc3RpbmF0aW9uOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBpZGVu
dGlmaWVyOwotICAgIGRlY29kZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlkZW50aWZpZXIp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFkZXN0
aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBQYWlu
dEZyYW1lRm9yTWVkaWE6OmNyZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9uKTsKLX0KLQot
Y2xhc3MgU3Ryb2tlUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VSZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBt
X2xpbmVXaWR0aChsaW5lV2lkdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflN0cm9rZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9saW5lV2lkdGg7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAg
ICAgZmxvYXQgbV9saW5lV2lkdGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBTdHJva2VSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJva2VSZWN0Ojpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7
Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0gICAgZGVjb2Rl
ciA+PiBsaW5lV2lkdGg7Ci0gICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGluZVdp
ZHRoKTsKLX0KLQogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VJ
bmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlubGluZVBhdGgg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0
IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxp
bmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERh
dGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQ
YXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0
aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERhdGEg
bV9wYXRoRGF0YTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUlu
bGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxTdHJva2VJbmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAgIGRl
Y29kZXIgPj4gcGF0aERhdGE7Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92
ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQog
Ci1jbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZVBh
dGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBh
dGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTdHJva2VQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBTdHJva2VQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3Zl
KHBhdGgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChw
YXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUGF0aCgp
OworICAgIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0
aCkKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8U3Ryb2tlUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6
CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzA1
MCw3MjEgKzI0OTcsMTE1IEBAIHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ry
b2tlUGF0aD4+IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
U3Ryb2tlUGF0aD4gU3Ryb2tlUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
T3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRo
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0cm9rZVBhdGg6
OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1j
bGFzcyBTdHJva2VFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUVs
bGlwc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTdHJva2VFbGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+
U3Ryb2tlRWxsaXBzZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgU3Ryb2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBk
ZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNs
YXNzIENsZWFyUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVhclJlY3Qgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6Q2xlYXJSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKwor
ICAgIENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJl
Y3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVjdCgpOworICAg
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAg
RmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgQ2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fcmVjdDsgfQotCiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2Rl
ciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBDbGVhclJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNpZiBVU0UoQ0cp
Ci1jbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwotCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJu
Pj4gZGVjb2RlKERlY29kZXImKTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsK
IAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBBcHBseVN0cm9rZVBhdHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQot
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+
PiBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBw
bHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6
IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QXBwbHlGaWxsUGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEFwcGx5RmlsbFBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkFwcGx5RmlsbFBhdHRlcm4oKTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBkZWNvZGUo
RGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6QXBwbHlGaWxsUGF0dGVybjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEFwcGx5RmlsbFBhdHRlcm4o
KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBBcHBseUZpbGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19
Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlGaWxsUGF0dGVy
bj4+IEFwcGx5RmlsbFBhdHRlcm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBw
bHlGaWxsUGF0dGVybjo6Y3JlYXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBwbHlEZXZpY2VT
Y2FsZUZhY3RvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ig
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRl
KGZsb2F0IHNjYWxlRmFjdG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKKyAgICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoKTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zY2FsZUZhY3RvcjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29kZShEZWNvZGVy
Jik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAg
ZmxvYXQgbV9zY2FsZUZhY3RvcjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2FsZUZhY3RvciB7
IDEgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV9zY2FsZUZhY3RvcjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxBcHBseURldmljZVNjYWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9y
OwotICAgIGRlY29kZXIgPj4gc2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURldmljZVNjYWxl
RmFjdG9yOjpjcmVhdGUoKnNjYWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fdHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTYXZlPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
VHJhbnNsYXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJv
dGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8U2NhbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExp
bmVDYXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZURhc2g6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxTZXRNaXRlckxpbWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFy
U2hhZG93PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PENsaXBPdXQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRo
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
SW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Rp
bGVkSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVk
SW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERy
YXdSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RHJhd1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0Zv
Y3VzUmluZ1BhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1
c1JpbmdSZWN0cz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCp0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbElubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Rmls
bElubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUGF0aD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
dHJva2VSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFU
SF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PFN0cm9rZUVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xlYXJSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNw
YXJlbmN5TGF5ZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5
TGF5ZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRl
bVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxB
cHBseVN0cm9rZVBhdHRlcm4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBs
eUZpbGxQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJ
dGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJdGVtPj4gSXRl
bTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRlbVR5cGU+IGl0
ZW1UeXBlOwotICAgIGRlY29kZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVtVHlwZSkKLSAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1UeXBlKSB7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNhdmU6OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpSZXN0b3JlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2NhbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRDVE06
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENvbmNhdGVuYXRl
Q1RNOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVTdHJva2VDb2xv
cjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0
cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0
U3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZUNh
cDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURhc2g6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVKb2luOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1pdGVyTGltaXQ6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93Ojpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBDbGlwUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZElt
YWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2VCdWZmZXI6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TmF0aXZl
SW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXR0
ZXJuOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UmVjdDo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdMaW5lOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBEcmF3RWxsaXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRHJhd1BhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbENvbXBvc2l0
ZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmls
bFJvdW5kZWRSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmls
bElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZp
bGxFbGxpcHNlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUHV0
SW1hZ2VEYXRhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gUGFpbnRGcmFtZUZvck1lZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IFN0cm9rZVJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VJbmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5saW5lUGF0aDo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2Fz
ZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVBh
dGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlRWxs
aXBzZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyUmVjdDo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBCZWdp
blRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBhdHRl
cm46OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlG
aWxsUGF0dGVybjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2Vu
ZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotfQorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhhbmRsZSk7CiAK
IH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQot
I2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRv
VmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1
cm4gb2JqZWN0LnByZWRpY2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0K
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0
ZW0sIGlzRHJhd2luZ0l0ZW0oKSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oVG9WYWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsg
cmV0dXJuIGl0ZW0udHlwZSgpID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9W
YWx1ZVR5cGVOYW1lOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShUcmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oUm90YXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNjYWxlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldENU
TSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNU
TSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVGaWxs
R3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5s
aW5lRmlsbENvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dElubGluZVN0cm9rZUNvbG9yKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldFN0cm9rZVRoaWNrbmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTZXRTdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShTZXRMaW5lQ2FwKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dExpbmVEYXNoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExp
bmVKb2luKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVy
TGltaXQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRHJhd0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEZpbGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oUHV0SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShTdHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGluZVBh
dGgpCi0jZW5kaWYKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJv
a2VQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVs
bGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJh
bnNwYXJlbmN5TGF5ZXIpCi0jaWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEFwcGx5U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShBcHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQogbmFtZXNw
YWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKaW5kZXggYmY1YjgzYjIyYzNmNGM3MjU4MWU2OGI5YTUyZDc3MzAyZDI4Mjk0ZS4uOTBlYmRl
NTVmODk3OTZhODExODc5ZGIwNzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRlcjo6flJlY29y
ZGVyKCkKIAogdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VE
YXRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3Jt
YXQpCiB7Ci0gICAgYXBwZW5kSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRh
OjpjcmVhdGUoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0
Rm9ybWF0KSk7CisgICAgYXBwZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdlRGF0
YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29u
dGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFu
Z2VGbGFncykKQEAgLTg3LDIxICs4NywyMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxp
bmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogdm9p
ZCBSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBjaGFuZ2VGbGFncykKIHsKICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdl
cyhjaGFuZ2VzLCBjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJ
dGVtKFNldFN0YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncykpOworICAg
ICAgICBhcHBlbmQ8U2V0U3RhdGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxp
c3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0
ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJv
a2VDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOwogCiAgICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ryb2tl
VGhpY2tuZXNzOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAg
ICAgICBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVt
KFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJ
bmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihjaGFuZ2VzLm1f
c3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBt
X2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoKmNo
YW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZp
bGxHcmFkaWVudD4oKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQogCiB2b2lkIFJl
Y29yZGVyOjp3aWxsQXBwZW5kSXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQpAQCAtMTM5LDI3ICsx
MzksMjcgQEAgdm9pZCBSZWNvcmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGEKIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJT
aGFkb3coKQogewotICAgIGFwcGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKKyAgICBh
cHBlbmQ8Q2xlYXJTaGFkb3c+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGlu
ZUNhcCBsaW5lQ2FwKQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3JlYXRlKGxpbmVD
YXApKTsKKyAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zm
c2V0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXksIGRh
c2hPZmZzZXQpKTsKKyAgICBhcHBlbmQ8U2V0TGluZURhc2g+KGRhc2hBcnJheSwgZGFzaE9mZnNl
dCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQog
ewotICAgIGFwcGVuZEl0ZW0oU2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworICAgIGFw
cGVuZDxTZXRMaW5lSm9pbj4obGluZUpvaW4pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0
OjpjcmVhdGUobWl0ZXJMaW1pdCkpOworICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0PihtaXRlckxp
bWl0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUg
c21vb3RoaW5nTW9kZSkKQEAgLTE2OSwxOSArMTY5LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1
bnNpCiAKIEltYWdlRHJhd1Jlc3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBh
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1h
Z2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1
bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUm
IHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdUaWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxE
cmF3VGlsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFj
aW5nLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNv
dXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25z
KSk7CisgICAgYXBwZW5kPERyYXdUaWxlZFNjYWxlZEltYWdlPihpbWFnZSwgZGVzdGluYXRpb24s
IHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRp
b25zKTsKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKQEAgLTE5
MCwyMyArMTkwLDIzIEBAIGJvb2wgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFtX2RlbGVn
YXRlIHx8ICFtX2RlbGVnYXRlLT5sb2NrUmVtb3RlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERy
YXdJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUo
aW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBl
bmQ8RHJhd05hdGl2ZUltYWdlPihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXR0ZXJu
OjpjcmVhdGUoaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgYXBwZW5kSXRlbShTYXZl
OjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPFNhdmU+KCk7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChtX3N0YXRlU3RhY2subGFzdCgpLmNsb25lRm9yU2F2ZSgpKTsKIH0KIApAQCAtMjIxLDI1ICsy
MjEsMjUgQEAgdm9pZCBSZWNvcmRlcjo6cmVzdG9yZSgpCiAgICAgLy8gSGF2ZSB0byBhdm9pZCBl
bGlkaW5nIG5lc3RlZCBTYXZlL1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFp
bnMgZHJhd2luZyBpdGVtcy4KICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8
PSBzdGF0ZVVzZWRGb3JEcmF3aW5nOwogCi0gICAgYXBwZW5kSXRlbShSZXN0b3JlOjpjcmVhdGUo
KSk7CisgICAgYXBwZW5kPFJlc3RvcmU+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5
KTsKLSAgICBhcHBlbmRJdGVtKFRyYW5zbGF0ZTo6Y3JlYXRlKHgsIHkpKTsKKyAgICBhcHBlbmQ8
VHJhbnNsYXRlPih4LCB5KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7
Ci0gICAgYXBwZW5kSXRlbShSb3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykpOworICAgIGFw
cGVuZDxSb3RhdGU+KGFuZ2xlSW5SYWRpYW5zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUp
OwotICAgIGFwcGVuZEl0ZW0oU2NhbGU6OmNyZWF0ZShzaXplKSk7CisgICAgYXBwZW5kPFNjYWxl
PihzaXplKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQpAQCAtMjQ4LDEzICsyNDgsMTMgQEAgdm9pZCBSZWNvcmRlcjo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47
CiAKICAgICBjdXJyZW50U3RhdGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBlbmRJ
dGVtKENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPENvbmNh
dGVuYXRlQ1RNPih0cmFuc2Zvcm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRlKCkuc2V0Q1RN
KHRyYW5zZm9ybSk7Ci0gICAgYXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFuc2Zvcm0pKTsK
KyAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVj
b3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKQEAgLTI2
NSwxNTggKzI2NSwxNTggQEAgQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7CisgICAgYXBw
ZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lkIFJlY29yZGVy
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRUcmFuc3BhcmVu
Y3lMYXllcjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
UmVjdDo6Y3JlYXRlKHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVuZDxEcmF3UmVj
dD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9p
bnQyKSk7CisgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZXNG
b3JUZXh0OjpjcmVhdGUoRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8RHJhd0xpbmVz
Rm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBlbmQ8RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RHJh
d0VsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdGg6OmNyZWF0
ZShwYXRoKSk7CisgICAgYXBwZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7
CisgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xv
cik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUmVjdHM6
OmNyZWF0ZShyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJhd0Zv
Y3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJl
Y29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Rmls
bFJlY3Q+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KEZpbGxSZWN0V2l0aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsKKyAgICBhcHBl
bmQ8RmlsbFJlY3RXaXRoQ29sb3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRl
KHJlY3QsIGdyYWRpZW50KSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihyZWN0
LCBncmFkaWVudCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxDb21w
b3NpdGVkUmVjdDo6Y3JlYXRlKHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CisgICAgYXBw
ZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSkpOworICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9y
LCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKSk7CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAo
cGF0aC5oYXNJbmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFw
cGVuZDxGaWxsSW5saW5lUGF0aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCi0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUGF0aDo6
Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJl
Y29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBl
bmQ8RmlsbEVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoU3Ryb2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpOworICAg
IGFwcGVuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0
YSgpKSk7CisgICAgICAgIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlubGluZURhdGEo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPFN0cm9rZVBh
dGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUVsbGlw
c2U6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpOworICAg
IGFwcGVuZDxDbGVhclJlY3Q+KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9pZCBSZWNvcmRl
cjo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5U3Ryb2tlUGF0
dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZEl0ZW0oQXBw
bHlGaWxsUGF0dGVybjo6Y3JlYXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigp
OwogfQogI2VuZGlmCiAKIHZvaWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOwotICAg
IGFwcGVuZEl0ZW0oQ2xpcDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcD4ocmVjdCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGFwcGVuZEl0ZW0oQ2xpcE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcE91
dD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
IHsKLSAgICBhcHBlbmRJdGVtKENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBw
ZW5kPENsaXBPdXRUb1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzLmludGVyc2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAgYXBw
ZW5kSXRlbShDbGlwUGF0aDo6Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAgYXBwZW5kPENs
aXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKQpAQCAtNDQ0LDE5ICs0NDQsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY28KIAogICAg
IGF1dG8gcmVjb3JkaW5nQ29udGV4dCA9IG1ha2VVbmlxdWU8RHJhd2luZ0NvbnRleHQ+KGRlc3Rp
bmF0aW9uLnNpemUoKSwgaW5pdGlhbENUTSk7CiAgICAgZHJhd2luZ0Z1bmN0aW9uKHJlY29yZGlu
Z0NvbnRleHQtPmNvbnRleHQoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6OmNyZWF0ZShkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFr
ZURpc3BsYXlMaXN0KCkpKTsKKyAgICBhcHBlbmQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0
aW5hdGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0KCkp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBhcHBlbmRJdGVtKFBh
aW50RnJhbWVGb3JNZWRpYTo6Y3JlYXRlKHBsYXllciwgZGVzdGluYXRpb24pKTsKKyAgICBhcHBl
bmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikK
IHsKICAgICAvLyBGSVhNRTogdGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGlu
dmFsaWRhdGUgYWxsIG9mIG91ciBjYWNoZWQgZXh0ZW50cy4KICAgICAvLyBBc3NlcnQgdGhhdCBp
dCdzIG9ubHkgY2FsbGVkIGVhcmx5IG9uPwotICAgIGFwcGVuZEl0ZW0oQXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcjo6Y3JlYXRlKGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgYXBwZW5kPEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I+KGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogRmxvYXRSZWN0IFJlY29y
ZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3ND
b250ZXh0OjpSb3VuZGluZ01vZGUpCkBAIC00NjUsMzAgKzQ2NSw2IEBAIEZsb2F0UmVjdCBSZWNv
cmRlcjo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNz
Q29udGV4dDo6CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoUmVmPERyYXdpbmdJdGVtPiYmIGl0ZW0pCi17Ci0gICAgRHJhd2lu
Z0l0ZW0mIG5ld0l0ZW0gPSBpdGVtLmdldCgpOwotICAgIGFwcGVuZEl0ZW0oV1RGTW92ZShpdGVt
KSk7Ci0gICAgdXBkYXRlSXRlbUV4dGVudChuZXdJdGVtKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
YXBwZW5kSXRlbShSZWY8SXRlbT4mJiBpdGVtKQotewotICAgIEl0ZW0mIG5ld0l0ZW0gPSBpdGVt
LmdldCgpOwotICAgIGF1dG8gdHlwZSA9IG5ld0l0ZW0udHlwZSgpOwotICAgIHdpbGxBcHBlbmRJ
dGVtT2ZUeXBlKHR5cGUpOwotICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkp
OwotICAgIGRpZEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnVw
ZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKE9wdGlv
bmFsPEZsb2F0UmVjdD4gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0KCkp
KQotICAgICAgICBpdGVtLnNldEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMocmVjdC52YWx1
ZSgpKSk7Ci0gICAgZWxzZSBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5nbG9i
YWxCb3VuZHMoKSkKLSAgICAgICAgaXRlbS5zZXRFeHRlbnQocmVjdC52YWx1ZSgpKTsKLX0KLQog
Ly8gRklYTUU6IHNoYXJlIHdpdGggU2hhZG93RGF0YQogc3RhdGljIGlubGluZSBmbG9hdCBzaGFk
b3dQYWludGluZ0V4dGVudChmbG9hdCBibHVyUmFkaXVzKQogewpAQCAtNTA4LDcgKzQ4NCw3IEBA
IEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgY29uc3QKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29sb3Igc2hhZG93
Q29sb3I7CiAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dF
eHRlbnQ9IGJvdW5kczsKKyAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsK
ICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93
RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CiAgICAg
ICAgIGJvdW5kcy51bml0ZShzaGFkb3dFeHRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKaW5kZXggOTJjMDUxM2E3ZjljNmJjYTUyNTA0NDhmMzA4M2ZkZTFjZDY2ZDg5
NC4uZmZlMTU5MWJhZmQ0OWRiMzNlOTQzZTk5YzFiYTE0Y2RiYzRjNjAyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgog
I2luY2x1ZGUgIlRleHRGbGFncy5oIgpAQCAtNDgsOCArNDksNiBAQCBzdHJ1Y3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdpbmdJ
dGVtOwotCiBjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNv
cmRlcik7CkBAIC0xNDgsMTUgKzE0NywzNCBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IHJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJdGVtPiYmKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgYXBwZW5k
KEFyZ3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoVDo6
aXRlbVR5cGUpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1UeXBl
KTsKKworICAgICAgICBpZiAoIVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKExJS0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRlbUV4
dGVudHMoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVtID0gVChz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRl
bS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBtX2Rpc3BsYXlM
aXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOwor
ICAgICAgICBlbHNlIGlmIChhdXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQorICAgICAg
ICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RG
OjpudWxsb3B0KTsKKyAgICB9CisKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1U
eXBlKTsKICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwotICAgIHZvaWQg
YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYpOwogCiAgICAgdm9p
ZCBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Um
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICBGbG9hdFJl
Y3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIHZv
aWQgdXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlw
Qm91bmRzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAK
aW5kZXggMTJiNWY2MmNjNDI0NTIxNDJkOGI5OGUyZGVmMjU0ZWUxMGQ3ZjE4Mi4uZDZiMWE5MjI1
NjYyNTBjNTIxY2Q2OTFkMzg5YjFkNTdjNGE0OGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlcGxheWVyLmNwcApAQCAtNTIsMjYgKzUyLDI2IEBAIHN0ZDo6dW5pcXVlX3B0cjxE
aXNwbGF5TGlzdD4gUmVwbGF5ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBib29sCiAgICAgaWYgKFVOTElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCiAgICAgICAgIHJlcGxh
eUxpc3QgPSBtYWtlVW5pcXVlPERpc3BsYXlMaXN0PigpOwogCi0gICAgYXV0byYgaXRlbXMgPSBt
X2Rpc3BsYXlMaXN0Lmxpc3QoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1tpXS5nZXQoKTsKLQotICAg
ICAgICBpZiAoIWluaXRpYWxDbGlwLmlzWmVybygpICYmIGlzPERyYXdpbmdJdGVtPihpdGVtKSkg
ewotICAgICAgICAgICAgY29uc3QgRHJhd2luZ0l0ZW0mIGRyYXdpbmdJdGVtID0gZG93bmNhc3Q8
RHJhd2luZ0l0ZW0+KGl0ZW0pOwotICAgICAgICAgICAgaWYgKGRyYXdpbmdJdGVtLmV4dGVudEtu
b3duKCkgJiYgIWRyYXdpbmdJdGVtLmV4dGVudCgpLmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7
Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8
ICJza2lwcGluZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQorI2lmICFMT0dfRElTQUJMRUQKKyAgICBzaXplX3QgaSA9IDA7
CisjZW5kaWYKKyAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBtX2Rpc3BsYXlMaXN0KSB7
CisgICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgZXh0ZW50ICYmICFleHRlbnQt
PmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
RGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVt
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJhcHBseWluZyAiIDw8IGkgPDwgIiAiIDw8
IGl0ZW0pOworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwg
ImFwcGx5aW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgaWYgKCFtX2RlbGVn
YXRlIHx8ICFtX2RlbGVnYXRlLT5hcHBseShpdGVtLCBtX2NvbnRleHQpKQogICAgICAgICAgICAg
aXRlbS5hcHBseShtX2NvbnRleHQpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxh
eUxpc3QpKQotICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5kSXRlbShjb25zdF9jYXN0PEl0
ZW0mPihpdGVtKSk7CisgICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKSB7Cisg
ICAgICAgICAgICByZXBsYXlMaXN0LT5hcHBlbmQoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRl
bS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICAgICAgcmVwbGF5TGlzdC0+YWRkRHJhd2lu
Z0l0ZW1FeHRlbnQoV1RGTW92ZShleHRlbnQpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIHJldHVybiByZXBsYXlMaXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVw
bGF5ZXIuaAppbmRleCA0MGNkMGZmMGQ0MTY4MGNmYzczZTUwNGRlY2ZjM2RlZjg3NzUzMjMzLi4w
NDVjYWNjZThhMDFjOGQ1ZGNiNjU4YzQwZDYzZTlhMzU4OWI1YjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBs
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNs
YXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkRlbGVnYXRlKCkg
eyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBhcHBseShJdGVtJiwgR3JhcGhpY3NDb250ZXh0Jikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5kbGUs
IEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgfTsKICAgICAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlci5oCmluZGV4IGIyNDc4MGNkN2IwNzQ0M2IxNTUwMjZjZjZiMTk4MWM4MjIyYmQ1
MGMuLjc4ZTI2NWRiZjU0ZTliZDI0YjlkNDFiNzM5MDA5NzAyMTQ5MWZhOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5o
CkBAIC0yNywxNCArMjcsMTcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1
ZGUgIkRlY29kZXIuaCIKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFn
ZUJ1ZmZlciA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgeworY2xh
c3MgUmVtb3RlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRl
bGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xp
ZW50IHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNvbmNy
ZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdl
QnVmZmVyOjpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjptX2Jh
Y2tlbmQ7CkBAIC03MCwxMCArNzMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGJvb2wgYXBwbHkoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKKyAgICBib29sIGFwcGx5KFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5cGUoKSA9PSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSkgewotICAgICAgICAg
ICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpQdXRJbWFnZURhdGEmPihpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSkgeworICAgICAgICAgICAgYXV0byYgcHV0SW1h
Z2VEYXRhSXRlbSA9IGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+
KCk7CiAgICAgICAgICAgICBwdXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5pbnB1dEZvcm1h
dCgpLCBwdXRJbWFnZURhdGFJdGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJdGVtLnNyY1Jl
Y3QoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0
Rm9ybWF0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTg0LDYg
Kzg3LDExNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmFwcGx5TWVkaWFJdGVtKGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAorICAgIE9wdGlvbmFs
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVj
b2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGUgdHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgICAgICByZXR1cm4g
ZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBsZW5ndGgsIGhh
bmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXI6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9y
VGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUlt
YWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Pihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0
YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsSW5s
aW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBz
ZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9S
RVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgs
IHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1cm4ge3sg
aGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZGYwZWQ0N2U1YmVm
ZDY3OTg0NmE0YzdmNTA2MjAxMzY2NDYwYjY4MC4uYzUwMDQ2NDE2MWYwM2VlZGQxODU2MjI4ZTEw
OGU4OTRhMzA4ODQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEw
IEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3Vy
Y2VJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXIpIHsKLSAgICAgICAgYXV0byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0
ZW0uZ2V0PERpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0
ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAoIWltYWdlQnVm
ZmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxp
c3Q6Okl0ZW0mIGl0ZW0sIEdyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBp
dGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmFwcGx5TWVkaWFJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlz
PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8mIG1lZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0
OjpQYWludEZyYW1lRm9yTWVkaWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0
ZW0uZ2V0PERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9j
ZXNzID0gZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQwLDE5ICsxMzksNDUgQEAgdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBSZW4KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlz
cGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1
c2hDb250ZXh0IGZsdXNoQ29udGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpKQotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5
TGlzdCk7CisgICAgYXV0byBkaXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlzdChb
Jl0gKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVy
KSAtPiB1aW50OF90KiB7CisgICAgICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IG1fc2hhcmVk
SXRlbUJ1ZmZlcnMudGFrZShpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0pOworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAgICAv
LyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNz
LgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVt
b3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOworICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBh
IG1lc3NhZ2UgY2hlY2sgdG8gdGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQorICAg
ICAgICBkaXNwbGF5TGlzdC0+c2V0SXRlbUJ1ZmZlckNsaWVudChzdGF0aWNfY2FzdDxBY2NlbGVy
YXRlZFJlbW90ZUltYWdlQnVmZmVyKj4oaW1hZ2VCdWZmZXIpKTsKKyAgICBlbHNlCisgICAgICAg
IGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVyQ2xpZW50KHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0
ZWRSZW1vdGVJbWFnZUJ1ZmZlcio+KGltYWdlQnVmZmVyKSk7CisKKyAgICBpbWFnZUJ1ZmZlci0+
Zmx1c2hEaXNwbGF5TGlzdCgqZGlzcGxheUxpc3QpOworCisgICAgaWYgKGZsdXNoQ29udGV4dCA9
PSBTaG91bGRGbHVzaENvbnRleHQ6OlllcykKKyAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoQ29u
dGV4dCgpOwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxp
c3RBbmRDb21taXQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwg
RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlJiBoYW5kbGUsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJl
c291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7
Ci0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgZmx1c2hEaXNw
bGF5TGlzdFdhc0NvbW1pdHRlZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7Ci0gICAgfQorICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dDo6Tm8pOworfQorCit2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIg
Zmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQoreworICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKTsKKyAgICBmbHVz
aERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVj
dCwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTE2OCw2ICsxOTMsMTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpyZWxlYXNlUmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHIKICAgICBtX3JlbW90ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6ZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUp
Cit7CisgICAgaWYgKGF1dG8gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxl
LmhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCisgICAgICAgIG1f
c2hhcmVkSXRlbUJ1ZmZlcnMuc2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc2hhcmVkTWVtb3J5KSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggMjg1ZTJmNzRiNGQ0ZmQ2ZTZhOGM1ZTkxMDI1
YTFjOTI2ZjVmZmIxNS4uMzA1MjA2YjVmYmYwYzFhYTExYjNlMTAyOTlmM2U1ZGZlODBhZDRlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiTWVzc2Fn
ZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5o
PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYzLDggKzY1LDggQEAgcHVibGljOgog
ICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
KSBjb25zdDsKIAogICAgIC8vIFJlbmRlcmluZyBvcGVyYXRpb25zLgotICAgIGJvb2wgYXBwbHlS
ZXNvdXJjZUl0ZW0oY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGFwcGx5TWVkaWFJdGVtKGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9v
bCBhcHBseVJlc291cmNlSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAK
ICAgICAvLyBNZXNzYWdlcyB0byBiZSBzZW50LgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNrZW5k
V2FzQ3JlYXRlZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcik7CkBAIC03Myw2ICs3NSw5IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91bGRG
bHVzaENvbnRleHQgOiBib29sIHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5TGlz
dChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0KTsKKwogICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKQEAgLTgzLDE0ICs4OCwxNiBAQCBwcml2YXRlOgogCiAgICAgLy8g
TWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIERpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAg
IHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBmbHVzaERpc3Bs
YXlMaXN0QW5kQ29tbWl0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiwgRGlzcGxheUxp
c3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7
CiAgICAgdm9pZCBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VEYXRh
UmVmZXJlbmNlJiYpPiYmKTsKICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkQ3JlYXRlU2hhcmVk
SXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25z
dCBTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSYpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBt
X3JlbW90ZVJlc291cmNlQ2FjaGU7CiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKKyAgICBIYXNoTWFwPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9y
eT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KaW5kZXggYTg4ZTBmYjYyNjI0OTE4
OWQ4ZjViM2EzOWI5YjY2NDI4NjIyY2FkMy4uYmI5MTVhYjE5NWFkMzc3NzIwYjY5MTUwYTNiZWMw
Yzk5M2M1YWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAg
LTIzLDExICsyMywxMiBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMgLT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCBOb3RSZWZDb3VudGVkIHsKLSAgICB2b2lkIENyZWF0ZUlt
YWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3Qo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQot
ICAgIHZvaWQgRmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNv
cmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JT
cGFjZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKKyAgICBGbHVzaERpc3BsYXlMaXN0KFdlYktpdDo6U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUgZGlzcGxheUxpc3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdEFu
ZENvbW1pdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJL
aXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
ICAgICBHZXRJbWFnZURhdGEoZW51bTp1aW50OF90IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+
IChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSBpbWFnZURhdGEpIFN5bmNocm9ub3VzCi0gICAgdm9p
ZCBSZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAgICBEaWRDcmVhdGVTaGFyZWRJdGVt
RGF0YShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmll
ciwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpCisgICAgUmVsZWFzZVJl
bW90ZVJlc291cmNlKFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA3MjY4NzJkNjhk
OTU3ZjA4OWI3NzFhM2Q1NTU5YTIzMTFkYjMwNWU2Li5jZGY2N2IyZjY4M2NjMjczYTFkMmQ1NTc4
MzBiMDFiNGZmODEyZjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkKQEAgLTIwOCw2ICsyMDgsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9k
ZWNsYXJlZCgpOgogICAgICAgICAnU3RyaW5nJywKICAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3Bh
Y2UnLAogICAgICAgICAnV2ViQ29yZTo6RGljdGF0aW9uQ29udGV4dCcsCisgICAgICAgICdXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6RHJhZ0FwcGxpY2F0aW9uRmxhZ3MnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVyJywK
QEAgLTU4Nyw2ICs1ODgsNyBAQCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAg
J0pTQzo6TWVzc2FnZVNvdXJjZSc6IFsnPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPidd
LAogICAgICAgICAnSW5zcGVjdG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlJzogWyc8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yVGFyZ2V0Lmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250ZW5k
Q2hhbm5lbDo6Q29ubmVjdGlvblR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4nXSwKKyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVm
ZmVySWRlbnRpZmllcic6IFsnPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4nXSwKICAgICAgICAgJ01l
ZGlhVGltZSc6IFsnPHd0Zi9NZWRpYVRpbWUuaD4nXSwKICAgICAgICAgJ01vbm90b25pY1RpbWUn
OiBbJzx3dGYvTW9ub3RvbmljVGltZS5oPiddLAogICAgICAgICAnU2Vjb25kcyc6IFsnPHd0Zi9T
ZWNvbmRzLmg+J10sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFhNzRkNjE1YWJkM2Y0YTMxODYyNTJmZjBmZGNiODcx
ZTcwZmE1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZShjb25zdCBEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmZvckVhY2hJdGVt
QnVmZmVyKFsmXSAoYXV0byYgaGFuZGxlKSB7CisgICAgICAgIG1fYnVmZmVycy5hcHBlbmQoeyBo
YW5kbGUuaWRlbnRpZmllciwgaGFuZGxlLmNhcGFjaXR5IH0pOworICAgIH0pOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0PiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZTo6Y3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYgYnVmZmVyUHJvdmlk
ZXIpIGNvbnN0Cit7CisgICAgRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGVzIGhhbmRsZXM7
CisgICAgaGFuZGxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYnVmZmVycy5zaXplKCkpOwor
ICAgIGZvciAoYXV0byYgW2lkZW50aWZpZXIsIGNhcGFjaXR5XSA6IG1fYnVmZmVycykgeworICAg
ICAgICBhdXRvKiBkYXRhID0gYnVmZmVyUHJvdmlkZXIoaWRlbnRpZmllcik7CisgICAgICAgIGlm
ICghZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGhhbmRsZXMu
dW5jaGVja2VkQXBwZW5kKHsgaWRlbnRpZmllciwgZGF0YSwgY2FwYWNpdHkgfSk7CisgICAgfQor
ICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4oV1RGTW92ZSho
YW5kbGVzKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3NWUxMTRmMjNi
YzhmYjhlNTdjZDkwZjY0YTMzYmUyNjJlMWYzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgKQEAgLTAsMCArMSw2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUgeworcHVibGljOgorICAgIHVzaW5nIEl0ZW1CdWZmZXJQcm92aWRlciA9IEZ1bmN0aW9uPHVp
bnQ4X3QqKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcik+OworCisg
ICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdD4gY3JlYXRlRGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYpIGNvbnN0
OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZT4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZShWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4mJiBidWZmZXJzKQorICAgICAgICA6IG1f
YnVmZmVycyhXVEZNb3ZlKGJ1ZmZlcnMpKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3Rk
OjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90
Pj4gbV9idWZmZXJzOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBtX2J1ZmZlcnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlv
bmFsPFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+PiBidWZm
ZXJzOworICAgIGRlY29kZXIgPj4gYnVmZmVyczsKKyAgICBpZiAoIWJ1ZmZlcnMpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqYnVmZmVycykg
fX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZDUyNzlmZTYy
Mjk2M2YwNzQ3MzhhYzFlZTU0YzM3NGRjYmU3YjUyNy4uMzQ5OTc1Y2VjMTAwYWEzMjVmODJmYzYx
NTBhNjc2OTFlYTEyZWMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xNzMsNiArMTczLDcgQEAgU2hhcmVk
L1NlcnZpY2VXb3JrZXJJbml0aWFsaXphdGlvbkRhdGEuY3BwCiBTaGFyZWQvU2Vzc2lvblN0YXRl
LmNwcAogU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAgQG5vLXVuaWZ5CiBTaGFyZWQvU2hhcmVh
YmxlUmVzb3VyY2UuY3BwCitTaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCiBTaGFy
ZWQvU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJs
ZVJlYWRPbmx5LmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFkNjNjMmIz
ZTI5ODc4NzdiYWYyZjU1ODhlNjdjMDA3NjM1YjE0ZTQuLmQwYTM4YjljNzdlM2M0YTZhZmI1NzVm
Nzg5ZWYyODAyYjYwZGFjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTg4Myw2ICsxODgzLDcgQEAKIAkJRjQ0REZFQjIxRTlFNzUy
RjAwMzhEMTk2IC8qIFdlYkljb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29u
VXRpbGl0aWVzLmggKi87IH07CiAJCUY0OEQyQTg1MjE1ODNBN0UwMEM2NzUyQiAvKiBBcHBLaXRT
UEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQy
QTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLzsgfTsKIAkJRjQ5NkE0MzExRjU4
QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3
IC8qIERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oICovOyB9OworCQlGNEE2RDZCQzI1NENBM0U5
MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oICovOyB9OwogCQlGNENCMDlFNTIyNUQ1QTA5MDA4OTE0
ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vic2l0
ZU1lZGlhU291cmNlUG9saWN5LmggKi87IH07CiAJCUY0RDVGNTFEMjA2MDg3QTEwMDM4QkJBOCAv
KiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRENUY1MTkyMDYwODdBMDAwMzhCQkE4IC8qIFdLVGV4
dElucHV0TGlzdFZpZXdDb250cm9sbGVyLmggKi87IH07CiAJCUY0RDVGNTFGMjA2MDg3QTEwMDM4
QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTFCMjA2MDg3QTEwMDM4QkJBOCAv
KiBXS1F1aWNrYm9hcmRMaXN0Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTU0ODYsNiArNTQ4
Nyw4IEBACiAJCUY0OEQyQTg0MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXBwS2l0U1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZB
NDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMw
MUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJh
Z0Ryb3BJbnRlcmFjdGlvblN0YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
NEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRBQzY1NUUyMkEzMTQwRTAwQTA1NjA3
IC8qIFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbTsg
cGF0aCA9IGlvcy9XZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0QjM3OEQwMjFEREJCQUIwMDk1QTM3OCAvKiBXZWJVbmRvU3Rl
cElELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwSUQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjRDQjA5RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJj
ZVBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYxOTMsNiArNjE5Niw4IEBACiAJCQkJMUE2NDIw
RTMxMkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5oICovLAogCQkJCTUxMjE3NDVF
MTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEyMTc0
NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8sCisJCQkJRjRBNkQ2
QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLywKKwkJ
CQlGNEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAq
LywKIAkJCQk4MzEzRjdFQTFGN0RBRTA0MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3Jl
LmNwcCAqLywKIAkJCQk4MzEzRjdFOTFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFz
aFN0b3JlLmggKi8sCiAJCQkJODMxM0Y3RTgxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2hUYWJsZS5jcHAgKi8sCkBAIC0xMTM2MCw2ICsxMTM2NSw3IEBACiAJCQkJNTEyMTc0NjEx
NjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTgzNDk0MjI0RUY0Njc4MDBCREM5QTggLyogU2hhcmVkQnVmZmVyQ29weS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkRDMThGRjZFRjJBMzEzMEMxMzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRhdGFS
ZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAv
KiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUx
MjA4OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0
QjREOUQxRTc2NUUwMDAwRDI3MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MzEzRjdFQzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFz
aFN0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXgg
YzBlYzFiYjEzMjllODk2ZjJjZjYxM2YzN2YzY2FlNDI1NjcxODcwZC4uNjk1MDBkNzgwMmUyNjM1
MWQ3ZTk1ODUxMWI5MTE0ZjY5YjE2ZWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
QEAgLTI3LDYgKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRl
ICJFbmNvZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RSZWNvcmRlci5oPgpAQCAtMzYsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgotY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpEZWxlZ2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1
YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKICAgICB1c2luZyBC
YXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT47CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6
Om1fYmFja2VuZDsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3
aW5nQ29udGV4dDsKQEAgLTc3LDYgKzgxLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSkpCiAgICAgewogICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOworICAgICAgICBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1
ZmZlckNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgp
LnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhmYWxzZSk7CiAgICAgfQogCiAgICAgYm9vbCBp
c1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBt
X3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CkBAIC0xODYsNiArMTkyLDExMCBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CiAgICAgfQogCisgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2Fw
YWNpdHkpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpCisgICAgICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHktPmNyZWF0ZUl0ZW1CdWZmZXIoY2FwYWNpdHkpOworCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IGVuY29kZUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5k
bGUgaXRlbSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaXRlbS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBP
dXRUb1BhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
UGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPigpKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpKTsKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0ZvY3VzUmluZ1JlY3RzPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0ltYWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFn
ZUJ1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPihpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29k
ZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPigpKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdQYXR0ZXJuOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2Rl
U2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3VGlsZWRJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdU
aWxlZEltYWdlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rl
cjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZElt
YWdlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZp
bGxDb21wb3NpdGVkUmVjdDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29k
ZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0Pihp
dGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0V2l0aENvbG9yOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4o
aXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdy
YWRpZW50OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
KyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNo
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldExpbmVEYXNoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6
ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0YXRlPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgICAgICByZXR1
cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlN0cm9rZVBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoPigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RGV2
aWNlU2NhbGVGYWN0b3I6CisjaWYgVVNFKENHKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
ZWFyUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
ZWFyU2hhZG93OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
Q2xpcDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBP
dXQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRl
bmF0ZUNUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6UmVzdG9yZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJvdGF0ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNhdmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTY2FsZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldENUTToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNr
bmVzczoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9r
ZUVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2VuZGlmCisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0Ogor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIHZvaWQgZGlkQXBwZW5kSXRlbU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGUgdHlwZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICh0eXBlID09IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IGQ1NTc4Yzk4MjAzOWU2YmFkNGQ1MWI4
ZDdiMTM4MGE3YTVhNWM4NGIuLjk0ZGJkYTRhNDE5ODJkNzYyMWEyZGQwNTU0NGU1NzFiMTUzYmNi
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTM0LDYg
KzM0LDggQEAKICNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKICNp
bmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTExNSwxMyArMTE3LDE1IEBAIFJl
ZlB0cjxJbWFnZURhdGE+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpmbHVzaERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1
c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdCh7IGRpc3BsYXlMaXN0IH0sIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMuY2xlYXIoKTsKIH0KIAogRGlzcGxheUxpc3RGbHVzaElk
ZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0QW5k
Q29tbWl0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAg
ICAgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgc2VudEZsdXNoSWRlbnRpZmllciA9IERpc3Bs
YXlMaXN0Rmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoZGlzcGxheUxp
c3QsIHNlbnRGbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoeyBkaXNwbGF5TGlzdCB9
LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLmNsZWFy
KCk7CiAgICAgcmV0dXJuIHNlbnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NCw2ICsxNTgs
MjMgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RX
YXNDb21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2NlbGVy
YXRlZFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hEaXNw
bGF5TGlzdChmbHVzaElkZW50aWZpZXIpOwogfQogCitEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhh
bmRsZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90
IGNhcGFjaXR5KQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFyZWRJ
dGVtQnVmZmVyU2l6ZSA9IDEgPDwgMTY7CisKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6YWxsb2NhdGUoc3RkOjptYXgoZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplLCBj
YXBhY2l0eSkpOworICAgIGlmICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgYXV0byBpZGVudGlmaWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpOworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIHNoYXJlZE1lbW9yeUhhbmRs
ZTsKKyAgICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShzaGFyZWRNZW1vcnlIYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKGlkZW50aWZpZXIs
IHsgV1RGTW92ZShzaGFyZWRNZW1vcnlIYW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9KSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5z
ZXQoaWRlbnRpZmllciwgc2hhcmVkTWVtb3J5LmNvcHlSZWYoKSk7CisKKyAgICByZXR1cm4geyBp
ZGVudGlmaWVyLCByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEo
KSksIHNoYXJlZE1lbW9yeS0+c2l6ZSgpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgKaW5kZXggZTk5ZTNkNzFjYTkyNjI2YTY5NjJjYzk0ODc3YTdjMTFiODVlZGJh
Ny4uMjMyM2Y4NzE3YmY0MmNlNTE0MTFkOGJhZTIyYzM0OGU3ZGFjMDVhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIgog
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjAsNiArNjEsNyBAQCBw
dWJsaWM6CiAgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOwogCiAgICAgUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5JiByZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVybiBt
X3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eTsgfQorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KTsKIAogICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlci4KICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04NSw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBpbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGZs
dXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdl
YkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAKKyAgICBIYXNoTWFwPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9y
eT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IG1f
cmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IHsgKnRoaXMgfTsKICAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDhmMjQ1ODU2MzVmNDcwODNkMWRi
MjdhNWIzOTY2NjVmMzE1ZWJjYjAuLjlmMjZhMjMwY2Y2OGIwYmY4ODA5MjhiN2NlZmJiZDg3Zjg1
MzQ0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluCkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBt
ZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7Ci0g
ICAgdm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBs
b2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxp
c3RXYXNDb21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElk
ZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBX
ZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1
c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlm
aWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCAzZjVhNzNi
ZWMzYmYyODZlNTI5ODFkZTQ4YjkwYzMxZDAxOWQ4YzNkLi4wZjlhNmU4ZjE5ZTFkOTg1NjlmZWQx
YmJjNDFkMDc2ODNlYWNmMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1
ZmZlci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDEzM2E1NDM1NDkzNWI3OWI4YmMwMTllZDRkMTMwYjUzYWRjMTE0NDcuLjU3MzAwODQ2
M2JmYjViZjI1MDE2ZDNmYWVjNmYzNTliNjlkZmY4NzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAyMC0xMC0zMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAg
ICAgICBbQ29uY3VycmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1z
IGRpcmVjdGx5IGludG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBzZXZlcmFsIGV4aXN0aW5nIChub24tR1BV
LXByb2Nlc3MpIGRpc3BsYXkgbGlzdCB0ZXN0cyB0byBhY2NvdW50IGZvciBhIHNsaWdodCB0d2Vh
ayBpbiB0aGUgZm9ybWF0IGluCisgICAgICAgIHdoaWNoIGRpc3BsYXkgbGlzdHMgYXJlIGR1bXBl
ZCBhcyB0ZXh0LiBNb3JlIHNwZWNpZmljYWxseSwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIG5v
dyBkdW1wZWQgYWZ0ZXIgZWFjaAorICAgICAgICBkcmF3aW5nIGl0ZW0sIHJhdGhlciB0aGFuIGJl
Zm9yZS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFu
c2Zvcm1zLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5
LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1j
bGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTA1ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgPGlucHV0IGRpc2FibGVkPiBkb2VzIG5vdCBmaXJl
IGNsaWNrIGV2ZW50cyBhZnRlciBkaXNwYXRjaEV2ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXgg
MzI4ODQ4MDYyNzAxOWQ1NDAyZDk0MjVmYzRhMTMxMzc3MGVjYjMxYS4uMTQ1MWIxOTI1M2MzMjM4
OTI4YmJkOWY1ZTVkZWJiOTI3NGM1MGQ1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtNiwxMCAr
Niw4IEBACiAgIChmaWxsLWNvbG9yICNDODAwMDApCiAgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zv
cm1zIDEpKQogKGZpbGwtcmVjdAotICAoZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCi0g
IChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCisgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1
NXg1MCkgZXh0ZW50IGF0ICgxMCwxNDApIHNpemUgNTV4NTApCiAoc2V0LWlubGluZS1maWxsLWNv
bG9yCiAgIChjb2xvciAjMDAwMEM4ODApKQogKGZpbGwtcmVjdAotICAoZXh0ZW50IGF0ICgzMCwx
MjApIHNpemUgNTV4NTApCi0gIChyZWN0IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkpCisgIChyZWN0
IGF0ICgzMCwzMCkgc2l6ZSA1NXg1MCkgZXh0ZW50IGF0ICgzMCwxMjApIHNpemUgNTV4NTApCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRv
dy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVz
LXNoYWRvdy1leHBlY3RlZC50eHQKaW5kZXggZTlmNTQwNDE3YmQ2ZTVkYzc3ODYxNWU1ZjM3OTQ5
NzZlNDE5NWY4ZC4uNTkwYjkzZjVjODkyY2FlMzdmNDI0NjA5YThmZTQ4MDMzZTY2ODM2OCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ct
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtc2hhZG93LWV4cGVjdGVkLnR4dApAQCAtOSw5ICs5LDggQEAKICAgKHNoYWRvdy1vZmZzZXQg
d2lkdGg9MTAgaGVpZ2h0PTIwKQogICAoc2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKIChm
aWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQog
ICAocmVjdCBhdCAoNTAsNTApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChj
b21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQor
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDMsNTApIHNpemUgMTM0eDEzNykKIChy
ZXN0b3JlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNs
dWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9l
eHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKaW5kZXggZTA0NTJhMTczYTFh
ZmUyMzdmNzI4ZDMwYmMyN2VjNjBlZWM5NjIzZC4uMjhjY2Y0YzAxODU5ZGUxOTBiMGE5YTI3ZmEy
ZmVjMDA2M2VkOGUxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVu
dC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0CkBAIC0xMSwx
MSArMTEsMTAgQEAKICAgKHNoYWRvdy1vZmZzZXQgd2lkdGg9MTAgaGVpZ2h0PTIwKQogICAoc2hh
ZG93cy11c2UtbGVnYWN5LXJhZGl1cyAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0
ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKICAgKHJlY3QgYXQgKDAsMCkg
c2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24g
c291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1h
bCkgZXh0ZW50IGF0ICg3LjE0LDAuMjApIHNpemUgMTg0LjU1eDE4NS42NSkKIChyZXN0b3JlKQog
KHNldC1jdG0KICAgKHNldC1jdG0ge209KCgxLjAwLDAuMDApKDAuMDAsMS4wMCkpIHQ9KDAuMDAs
MjIuMDApfSkpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlz
cGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRp
c3BheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCBiZDg3NmRmNDAzYTRhZGQwYmMzOTFmN2M2MmFj
MmI0YzNiY2Y3ZGEwLi5iYzE3YjUxMTQ5OWY4MjU2Yzk5MjkwZGFlODYxNGQ0ODk0Y2FmOWNjIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlz
dC1leHBlY3RlZC50eHQKQEAgLTMsMjkgKzMsMjQgQEAKICAgKHggMC4wMCkKICAgKHkgMC4wMCkp
CiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQp
CiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKGNvbG9yICMwMDgwMDApCiAgIChj
b21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQor
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAoc2V0
LXN0YXRlCiAgIChjaGFuZ2UtZmxhZ3MgMzI5NjApCiAgIChmaWxsLWNvbG9yICMwMDAwRkYpCiAg
IChzdHJva2Utc3R5bGUgMCkKICAgKHNob3VsZC1hbnRpYWxpYXMgMCkpCiAoZHJhdy1yZWN0Ci0g
IChleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAxMDR4
MikKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDAp
IGV4dGVudCBhdCAoMCwwKSBzaXplIDEwNHgyKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgw
LDEwMikgc2l6ZSAxMDR4MikKICAgKHJlY3QgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQotICAoYm9y
ZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0
ICgwLDEwMikgc2l6ZSAxMDR4MikKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXpl
IDJ4MTA0KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDJ4MTA0KQotICAoYm9yZGVyLXRoaWNrbmVz
cyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDApIHNpemUg
MngxMDQpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQogICAo
cmVjdCBhdCAoMTAyLDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQor
ICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQt
cmVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAt
Y2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dAppbmRleCBhZGRkMmNhNDI1MGMyNGEwYzllZTIyNTVk
NDI3NWE3NmY2MDQzZWVkLi5iYjU5M2QyMGY2ZGE2NDg2MjkyZDM2YzAyMjBlMmE5ZDg3MmY4MmI5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBl
ZC1yZWN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvcmVwbGF5
LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dApAQCAtMywxMSArMywxMCBAQCByZWNvcmRl
ZDoKICAgKHggMC4wMCkKICAgKHkgMC4wMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4
dGVudCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKHJlY3QgYXQgKDQxMiwwKSBzaXplIDEw
MHgxMDApCiAgIChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Ut
b3ZlcikKLSAgKGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRl
bnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAKIHJlcGxheWVkOgogKAo=
</data>
<flag name="review"
          id="429916"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413362</attachid>
            <date>2020-11-05 16:05:32 -0800</date>
            <delta_ts>2020-11-05 19:31:22 -0800</delta_ts>
            <desc>Address feedback</desc>
            <filename>bug-218406-20201105160531.patch</filename>
            <type>text/plain</type>
            <size>380326</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NDU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg1NDBlNTkzODA3Y2Ux
YmJlMzg3MDdiMGMwNWMxNjRkNmE1N2NlMS4uMTFjMmZlYTk0NTA4YzZjNTg5MGI3ZmI0NmM2YzUw
MzhhYjU4NzM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxMyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAg
ICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBkaXNwbGF5IGxpc3RzIChhbmQgZGlzcGxheSBsaXN0IGl0
ZW1zKSBpbiBwcmVwYXJhdGlvbiBmb3IgdXBjb21pbmcgY2hhbmdlcyB0byBhbGxvdyB0aGUKKyAg
ICAgICAgR1BVIGFuZCB3ZWIgcHJvY2Vzc2VzIHRvIGNvbmN1cnJlbnRseSByZWFkIGFuZCB3cml0
ZSBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCB3aGljaCBhbGxvd3MgdXMgdG8gYWNoaWV2ZQorICAg
ICAgICBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMgaW4gcGVyZm9ybWFuY2Ugb24gbWFueSBncmFw
aGljcyBiZW5jaG1hcmtzIGluIE1vdGlvbk1hcmsgYnkgcmVtb3Zpbmcgb3ZlcmhlYWQgaW52b2x2
ZWQKKyAgICAgICAgaW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgZGlzcGxheSBsaXN0
IGl0ZW1zIG92ZXIgSVBDLiBUbyBpbXBsZW1lbnQgdGhpcywgcmF0aGVyIHRoYW4gdXNpbmcgSVBD
IHRvIGVuY29kZQorICAgICAgICBhbmQgZGVjb2RlIGVhY2ggaXRlbSwgd2Ugd2lsbCBpbnN0ZWFk
IHN0b3JlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbiBtZW1vcnkgc2hhcmVkIGJldHdl
ZW4gdGhlIHdlYiBhbmQgR1BVCisgICAgICAgIHByb2Nlc3Nlcy4KKworICAgICAgICBUaGlzIHN0
cmF0ZWd5LCBvZiBjb3Vyc2UsIHdpbGwgbm90IHdvcmsgZm9yIGRpc3BsYXkgbGlzdCBpdGVtcyB0
aGF0IGNvbnRhaW4gcG9pbnRlcnMuIFVuZm9ydHVuYXRlbHksIHRoaXMKKyAgICAgICAgYWZmZWN0
cyBhbGwgZGlzcGxheSBsaXN0IGl0ZW1zIGF0IHRoZSBtb21lbnQsIHNpbmNlIGFsbCBpdGVtcyBh
cmUgc3ViY2xhc3NlcyBvZiBgRGlzcGxheUxpc3Q6Okl0ZW1gLCBhbmQKKyAgICAgICAgdGhlcmVm
b3JlIGNvbnRhaW4gdnRhYmxlIHBvaW50ZXJzLCBldmVuIGlmIGFsbCBtZW1iZXJzIGFyZSBwbGFp
biBkYXRhIHR5cGVzLiBUaHVzLCB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGJlaW5nCisgICAgICAg
IGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgaXRlbXMgZGlyZWN0bHkgaW4gc2hhcmVkIG1lbW9yeSBp
cyB0byByZW1vdmUgdGhpcyB2dGFibGUgcG9pbnRlciBieSBtYWtpbmcgZGlzcGxheSBsaXN0Cisg
ICAgICAgIGl0ZW1zIG5vIGxvbmdlciBpbmhlcml0IGZyb20gYERyYXdpbmdJdGVtYCBvciBgSXRl
bWAuCisKKyAgICAgICAgQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFyZSBiYWNrZWQgYnkgYFZl
Y3RvcjxSZWY8SXRlbT4+YDsgaG93ZXZlciwgdGhpcyBubyBsb25nZXIgd29ya3Mgb25jZSBub25l
IG9mIHRoZQorICAgICAgICBkaXNwbGF5IGxpc3QgaXRlbXMgYXJlIGRlc2NlbmRlZCBmcm9tIGEg
Y29tbW9uIGJhc2UgY2xhc3MuIFRvIGFkZHJlc3MgdGhpcywgd2UgaW50cm9kdWNlCisgICAgICAg
IGBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcmAsIHdoaWNoIGVuY2Fwc3VsYXRlcyBsb2dpYyB0byBt
YW5hZ2Ugb25lIG9yIG1vcmUgZGF0YSBzZWdtZW50cyB0aGF0IGNvbnRhaW4gZGlzcGxheQorICAg
ICAgICBsaXN0IGl0ZW0gZGF0YSAoaS5lLiBkaXNwbGF5IGxpc3QgaXRlbXMgc3RhY2tlZCBhZGph
Y2VudCB0byBlYWNoIG90aGVyIGluIG1lbW9yeSkuIERpc3BsYXkgbGlzdHMgbm93IGFwcGVuZAor
ICAgICAgICBpbmxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIGJ5IGNvbnN0cnVjdGluZyB0aGVzZSBp
dGVtcyBkaXJlY3RseSBpbnNpZGUgdGhlIGl0ZW0gYnVmZmVyIHVzaW5nIHBsYWNlbWVudC1uZXcu
CisKKyAgICAgICAgSG93ZXZlciwgbWFueSB0eXBlcyBvZiBkaXNwbGF5IGxpc3QgaXRlbXMgZG8g
bm90IGNvbnNpc3QgZW50aXJlbHkgb2YgaW5saW5lIGRhdGE7IHNvbWUgb2YgdGhlc2UgYXJlIG9i
dmlvdXMsCisgICAgICAgIHN1Y2ggYXMgYERyYXdJbWFnZWAsIGBEcmF3R2x5cGhzYCwgb3IgYFN0
cm9rZVBhdGhgIChzaW5jZSBhIGBQYXRoYCBtYXkgYmUgYXJiaXRyYXJpbHkgY29tcGxleCkuIE90
aGVyIG91dC1vZi0KKyAgICAgICAgbGluZSBpdGVtIHR5cGVzIGFyZSBsZXNzIG9idmlvdXM6IGZv
ciBpbnN0YW5jZSwgYEZpbGxSb3VuZGVkUmVjdGAgaXMgYW4gb3V0LW9mLWxpbmUgaXRlbSBkdWUg
dG8gdGhlIGZhY3QgdGhhdAorICAgICAgICB0aGUgY29sb3Igb2YgdGhlIHJlY3QgKGBGaWxsUm91
bmRlZFJlY3Q6Om1fY29sb3JgKSBtYXkgYmUgYW4gZXh0ZW5kZWQgY29sb3IsIHdoaWNoIHRoZW4g
Y29udGFpbnMgYSBwb2ludGVyLiBJbgorICAgICAgICB0aGVzZSBjYXNlcywgd2UgY2FuJ3Qgc2lt
cGx5IGVuY29kZSB0aGUgaXRlbSBpbiBzaGFyZWQgbWVtb3J5IGFuZCByZWFkIGl0IGluIHRoZSBH
UFUgcHJvY2Vzcywgc2luY2UgdGhlIHBvaW50ZXIKKyAgICAgICAgKGlmIGl0IHBvaW50ZWQgdG8g
YW55dGhpbmcgb3RoZXIgdGhhbiBudWxsIGluIHRoZSB3ZWIgcHJvY2Vzcykgd2lsbCBwb2ludCB0
byBhcmJpdHJhcnkgbWVtb3J5IGluIHRoZSBHUFUKKyAgICAgICAgcHJvY2Vzcy4gSW5zdGVhZCwg
d2UgY2FuIGxldmVyYWdlIG91ciBleGlzdGluZyBJUEMgaW5mcmFzdHJ1Y3R1cmUgaGVyZSBieSBl
bmNvZGluZyBlYWNoIG9mIHRoZXNlIG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFzIGRhdGEg
YW5kIGRlY29kaW5nIHRoZW0gZnJvbSB0aGlzIGRhdGEgaW4gdGhlIEdQVSBwcm9jZXNzLiBUbyBk
byB0aGlzLCB3ZSBkZWxlZ2F0ZSBvdXQgdG8gV2ViS2l0MiB0bworICAgICAgICBlbmNvZGUgb3V0
LW9mLWxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIHVzaW5nIFdlYktpdCdzIGBJUEM6OkVuY29kZXJg
LCBhbmQgcGFzcyBiYWNrIGEgYFNoYXJlZEJ1ZmZlcmAgd2hpY2ggd2UKKyAgICAgICAgdGhlbiBj
b3B5IGludG8gdGhlIGl0ZW0gYnVmZmVyLiBUaGlzIGRlbGVnYXRpb24gaGFwcGVucyB0aHJvdWdo
IHRoZSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgIGNsYXNzLCB3aGljaCBoYXMKKyAgICAgICAg
YW4gaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0Mi4gT24gdGhlIGRlY29kaW5nIHNpZGUgaW4gdGhl
IEdQVSBwcm9jZXNzLCB3ZSB0aGVuIGFzayBgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnRgIChpZgor
ICAgICAgICBzZXQpIHRvIGNvbnZlcnQgdGhpcyBlbmNvZGVkIGRhdGEgYmFjayBpbnRvIGEgZGlz
cGxheSBsaXN0IGl0ZW0uIEluIFdlYktpdDIsIHdlIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBh
bmQgdXNlCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGBJUEM6OkRlY29kZXJgIHRvIGRlY29k
ZSB0aGUgZGF0YSB3ZSBzZXJpYWxpemVkIGVhcmxpZXIuCisKKyAgICAgICAgSWYgbm8gY2xpZW50
IGlzIHNwZWNpZmllZCBvciB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVpcmUgY3VzdG9tIGVuY29k
aW5nL2RlY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0eXBlLCB3ZQorICAgICAgICBmYWxsIGJh
Y2sgdG8gY29uc3RydWN0aW5nIHRoZSBpdGVtIGRpcmVjdGx5IGluc2lkZSB0aGUgd3JpdGFibGUg
aXRlbSBidWZmZXIgZGF0YS4KKworICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byByZWFzb24g
YWJvdXQgdGhlc2UgbmV3IChpbmhlcml0YW5jZS1mcmVlKSBkaXNwbGF5IGxpc3QgaXRlbXMsIHdl
IGFkZGl0aW9uYWxseSBpbnRyb2R1Y2UKKyAgICAgICAgYEl0ZW1IYW5kbGVgLCB3aGljaCB3cmFw
cyBhIHBvaW50ZXIgdG8gYSBkaXNwbGF5IGxpc3QgaXRlbSBhbmQgcHJvdmlkZXMgc2V2ZXJhbCBo
ZWxwZXIgbWV0aG9kcy4gVGhlIGZpcnN0IGJ5dGUKKyAgICAgICAgb2YgZWFjaCBpdGVtIGhhbmRs
ZSBhbHdheXMgcG9pbnRzIHRvIGFuIGBJdGVtVHlwZWAsIGFuZCB0aGUgZm9sbG93aW5nIGBOYCBi
eXRlcyBjb250YWluIHRoZSBpdGVtIGl0c2VsZiwgd2hlcmUKKyAgICAgICAgYE5gIGlzIHRoZSBz
aXplIG9mIHRoZSBpdGVtIGNsYXNzLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1
c2UgYW4gYEl0ZW1IYW5kbGVgOgorCisgICAgICAgICAgICAgICAgYERpc3BsYXlMaXN0OjpJdGVt
VHlwZSB0eXBlID0gaXRlbUhhbmRsZS50eXBlKCk7YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50
IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAgICAgICAgICAgYGlmIChpdGVtSGFuZGxlLmlz
PFN0cm9rZVBhdGg+KCkpIHsuLi5gIChSZXBsYWNlcyBpczw+IGluIHRoZSBjdXJyZW50IG1vZGVs
KQorCisgICAgICAgICAgICAgICAgYGF1dG8mIHNldFN0YXRlSXRlbSA9IGl0ZW1IYW5kbGUuZ2V0
PFNldFN0YXRlPigpO2AgKFJlcGxhY2VzIGRvd25jYXN0PD4gaW4gdGhlIGN1cnJlbnQgbW9kZWwp
CisKKyAgICAgICAgICAgICAgICBgaXRlbUhhbmRsZS5hcHBseShteUdyYXBoaWNzQ29udGV4dCk7
YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAg
ICAgICAgICAgYGJvb2wgaXNEcmF3aW5nSXRlbSA9IGl0ZW1IYW5kbGUuaXNEcmF3aW5nSXRlbSgp
O2AgKFJlcGxhY2VzIGNoZWNrcyBmb3IgYGlzPERyYXdpbmdJdGVtPihpdGVtKWApCisKKyAgICAg
ICAgV2hlbiB3cml0aW5nIGRpc3BsYXkgbGlzdHMgZm9yIHRoZSBHUFUgcHJvY2VzcywgdGhlIHdy
aXRpbmcgY2xpZW50IChhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGApIHdpbGwgYmUgYXNrZWQK
KyAgICAgICAgdG8gcHJvdmlkZSBgSXRlbUJ1ZmZlckhhbmRsZWBzIHdoZXJlIHRoZSBpdGVtIGJ1
ZmZlciB3aWxsIHBsYWNlIGl0ZW0gZGF0YSAod2hldGhlciBlbmNvZGVkLCBvciBhcyBhbiBpbmxp
bmUKKyAgICAgICAgb2JqZWN0KS4gSG93ZXZlciwgd2hlbiB1c2luZyBkaXNwbGF5IGxpc3RzIG91
dHNpZGUgb2YgdGhpcyBjb250ZXh0IChlLmcuIGluIG90aGVyIHBhcnRzIG9mIFdlYkNvcmUsIHN1
Y2ggYXMgdGhlCisgICAgICAgIGdseXBoIGRyYXdpbmcgY2FjaGUpLCB3ZSBkb24ndCBoYXZlIGEg
YEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YC4gVG8gaGFuZGxlIHRoaXMsIHRoZSBpdGVtIGJ1ZmZl
ciBpbnN0ZWFkCisgICAgICAgIGFsbG9jYXRlcyBpdHMgb3duIChub24tc2hhcmVkLW1lbW9yeSkg
YnVmZmVycywgd2hpY2ggaXQgbWFuYWdlcyBhbmQgZGVsZXRlcyB3aGVuIGl0IGlzIGRvbmUuIElm
IGFueSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIHRo
ZXNlIGJ1ZmZlcnMsIGBJdGVtQnVmZmVyYCB3aWxsIGFkZGl0aW9uYWxseSBjYWxsIHRoZWlyIGRl
c3RydWN0b3JzIHByaW9yIHRvCisgICAgICAgIGRlbGV0aW5nIHRoZXNlIGJ1ZmZlcnMuCisKKyAg
ICAgICAgU2VlIHBlci1jaGFuZ2UgY29tbWVudHMgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I9KToKKworICAgICAgICBJbXBsZW1lbnQgdGhl
IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvciBhbmQgbW92ZSBjb25zdHJ1Y3RvciBieSBleGNoYW5n
aW5nIG93bmVyc2hpcCBvZiB0aGUgaXRlbSBidWZmZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojphc1RleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wIGNvbnN0KToKKworICAgICAgICBB
ZGp1c3QgdGhlIGZvcm1hdCB3aGVuIHByaW50aW5nIGRpc3BsYXkgbGlzdHMgdG8gYFRleHRTdHJl
YW1gLiBOb3cgdGhhdCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgdHJhY2tlZCBvbiB0aGUKKyAg
ICAgICAgZGlzcGxheSBsaXN0IHJhdGhlciB0aGFuIGJlaW5nIG9uIGVhY2ggZHJhd2luZyBpdGVt
LCB3ZSBwcmludCB0aGVtIG91dCBhZnRlciBlYWNoIGl0ZW0gKGFzIG9wcG9zZWQgdG8gYmVpbmcg
aW4KKyAgICAgICAgdGhlIG1pZGRsZSBvZiBlYWNoIGl0ZW0pLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzIGNvbnN0KToKKworICAgICAg
ICBUYWxseSB1cCB0aGUgc2l6ZSBvZiB0aGUgZGlzcGxheSBsaXN0IGJ5IHRha2luZyB0aGUgc3Vt
IG9mIHRoZSBzaXplcyBvZiBlYWNoIHJlYWRvbmx5IHNlZ21lbnQsIGFzIHdlbGwgYXMgdGhlCisg
ICAgICAgIHdyaXRhYmxlIGJ1ZmZlciBzaXplLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmlzRW1wdHkgY29uc3QpOgorCisgICAgICAgIEEgRGlzcGxheUxp
c3QgaXMgZW1wdHkgaWYgaXQgY29udGFpbnMgbm8gaXRlbSBkYXRhOiBpbiBvdGhlciB3b3Jkcywg
dGhlcmUgYXJlIG5vIHJlYWRvbmx5IGJ1ZmZlciBzZWdtZW50cywgYW5kCisgICAgICAgIHRoZXJl
IGlzIGFsc28gbm90aGluZyB3cml0dGVuIHRvIHRoZSB3cml0YWJsZSBidWZmZXIgc2VnbWVudC4K
KworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1
ZmZlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgdG8gaXRl
cmF0ZSBvdmVyIGVhY2ggSXRlbUJ1ZmZlckhhbmRsZSBpbiB0aGUgZGlzcGxheSBsaXN0LiBUaGlz
IGluY2x1ZGVzIGFsbCByZWFkb25seSBoYW5kbGVzLCBhbmQKKyAgICAgICAgdGhlbiB0aGUgd3Jp
dGFibGUgaGFuZGxlIChpZiBpdCBleGlzdHMpLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk6CisKKyAgICAg
ICAgQWRkIGFuIG9wdGlvbiB0byBhbGxvdyB0aGUgZGlzcGxheSBsaXN0IHRvIHRyYWNrIGRyYXdp
bmcgaXRlbSBleHRlbnRzLiBDdXJyZW50bHksIGRpc3BsYXkgbGlzdHMgYWx3YXlzIHRyYWNrCisg
ICAgICAgIGV4dGVudHMgZm9yIGRyYXdpbmcgaXRlbXM7IGhvd2V2ZXIsIHdoZW4gcHJvcGFnYXRp
bmcgZGlzcGxheSBsaXN0cyB0byB0aGUgR1BVIHByb2Nlc3MgZm9yIHBsYXliYWNrLCB0aGVzZQor
ICAgICAgICBleHRlbnRzIHdlcmUgbmV2ZXIgc2VudCBhbG9uZyB3aXRoIElQQywgYW5kIHNvIHRo
aXMgZW5kZWQgdXAganVzdCBiZWluZyB1bm5lY2Vzc2FyeSB3b3JrLiBBZGRpdGlvbmFsbHksIHRo
ZQorICAgICAgICBpbml0aWFsIGNsaXAgaW4gdGhlIEdQVSBwcm9jZXNzIGlzIGFsc28gbmV2ZXIg
c2V0LCBzbyBjb21wdXRpbmcgdGhlc2UgZXh0ZW50cyBuZXZlciBoZWxwZWQuCisKKyAgICAgICAg
VGhhdCBzYWlkLCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgc3RpbGwgcHJpbnRlZCBvdXQgZm9y
IHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhpcworICAgICAg
ICBsb2dpYyBpbnRhY3Q7IHRoaXMgcmVmYWN0b3Jpbmcgb25seSBkaXNhYmxlcyBleHRlbnQgY29t
cHV0YXRpb24gZm9yIGRpc3BsYXkgbGlzdHMgYmVpbmcgc2VudCB0byB0aGUgR1BVIHByb2Nlc3MK
KyAgICAgICAgdmlhIHJlbW90ZSBpbWFnZSBidWZmZXJzLiBJbiBhIGZ1dHVyZSBwYXRjaCwgd2Ug
Y291bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0IGRyYXdpbmcgaXRlbXMgY29udGFpbiBleHRlbnQg
cmVjdHMKKyAgICAgICAgYXMgaW5saW5lIGRhdGEgdGhhdCBjYW4gYmUgY29uc3VsdGVkIGluIHRo
ZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjphcHBlbmQpOgorCisgICAgICAgIERpc3BsYXkgbGlzdCBpdGVtcyBhcmUgbm8gbG9uZ2Vy
IGNvbnN0cnVjdGVkIGFoZWFkIG9mIHRpbWUsIGFuZCB0aGVuIGFwcGVuZGVkIHRvIHRoZSBkaXNw
bGF5IGxpc3QuIEluc3RlYWQsCisgICAgICAgIGBhcHBlbmRgIG5vdyB0YWtlcyB0aGUgdHlwZSBv
ZiB0aGUgaXRlbSB0byBhcHBlbmQgYXMgYSB0ZW1wbGF0ZSB0eXBlbmFtZSBhcmd1bWVudCwgYXMg
d2VsbCBhcyB0aGUgYXJndW1lbnRzIHRoYXQKKyAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGNvbnN0
cnVjdCB0aGUgaXRlbS4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVh
ckN1cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om1vdmVUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcik6
CisKKyAgICAgICAgSW1wbGVtZW50IGEgQysrIGl0ZXJhdG9yIGZvciBEaXNwbGF5TGlzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBjb2RlIGxpa2UgdGhpczoKKyAgICAgICAgYGBg
CisgICAgICAgIC8vIFN1cHBvc2UgZGlzcGxheUxpc3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0LgorICAgICAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBk
aXNwbGF5TGlzdCkgeworICAgICAgICAgICAgICAgIC8vIERvIHRoaW5ncyB3aXRoIGl0ZW0sIHdo
aWNoIGlzIGEgRGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUuCisgICAgICAgICAgICAgICAgLy8gTWF5
YmUgZG8gdGhpbmdzIHdpdGggZXh0ZW50LCB3aGljaCBpcyBhbiBPcHRpb25hbDxGbG9hdFJlY3Q+
LgorICAgICAgICB9CisgICAgICAgIGBgYAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp+
aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjplbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVm
ZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Omxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAg
IFJlbW92ZSB0aGUgYWJpbGl0eSB0byBgZW5jb2RlYCBhbmQgYGRlY29kZWAgZGlzcGxheSBsaXN0
cywgZm9yIHRoZSB0aW1lIGJlaW5nLiBGb3IgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUK
KyAgICAgICAgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzLCB3ZSBub3cgdXNlIGBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZWAuCisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dCB0aGUgZXh0YW50IGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIGRpc3BsYXkgbGlzdCBpdGVtIHdp
bGwgYmUgYnJva2VuIGZvciB0aGUKKyAgICAgICAgdGltZSBiZWluZy4gSW4gYSBmb2xsb3d1cCBw
YXRjaCwgSSBwbGFuIHRvIHJlaW1wbGVtZW50IGBEaXNwbGF5TGlzdDo6ZW5jb2RlYCBhbmQgYGRl
Y29kZWAgaW4gdGhlIG5ldyBpbmxpbmUgaXRlbQorICAgICAgICBtb2RlbCBieSBlbmNvZGluZyBl
YWNoIGl0ZW0gKGVpdGhlciBhcyBpbmxpbmUgZGF0YSBvciB2aWEgYElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0YCkuIEhvd2V2ZXIsIHRoaXMgaXMKKyAgICAgICAgY29udGluZ2VudCBv
biBhbGwgZGlzcGxheSBsaXN0IGl0ZW0gdHlwZXMgKGUuZy4gYERyYXdJbWFnZWAgYW5kIGBEcmF3
R2x5cGhgKSBub3QgcmVseWluZyBvbiBgSVBDOjpBdHRhY2htZW50YAorICAgICAgICBmb3IgZW5j
b2RpbmcsIHNvIHN1cHBvcnQgZm9yIGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIHdpbGwgbmVlZCB0
byB3YWl0IHVudGlsIGFmdGVyIGZvbnRzIGFuZCBpbWFnZXMgYXJlIHdvcmtpbmcuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorCisgICAgICAgIENoYW5nZSB0aGVzZSB0byB1c2UgdGhlIG5ldyB0ZW1wbGF0ZWQgYERpc3Bs
YXlMaXN0OjphcHBlbmRgIG1ldGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnRha2VEaXNwbGF5TGlzdCk6CisKKyAgICAg
ICAgVXNlIGBzdGQ6OmV4Y2hhbmdlYCBpbnN0ZWFkIG9mIGBXVEZNb3ZlYC4gVGhpcyBpcyBhY3R1
YWxseSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIChpLmUuIG5vCisg
ICAgICAgIGxlYWtzIG9yIGRvdWJsZS1mcmVlaW5nKSwgc2luY2UgdGhlIGBEaXNwbGF5TGlzdGAg
aW5zdGFuY2UgdGhhdCBpcyBiZWluZyBtb3ZlZCBmcm9tIG5lZWRzIHRvIGJlIGVtcHR5IHNvIHRo
YXQgaXQKKyAgICAgICAgZG9lcyBub3QgdHJ5IHRvIGNhbGwgZGVzdHJ1Y3RvcnMgb24gdGhlIGl0
ZW1zIGZvcm1lcmx5IGluc2lkZSBvZiBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisKKyAgICAgICAgQWRkIGhl
bHBlciBtZXRob2RzIHRvIGFwcGx5IGEgZGlzcGxheSBsaXN0IGl0ZW0gdG8gYSBgR3JhcGhpY3ND
b250ZXh0YCBhbmQgY2FsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW0ncworICAgICAgICBkZXN0cnVj
dG9yLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
SGFuZGxlOjpjb3B5VG8gY29uc3QpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBtZXRob2QgdG8g
Y29weSB0aGUgaXRlbSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBoYW5kbGUgKGNhbGxpbmcgdGhlIGNv
cHkgY29uc3RydWN0b3Igb2YgdGhlIGl0ZW0gdHlwZQorICAgICAgICBpbiB0aGUgcHJvY2Vzcyku
IFRoaXMgaXMgdXNlZCB3aGVuIGNvcHlpbmcgYSB2YWxpZGF0ZWQgZGlzcGxheSBsaXN0IGl0ZW0g
aW50byB0aGUgdGVtcG9yYXJ5IGl0ZW0gYnVmZmVyIGluCisgICAgICAgIGBEaXNwbGF5TGlzdDo6
aXRlcmF0b3JgLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fYWxsb2NhdGVk
QnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gYG1fd3Jp
dGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2luZyBpbi1wcm9jZXNzIGBEaXNwbGF5
TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFpbnRpbmcpLCB0aGUgZGlzcGxheSBs
aXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcg
ZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBuZWVkcyB0byByZW1lbWJlciB0byBm
cmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdoZW4gYXBwZW5kaW5nLCBhbmQgbXVz
dCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAgICAgIGRpc3BsYXkgbGlzdCBpdGVt
cyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1Y3RvcnMpIHdoZW4gaXQgaXMgZmlu
aXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3JlYWRPbmx5QnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0YWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0dGVuTnVtYmVyT2ZCeXRlcyk6CisK
KyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFib3ZlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1C
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmZvckVh
Y2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0
b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlcldyaXRpbmdD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlCdWZmZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp1bmNoZWNrZWRBcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlzIGZpbGUgbWFrZSB1cCBtb3N0IG9m
IHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5
IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRoaXMgcGF0Y2g6CisgICAgICAgIC0g
QWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1UeXBlYCBvZiBlYWNoIGRpc3BsYXkg
bGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MKKyAg
ICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MgaXMg
YSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBlbmNvZGVgIGFuZCBgZGVjb2RlYCBt
ZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAgICAgICAgLSBSZW1vdmUgYWxsIG92
ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1wbGVtZW50cyBpbmRpdmlkdWFsIG1l
dGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAgIGBnbG9iYWxCb3VuZHNgIChpZiBh
cHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRzYCAoYWdhaW4sIGlmIGFwcGxpY2Fi
bGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBkdW1waW5nIGhlbHBlcnMsIHNvIHRo
YXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5nSXRlbWAgYmVmb3JlIGR1bXBpbmcg
ZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpE
cmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpJdGVtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OkRyYXdpbmdJ
dGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpTYXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpSZXN0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6
OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVk
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpEcmF3UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRy
YXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpEcmF3
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRp
YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJv
a2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxs
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRy
YW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRl
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2Nh
bGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6
U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5h
dGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
b25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpjb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENv
bG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6bG9j
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OnRoaWNrbmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVK
b2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNs
aXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlw
aHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpE
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvblJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Bh
dGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpyZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5l
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElu
bGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJv
a2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06
OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpn
bG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVu
dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Sm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRv
dzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdl
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Vs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBh
dGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0
cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5Rmls
bFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0ZWQuCisKKyAgICAg
ICAgRGVsZXRlIHRoZSBnZW5lcmljIGBJdGVtOjplbmNvZGVgIGFuZCBgSXRlbTo6ZGVjb2RlYCBt
ZXRob2RzLCBzaW5jZSBvbmx5IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBoYXZlCisg
ICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGZ1bmN0aW9ucyBub3cuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFj
dG9yKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgbWV0aG9kcyB0aGF0IGFwcGVuZCBkaXNwbGF5
IGxpc3QgaXRlbXMgZW4gbWFzc2UsIHN1Y2ggdGhhdCB0aGV5IGdvIGZyb20gdGhpczoKKworICAg
ICAgICAgICAgICAgIGBtX2Rpc3BsYXlMaXN0LmFwcGVuZChGb286OmNyZWF0ZShhcmcxLCBhcmcy
LCBhcmczKSk7YAorCisgICAgICAgIC4uLnRvIHRoaXM6CisKKyAgICAgICAgICAgICAgICBgbV9k
aXNwbGF5TGlzdC5hcHBlbmQ8Rm9vPihhcmcxLCBhcmcyLCBhcmczKTtgCisKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICBFeHRlbnRzIGFyZSBub3cgYXV0b21hdGljYWxseSB1cGRhdGVkICh1bmxlc3Mgb3RoZXJ3
aXNlIHNwZWNpZmllZCkgZm9yIGFueSBkcmF3aW5nIGl0ZW1zIHRoYXQgYXJlIGFwcGVuZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5k
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OnJl
cGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6
RGVsZWdhdGU6OmFwcGx5KToKKwogMjAyMC0xMS0wNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVhbiB1cCBTY3JvbGxpbmdTdGF0ZVRyZWUgc2V0
UHJvcGVydHlDaGFuZ2VzQWZ0ZXJSZWF0dGFjaCgpIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjM3ZDE3MTA5
OGQxNjFiYmVhM2UyODYzMDFjYmIyMjY4ZDczZDRhZS4uMWVkNGVjMGNmYzRiOTVjMWEyMDg5ZmNh
ZDZmNjU4NTA3MDNjZGYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MyBAQAorMjAyMC0xMS0wMyAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3Vy
cmVudCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGlu
dG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAg
ICAgICBBZGp1c3QgZm9yIGNoYW5nZXMgdG8gZGlzcGxheSBsaXN0cyBhbmQgZGlzcGxheSBsaXN0
IGl0ZW1zIGluIFdlYkNvcmUgKHNlZSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgZm9yIG1vcmUK
KyAgICAgICAgaW5mb3JtYXRpb24pLiBJbiBwYXJ0aWN1bGFyLCB3ZSBpbXBsZW1lbnQgdGhlIHJl
YWRpbmcgYW5kIHdyaXRpbmcgY2xpZW50IGhvb2tzIGNvbnN1bHRlZCBieSBJdGVtQnVmZmVyLCBh
bmQgd2UKKyAgICAgICAgYWxzbyBhZGQgYSB0ZW1wb3JhcnkgbWVjaGFuaXNtIHRoYXQgYWxsb3dz
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSAoaW4gdGhlIHdlYiBwcm9jZXNzKSB0byBzZW5k
IGRpc3BsYXkgbGlzdAorICAgICAgICBpdGVtIGRhdGEgdGhyb3VnaCBzaGFyZWQgbWVtb3J5IHRv
IHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIChpbiB0aGUgR1BVIHByb2Nlc3MpLiBUaGlzIHRl
bXBvcmFyeSBtZWNoYW5pc20KKyAgICAgICAgZG9lcyBub3QgYXR0ZW1wdCB0byBtYWtlIGFueSBy
ZWFkaW5nIG9yIHdyaXRpbmcgaW4gc2hhcmVkIG1lbW9yeSBjb25jdXJyZW50IGJldHdlZW4gdGhl
IEdQVSBhbmQgd2ViIHByb2Nlc3NlcywKKyAgICAgICAgYW5kIGV4aXN0cyBvbmx5IHRvIG1ha2Ug
c3VyZSB0aGF0IHJlbmRlcmluZyB3aXRoIHRoZSBHUFUgcHJvY2VzcyBzdGlsbCB3b3JrcyB1c2lu
ZyB0aGVzZSBuZXcgZGlzcGxheSBsaXN0IGl0ZW1zLgorCisgICAgICAgIEluIHRoZSBuZXh0IHBh
dGNoLCBJIHdpbGwgYWRkIGEgc2ltcGxlIGNvbmN1cnJlbnQgcmVhZGVyL3dyaXRlciBtb2RlbCBm
b3IgZGlzcGxheSBsaXN0IHByb2Nlc3NpbmcgYmV0d2VlbiB0aGUKKyAgICAgICAgd2ViIGFuZCBH
UFUgcHJvY2Vzc2VzLCBhbmQgKGluIGRvaW5nIHNvKSByZXZlcnQgbW9zdCBvZiB0aGUgY2hhbmdl
cyBpbiBgUmVtb3RlUmVuZGVyaW5nQmFja2VuZGAgYW5kCisgICAgICAgIGBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHlgIGJlbG93LgorCisgICAgICAgIFNlZSBjb21tZW50cyBiZWxvdyBmb3Ig
bW9yZSBkZXRhaWwuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpkZWNvZGVBbmRD
cmVhdGUpOgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
UmVzb3VyY2VJdGVtKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
YXBwbHlNZWRpYUl0ZW0pOgorCisgICAgICAgIFJlZmFjdG9yIHRoZXNlIHRvIHRha2UgYFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlYC4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjphcHBseURpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVt
RGF0YSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmg6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Ogor
ICAgICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRl
RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oOiBBZGRlZC4KKworICAgICAgICBBZGQgYSBXZWJLaXQyIGhlbHBlciBjbGFzcyB0aGF0
IHJlcHJlc2VudHMgZGlzcGxheSBsaXN0IGRhdGEgaW4gc2hhcmVkIG1lbW9yeSB0aGF0IGlzIHBy
b3BhZ2F0ZWQgZnJvbSB0aGUgd2ViCisgICAgICAgIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNz
LiBJbiB0aGUgbmV4dCBwYXRjaCwgdGhpcyBjbGFzcyB3aWxsIGJlIHJld3JpdHRlbiB0byBzdXBw
b3J0IGNvbmN1cnJlbnQgZGlzcGxheSBsaXN0CisgICAgICAgIHJlYWRpbmcgYW5kIHdyaXRpbmcs
IHdpdGggc3BlY2lhbGl6ZWQgc3ViY2xhc3NlcyBpbiBzZXJ2aWNlIG9mIGJvdGggdGhlIHJlYWRl
ciAoaS5lLiB0aGUgR1BVIHByb2Nlc3MpIGFuZCB0aGUKKyAgICAgICAgd3JpdGVyIChpLmUuIHRo
ZSB3ZWIgcHJvY2VzcykuCisKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5k
bGU6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlz
cGxheUxpc3RIYW5kbGU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZERp
c3BsYXlMaXN0SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVz
aERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVz
b3VyY2VDYWNoZVByb3h5LmNwcDoKKwogMjAyMC0xMS0wNSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFk
ZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggdGhlIGJ1aWxkIHdpdGgg
cmVjZW50IFNES3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA2ZjhhMDg3NjQ5OTA1NWJhNDhhZmVi
N2EzNGExZjRlODg2NWZmYTUyLi4xOTczOGUzNjdiNTZhY2QzNTE5NWM2NjNhYjM4NjI1MTFkYTE4
MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEyNTMsNiArMTI1Myw3IEBAIHNldChXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IGE0ZTczMTdiMzMwOTYwMmRmYTliNTU3MGQzNTZjOGJiYjMzYjg0NDMuLmY3
NDNkZGE1Yjc5MGRlZWY1ZmE1NGViYTVlNTE4YzMwZGFjZjdlODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xOTYzLDYgKzE5NjMsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVM
aWdodGluZ05FT04uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1U
eXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXll
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA4NmYxODU5OWJmNjMwMmM0MmFhM2RhYzc0ZDVhNDQyYWQ5NWJjYzlmLi42MjI3
YzZkODZiMTVjNzhjYzViODNlYmRkZGMyM2I5ODFiZWI5NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MjAyLDYgKzUyMDIs
NyBAQAogCQlGNEM1RjIwNzI0NzlFODgyMDBFOUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QzVGMjA1
MjQ3OUU3RUUwMEU5QjRGNSAvKiBDbGlwYm9hcmRJbWFnZVJlYWRlci5oICovOyB9OwogCQlGNEQw
NzU1ODIzNEQ4MjJEMDA4ODFFNzMgLyogQ2xpcGJvYXJkSXRlbURhdGFTb3VyY2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NkM0NDdBMjM0NjUzNUUw
MDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtRGF0YVNvdXJjZS5oICovOyB9OwogCQlGNEQwNzU1OTIz
NEQ4MjMzMDA4ODFFNzMgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ4MDIzNDY1
NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggKi87IH07
CisJCUY0RDQwQkM5MjU1NDYzQkYwMDcyMTM0OSAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjJCOEI1MjUz
RjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEQ0M0Q2NjIxODgwMzhCMDBFQ0VD
QUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0M0Q2NDIxODgwMkU2MDBFQ0VDQUMgLyogU2VyaWFs
aXplZEF0dGFjaG1lbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRjRFNTdFREMyMTNGM0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVD
aGFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEU1N0VEQTIxM0YzRjVGMDA0RUE5OEUgLyogRm9udEF0dHJpYnV0ZUNoYW5nZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNEU1N0VFMTIxM0Y0
MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9udE1hbmFnZXJFeHRyYXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RTU3RURGMjEzRjQzNEEwMDRFQTk4
RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjMzOCw2ICsxNjMzOSw4IEBACiAJCUYzRDQ2
MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vycm9ySGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0Vycm9ySGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGNDAzRTc4NTIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVudGVyS2V5SGludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
NDAzRTc4NjIzNjNCNThDMDAwNDQ1NTAgLyogRW50ZXJLZXlIaW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEVudGVyS2V5SGludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0
MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlzcGxheUxpc3RJdGVtQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUY0MjJCOEI2MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQyOTI2MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlh
UGxheWVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllcklkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcy
IC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBG
b250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQgLyogU3RhdGljUGFzdGVib2FyZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNQYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNzY0Nyw2ICsxNzY1MCw4IEBACiAJCQkJNTVDMEEyOTUyM0ZF
MkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwICovLAogCQkJCTcy
RUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8s
CiAJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUwNEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aCAqLywKKwkJCQlGNDIyQjhCNjI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmNwcCAqLywKKwkJCQlGNDIyQjhCNTI1M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlM
aXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdEl0ZW1zLmggKi8sCiAJCQkJRjQzNzdENTYyNTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlM
aXN0SXRlbVR5cGUuY3BwICovLApAQCAtMzUwODQsNiArMzUwODksNyBAQAogCQkJCUUxRUU4Qjk3
MjQxMzE5NTAwMEU3OTRENiAvKiBYUkV5ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRThCOEYy
NDEzMTk1MDAwRTc5NEQ2IC8qIFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxRUU4QjkyMjQxMzE5NTAwMEU3OTRENiAvKiBYUkhhbmRlZG5lc3MuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUY0RDQwQkM5MjU1NDYzQkYwMDcyMTM0OSAvKiBEaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUU4QjlGMjQxMzE5NTAwMEU3OTRENiAvKiBY
UklucHV0U291cmNlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUU4Qjk5MjQxMzE5NTAw
MEU3OTRENiAvKiBYUklucHV0U291cmNlc0NoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFMTJBOUY0QTI0OEE5OUUyMDAzRjA2QzggLyogWFJJbnRlcmFjdGlvbk1vZGUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAppbmRleCA5NjM1M2FkZWRmZjExZWQ1ZDQxNWFkNTdmZGZkYjRiMjgwZDUwNGRk
Li4wYjM1YWM2NGZhOGI5ZmZlMGM5NDQ4NWU5NzNmMjRjMmFhMGYzNDkwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTYz
LDEwICsxNjMsMTAgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBXRUJDT1JF
X0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3ND
b250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7CiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNz
Q29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51bSBDaGFuZ2UgOiB1aW50MzJfdCB7CiAgICAgICAg
IFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3QuY3BwCmluZGV4IGZmZDlkNmRkZmI2MGFjMWEwOTcyMmRmYWRjODJmMTE1
MzBlOTIwYTEuLjc0ODJjOTRhOWE4OGI3ZGVhMzczMjRmMjRiMTM5ZGZmNTU0MWVhMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAtMjYsOCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgogCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTQ4LDE3
ICs1MCw0MCBAQCB2b2lkIERpc3BsYXlMaXN0OjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCitE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJiBvdGhlcikKKyAgICA6IG1faXRl
bXMoc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zLCBudWxscHRyKSkKKyAgICAsIG1fZHJhd2lu
Z0l0ZW1FeHRlbnRzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kcmF3aW5nSXRlbUV4dGVudHMsIHsg
fSkpCit7Cit9CisKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdChJdGVtQnVmZmVySGFuZGxlcyYm
IGhhbmRsZXMpCisgICAgOiBtX2l0ZW1zKG1ha2VVbmlxdWU8SXRlbUJ1ZmZlcj4oV1RGTW92ZSho
YW5kbGVzKSkpCit7Cit9CisKK0Rpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsK
K0Rpc3BsYXlMaXN0Ojp+RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CisKK0Rpc3BsYXlMaXN0JiBE
aXNwbGF5TGlzdDo6b3BlcmF0b3I9KERpc3BsYXlMaXN0JiYgb3RoZXIpCit7CisgICAgbV9pdGVt
cyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0cik7CisgICAgbV9kcmF3aW5n
SXRlbUV4dGVudHMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7
IH0pOworICAgIHJldHVybiAqdGhpczsKK30KKwogdm9pZCBEaXNwbGF5TGlzdDo6Y2xlYXIoKQog
ewotICAgIG1fbGlzdC5jbGVhcigpOworICAgIGlmIChtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1z
LT5jbGVhcigpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmNsZWFyKCk7CiB9CiAKLWJvb2wg
RGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgY29uc3Qg
SXRlbSYgaXRlbSkKK2Jvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1bXBGb3JGbGFncyhBc1RleHRG
bGFncyBmbGFncywgSXRlbUhhbmRsZSBpdGVtKQogewogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkp
IHsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgaWYgKCEoZmxhZ3MgJiBB
c1RleHRGbGFnOjpJbmNsdWRlc1BsYXRmb3JtT3BlcmF0aW9ucykpIHsKLSAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHN0YXRlSXRlbSA9IGRvd25jYXN0PFNldFN0YXRlPihpdGVtKTsKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIHN0YXRlSXRlbSA9IGl0ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAg
ICAgICAgLy8gRklYTUU6IGZvciBub3csIG9ubHkgZHJvcCB0aGUgaXRlbSBpZiB0aGUgb25seSBz
dGF0ZS1jaGFuZ2UgZmxhZ3MgYXJlIHBsYXRmb3JtLXNwZWNpZmljLgogICAgICAgICAgICAgaWYg
KHN0YXRlSXRlbS5zdGF0ZSgpLm1fY2hhbmdlRmxhZ3MgPT0gR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04MywxMCArMTA4LDE0IEBAIGJvb2wgRGlzcGxheUxpc3Q6OnNob3VsZER1
bXBGb3JGbGFncyhBc1RleHRGbGFncyBmbGFncywgY29uc3QgSXRlbSYgaXRlbSkKIFN0cmluZyBE
aXNwbGF5TGlzdDo6YXNUZXh0KEFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewogICAgIFRleHRT
dHJlYW0gc3RyZWFtKFRleHRTdHJlYW06OkxpbmVNb2RlOjpNdWx0aXBsZUxpbmUsIFRleHRTdHJl
YW06OkZvcm1hdHRpbmc6OlNWR1N0eWxlUmVjdCk7Ci0gICAgZm9yIChhdXRvJiBpdGVtIDogbV9s
aXN0KSB7CisgICAgZm9yIChhdXRvIFtpdGVtLCBleHRlbnRdIDogKnRoaXMpIHsKICAgICAgICAg
aWYgKCFzaG91bGREdW1wRm9yRmxhZ3MoZmxhZ3MsIGl0ZW0pKQogICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cChzdHJlYW0pOwogICAg
ICAgICBzdHJlYW0gPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQor
ICAgICAgICAgICAgc3RyZWFtIDw8ICIgZXh0ZW50ICIgPDwgZXh0ZW50OwogICAgIH0KICAgICBy
ZXR1cm4gc3RyZWFtLnJlbGVhc2UoKTsKIH0KQEAgLTk2LDEwICsxMjUsMTEgQEAgdm9pZCBEaXNw
bGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBUZXh0U3RyZWFtOjpHcm91
cFNjb3BlIGdyb3VwKHRzKTsKICAgICB0cyA8PCAiZGlzcGxheSBsaXN0IjsKIAotICAgIHNpemVf
dCBudW1JdGVtcyA9IG1fbGlzdC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1JdGVtczsgKytpKSB7Ci0gICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMp
OwotICAgICAgICB0cyA8PCBpIDw8ICIgIiA8PCBtX2xpc3RbaV0uZ2V0KCk7CisgICAgZm9yIChh
dXRvIFtpdGVtLCBleHRlbnRdIDogKnRoaXMpIHsKKyAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBncm91cCh0cyk7CisgICAgICAgIHRzIDw8IGl0ZW07CisgICAgICAgIGlmIChpdGVtLmlz
RHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIHRzIDw8ICIgZXh0ZW50ICIgPDwgZXh0ZW50Owog
ICAgIH0KICAgICB0cy5zdGFydEdyb3VwKCk7CiAgICAgdHMgPDwgInNpemUgaW4gYnl0ZXM6ICIg
PDwgc2l6ZUluQnl0ZXMoKTsKQEAgLTEwOCwxMyArMTM4LDI3NSBAQCB2b2lkIERpc3BsYXlMaXN0
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogCiBzaXplX3QgRGlzcGxheUxpc3Q6OnNpemVJ
bkJ5dGVzKCkgY29uc3QKIHsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKGF1dG8m
IHJlZiA6IG1fbGlzdCkKLSAgICAgICAgcmVzdWx0ICs9IEl0ZW06OnNpemVJbkJ5dGVzKHJlZik7
CisgICAgcmV0dXJuIG1faXRlbXMgPyBtX2l0ZW1zLT5zaXplSW5CeXRlcygpIDogMDsKK30KKwor
Ym9vbCBEaXNwbGF5TGlzdDo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2l0ZW1z
IHx8IG1faXRlbXMtPmlzRW1wdHkoKTsKK30KKworSXRlbUJ1ZmZlciYgRGlzcGxheUxpc3Q6Oml0
ZW1CdWZmZXIoKQoreworICAgIGlmICghbV9pdGVtcykKKyAgICAgICAgbV9pdGVtcyA9IG1ha2VV
bmlxdWU8SXRlbUJ1ZmZlcj4oKTsKKyAgICByZXR1cm4gKm1faXRlbXM7Cit9CisKK3ZvaWQgRGlz
cGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNs
aWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3ZvaWQg
RGlzcGxheUxpc3Q6OnNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBpdGVtQnVmZmVyKCkuc2V0Q2xpZW50KGNsaWVudCk7Cit9CisKK3Zv
aWQgRGlzcGxheUxpc3Q6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRl
bUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGlmIChtX2l0ZW1z
KQorICAgICAgICBtX2l0ZW1zLT5mb3JFYWNoSXRlbUJ1ZmZlcihXVEZNb3ZlKG1hcEZ1bmN0aW9u
KSk7Cit9CiAKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBEaXNwbGF5TGlzdDo6c2V0VHJhY2tz
RHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wgdmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
aXRlbXMgfHwgbV9pdGVtcy0+aXNFbXB0eSgpKTsKKyAgICBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0
ZW50cyA9IHZhbHVlOwogfQogCit2b2lkIERpc3BsYXlMaXN0OjphcHBlbmQoSXRlbUhhbmRsZSBp
dGVtKQoreworICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
YXZlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNhdmU+KGl0ZW0uZ2V0PFNhdmU+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UmVzdG9yZT4o
aXRlbS5nZXQ8UmVzdG9yZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPFRyYW5zbGF0ZT4oaXRlbS5nZXQ8VHJhbnNsYXRlPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Um90YXRlPihp
dGVtLmdldDxSb3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNjYWxlPihpdGVtLmdldDxTY2FsZT4oKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+
KGl0ZW0uZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06
CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0Q1RNPihpdGVtLmdldDxTZXRDVE0+KCkpOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0uZ2V0PFNldElubGluZUZpbGxHcmFkaWVu
dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENv
bG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbS5nZXQ8U2V0SW5saW5l
U3Ryb2tlQ29sb3I+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0uZ2V0PFNldFN0
cm9rZVRoaWNrbmVzcz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0U3RhdGU+KGl0ZW0uZ2V0PFNldFN0YXRlPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVDYXA+
KGl0ZW0uZ2V0PFNldExpbmVDYXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVEYXNoPihpdGVtLmdldDxTZXRMaW5lRGFz
aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U2V0TGluZUpvaW4+KGl0ZW0uZ2V0PFNldExpbmVKb2luPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldE1pdGVyTGlt
aXQ+KGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFy
U2hhZG93OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyU2hhZG93PihpdGVtLmdldDxDbGVh
clNoYWRvdz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxDbGlwPihpdGVtLmdldDxDbGlwPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0
OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXBPdXQ+KGl0ZW0uZ2V0PENsaXBPdXQ+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8
Q2xpcE91dFRvUGF0aD4oaXRlbS5nZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xpcFBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcFBhdGg+KGl0ZW0uZ2V0
PENsaXBQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsgLy8gRklY
TUU6IFN1cHBvcnQgdGhlIGFiaWxpdHkgdG8gY2xvbmUgZGlzcGxheSBsaXN0cyAodGhpcyBpcyBj
dXJyZW50bHkgb25seSB1c2VkIGZvciBkaXNwbGF5IGxpc3QgdHJhY2tpbmcpLgorICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdH
bHlwaHM+KGl0ZW0uZ2V0PERyYXdHbHlwaHM+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJ
bWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3SW1hZ2U+KGl0ZW0uZ2V0PERyYXdJbWFn
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0uZ2V0PERyYXdUaWxlZEltYWdlPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbS5nZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0uZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5k
PERyYXdOYXRpdmVJbWFnZT4oaXRlbS5nZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0dGVy
bj4oaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0
OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdSZWN0PihpdGVtLmdldDxEcmF3UmVjdD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJh
d0xpbmU+KGl0ZW0uZ2V0PERyYXdMaW5lPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0u
Z2V0PERyYXdMaW5lc0ZvclRleHQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcj4oaXRlbS5nZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0VsbGlw
c2U+KGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UGF0aD4oaXRlbS5nZXQ8RHJhd1BhdGg+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICByZXR1cm4g
YXBwZW5kPERyYXdGb2N1c1JpbmdQYXRoPihpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgorICAgICAgICByZXR1cm4g
YXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxG
aWxsUmVjdD4oaXRlbS5nZXQ8RmlsbFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aENvbG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0V2l0aENvbG9yPihp
dGVtLmdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJl
Y3RXaXRoR3JhZGllbnQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsQ29tcG9zaXRlZFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbENvbXBvc2l0
ZWRSZWN0PihpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUm91bmRlZFJl
Y3Q+KGl0ZW0uZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0
aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsSW5saW5lUGF0aD4oaXRlbS5nZXQ8RmlsbElu
bGluZVBhdGg+KCkpOworI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8RmlsbFBhdGg+KGl0ZW0uZ2V0PEZpbGxQYXRoPigpKTsKKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsRWxs
aXBzZT4oaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlB1dElt
YWdlRGF0YToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxQdXRJbWFnZURhdGE+KGl0ZW0uZ2V0PFB1
dEltYWdlRGF0YT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbS5nZXQ8UGFpbnRG
cmFtZUZvck1lZGlhPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAg
ICByZXR1cm4gYXBwZW5kPFN0cm9rZVJlY3Q+KGl0ZW0uZ2V0PFN0cm9rZVJlY3Q+KCkpOworI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGlu
ZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbS5nZXQ8
U3Ryb2tlSW5saW5lUGF0aD4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQ
YXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZVBh
dGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8U3Ryb2tlRWxsaXBzZT4oaXRlbS5nZXQ8U3Ryb2tlRWxsaXBzZT4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPENsZWFyUmVj
dD4oaXRlbS5nZXQ8Q2xlYXJSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI+KGl0ZW0uZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPEVuZFRyYW5z
cGFyZW5jeUxheWVyPihpdGVtLmdldDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7CisjaWYgVVNF
KENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5U3Ryb2tlUGF0dGVy
bj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPihpdGVtLmdldDxBcHBseUZpbGxQYXR0ZXJuPigp
KTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbS5nZXQ8QXBw
bHlEZXZpY2VTY2FsZUZhY3Rvcj4oKSk7CisgICAgfQorfQorCitib29sIERpc3BsYXlMaXN0Ojpp
dGVyYXRvcjo6YXRFbmQoKSBjb25zdAoreworICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvJiBpdGVtcyA9ICptX2Rpc3BsYXlM
aXN0Lm1faXRlbXM7CisgICAgYXV0byBlbmRDdXJzb3IgPSBpdGVtcy5tX3dyaXRhYmxlQnVmZmVy
LmRhdGEgKyBpdGVtcy5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgIHJldHVybiBtX2N1cnNv
ciA9PSBlbmRDdXJzb3I7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp1cGRhdGVD
dXJyZW50SXRlbSgpCit7CisgICAgY2xlYXJDdXJyZW50SXRlbSgpOworCisgICAgaWYgKGF0RW5k
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3Qu
bV9pdGVtczsKKyAgICBhdXRvIGl0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KG1fY3Vy
c29yWzBdKTsKKyAgICBpZiAoaXNEcmF3aW5nSXRlbShpdGVtVHlwZSkgJiYgIW1fZGlzcGxheUxp
c3QubV9kcmF3aW5nSXRlbUV4dGVudHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fY3VycmVudEV4
dGVudCA9IG1fZGlzcGxheUxpc3QubV9kcmF3aW5nSXRlbUV4dGVudHNbbV9kcmF3aW5nSXRlbUlu
ZGV4XTsKKyAgICAgICAgbV9kcmF3aW5nSXRlbUluZGV4Kys7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY3VycmVudEV4dGVudCA9IFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8qIGNsaWVudCA9IGl0
ZW1zLm1fcmVhZGluZ0NsaWVudDsKKyAgICBhdXRvIHNpemVPZlR5cGVBbmRJdGVtID0gc2l6ZU9m
SXRlbUluQnl0ZXMoaXRlbVR5cGUpICsgc2l6ZW9mKEl0ZW1UeXBlKTsKKyAgICBtX2N1cnJlbnRC
dWZmZXJGb3JJdGVtID0gc2l6ZU9mVHlwZUFuZEl0ZW0gPD0gc2l6ZU9mRml4ZWRCdWZmZXJGb3JD
dXJyZW50SXRlbSA/IG1fZml4ZWRCdWZmZXJGb3JDdXJyZW50SXRlbSA6IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGZhc3RNYWxsb2Moc2l6ZU9mVHlwZUFuZEl0ZW0pKTsKKyAgICBpZiAoIWlz
SW5saW5lSXRlbShpdGVtVHlwZSkgJiYgY2xpZW50KSB7CisgICAgICAgIGF1dG8gc2l6ZU9mRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4obV9jdXJzb3IgKyBzaXplb2YoSXRlbVR5cGUp
KVswXTsKKyAgICAgICAgYXV0byogc3RhcnRPZlBhZGRpbmcgPSBtX2N1cnNvciArIHNpemVvZihJ
dGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgc2l6ZV90IHBhZGRpbmcgPSAoYWxp
Z25vZih1aW50NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnRPZlBhZGRp
bmcpICUgYWxpZ25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRfdCk7CisgICAgICAgIGF1
dG8gZGVjb2RlZEl0ZW1IYW5kbGUgPSBjbGllbnQtPmRlY29kZUl0ZW0oc3RhcnRPZlBhZGRpbmcg
KyBwYWRkaW5nLCBzaXplT2ZEYXRhLCBpdGVtVHlwZSwgbV9jdXJyZW50QnVmZmVyRm9ySXRlbSk7
CisgICAgICAgIGlmICghZGVjb2RlZEl0ZW1IYW5kbGUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJbnN0ZWFkIG9mIGNyYXNoaW5nLCB0aGlzIG5lZWRzIHRvIGZhaWwgZ3JhY2VmdWxseSBhbmQg
aW5mb3JtIHRoZSBjYWxsZXIuCisgICAgICAgICAgICAvLyBGb3IgdGhlIHRpbWUgYmVpbmcsIHRo
aXMgYXNzZXJ0aW9uIG1ha2VzIGJ1Z3MgaW4gaXRlbSBidWZmZXIgZW5jb2RpbmcgbG9naWMgZWFz
aWVyCisgICAgICAgICAgICAvLyB0byBjYXRjaCBieSBhdm9pZGluZyBteXN0ZXJpb3VzIG91dC1v
Zi1ib3VuZHMgcmVhZHMgYW5kIGluY29ycmVjdGx5IGFsaWduZWQgaXRlbXMKKyAgICAgICAgICAg
IC8vIGRvd24gdGhlIGxpbmUuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudEJ1ZmZlckZvckl0ZW1bMF0gPSBzdGF0
aWNfY2FzdDx1aW50OF90PihpdGVtVHlwZSk7CisgICAgICAgIG1fY3VycmVudEl0ZW1TaXplSW5C
dWZmZXIgPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBwYWRkaW5nICsgc2l6
ZU9mRGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBJdGVtSGFuZGxlIHsgbV9jdXJzb3IgfS5j
b3B5VG8oeyBtX2N1cnJlbnRCdWZmZXJGb3JJdGVtIH0pOworICAgICAgICBtX2N1cnJlbnRJdGVt
U2l6ZUluQnVmZmVyID0gc2l6ZU9mVHlwZUFuZEl0ZW07CisgICAgfQorfQorCit2b2lkIERpc3Bs
YXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSgpCit7CisgICAgaWYgKGF0RW5kKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY3Vyc29yICs9IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXI7CisK
KyAgICBpZiAobV9jdXJzb3IgPT0gbV9jdXJyZW50RW5kT2ZCdWZmZXIgJiYgbV9yZWFkT25seUJ1
ZmZlckluZGV4IDwgbV9kaXNwbGF5TGlzdC5tX2l0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXpl
KCkpIHsKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlckluZGV4Kys7CisgICAgICAgIG1vdmVDdXJz
b3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgfQorCisgICAgdXBkYXRlQ3VycmVudEl0
ZW0oKTsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmNsZWFyQ3VycmVudEl0ZW0o
KQoreworICAgIGlmIChtX2N1cnJlbnRCdWZmZXJGb3JJdGVtKSB7CisgICAgICAgIEl0ZW1IYW5k
bGUgeyBtX2N1cnJlbnRCdWZmZXJGb3JJdGVtIH0uZGVzdHJveSgpOworICAgICAgICBpZiAoVU5M
SUtFTFkobV9jdXJyZW50QnVmZmVyRm9ySXRlbSAhPSBtX2ZpeGVkQnVmZmVyRm9yQ3VycmVudEl0
ZW0pKQorICAgICAgICAgICAgZmFzdEZyZWUobV9jdXJyZW50QnVmZmVyRm9ySXRlbSk7CisgICAg
fQorCisgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50QnVm
ZmVyRm9ySXRlbSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpt
b3ZlVG9FbmQoKQoreworICAgIGlmIChhdXRvJiBpdGVtcyA9IG1fZGlzcGxheUxpc3QubV9pdGVt
cykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBp
dGVtcy0+bV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZm
ZXIgPSBtX2N1cnNvcjsKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlckluZGV4ID0gaXRlbXMtPm1f
cmVhZE9ubHlCdWZmZXJzLnNpemUoKTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpCit7CisgICAgYXV0byYg
aXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgaWYgKCFpdGVtcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBudW1iZXJPZlJlYWRPbmx5QnVmZmVycyA9IGl0ZW1zLT5tX3Jl
YWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgaWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA8IG51
bWJlck9mUmVhZE9ubHlCdWZmZXJzKSB7CisgICAgICAgIGF1dG8mIG5leHRCdWZmZXJIYW5kbGUg
PSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnNbbV9yZWFkT25seUJ1ZmZlckluZGV4XTsKKyAgICAg
ICAgbV9jdXJzb3IgPSBuZXh0QnVmZmVySGFuZGxlLmRhdGE7CisgICAgICAgIG1fY3VycmVudEVu
ZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBuZXh0QnVmZmVySGFuZGxlLmNhcGFjaXR5OworICAgIH0g
ZWxzZSBpZiAobV9yZWFkT25seUJ1ZmZlckluZGV4ID09IG51bWJlck9mUmVhZE9ubHlCdWZmZXJz
KSB7CisgICAgICAgIG1fY3Vyc29yID0gaXRlbXMtPm1fd3JpdGFibGVCdWZmZXIuZGF0YTsKKyAg
ICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIgPSBtX2N1cnNvciArIGl0ZW1zLT5tX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAog
CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCBm
OWM5Mzk4ZjBiNzIyMjRmNjkwMmEzOGY3OTU3NTYzMmQxYjFhMzIwLi41N2VlYjk0MTRkYWUwNjNk
NjBkYzk0NGRkNTg5YTY5Yjg1MGYwMTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMjUs
MTEgKzI1LDE0IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVt
QnVmZmVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNDAsMzQgKzQzLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFz
cyBJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8SXRlbT4gewotcHVibGljOgotICAgIEl0ZW0oKSA9
IGRlbGV0ZTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW0oSXRlbVR5cGUpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkl0ZW0oKTsKLQotICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdHlwZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlz
RHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0jaWYgIWRlZmluZWQoTkRF
QlVHKSB8fCAhTE9HX0RJU0FCTEVECi0gICAgV1RGOjpDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29u
c3Q7Ci0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90IHNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mKTsK
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEl0ZW0+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIEl0ZW1UeXBlIG1fdHlwZTsKLX07
Ci0KIGVudW0gQXNUZXh0RmxhZyB7CiAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDAsCiAgICAgSW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMgICAgICA9IDEgPDwgMCwKQEAg
LTgwLDg2ICs1NSwxMDggQEAgY2xhc3MgRGlzcGxheUxpc3QgewogICAgIGZyaWVuZCBjbGFzcyBS
ZWNvcmRlcjsKICAgICBmcmllbmQgY2xhc3MgUmVwbGF5ZXI7CiBwdWJsaWM6Ci0gICAgRGlzcGxh
eUxpc3QoKSA9IGRlZmF1bHQ7Ci0gICAgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJikgPSBkZWZh
dWx0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGlzcGxh
eUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CiAKLSAgICBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9
KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB+RGlzcGxheUxp
c3QoKTsKIAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0JiYpOwogCi0gICAg
Y29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0K
LSAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgbV9saXN0LnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgp
OwotICAgIH0KKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29u
c3Q7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0gICAgCiAgICAgU3RyaW5nIGFz
VGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0
ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQqKTsK
KwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAogICAgIFdURjo6Q1N0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVtcCgpIGNv
bnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYpOwotCisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5k
bGUmKT4mJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdz
PiB2b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncyk7CisgICAgdm9pZCBhcHBlbmQoSXRlbUhhbmRs
ZSk7CisKKyAgICBib29sIHRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoYm9vbCk7CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBlbnVtIGNsYXNzIEltbWVkaWF0ZWx5TW92ZVRvRW5kIHsg
Tm8sIFllcyB9OworICAgICAgICBpdGVyYXRvcihjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIEltbWVkaWF0ZWx5TW92ZVRvRW5kIGltbWVkaWF0ZWx5TW92ZVRvRW5kID0gSW1tZWRpYXRl
bHlNb3ZlVG9FbmQ6Ok5vKQorICAgICAgICAgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHlNb3ZlVG9FbmQgPT0gSW1t
ZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcykKKyAgICAgICAgICAgICAgICBtb3ZlVG9FbmQoKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJy
ZW50QnVmZmVyKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlQ3VycmVudEl0ZW0oKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5pdGVyYXRvcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJuICZtX2Rpc3BsYXlMaXN0
ID09ICZvdGhlci5tX2Rpc3BsYXlMaXN0ICYmIG1fY3Vyc29yID09IG90aGVyLm1fY3Vyc29yOyB9
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIHsgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOyB9CisgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpIHsgYWR2YW5j
ZSgpOyB9CisgICAgICAgIHN0ZDo6cGFpcjxJdGVtSGFuZGxlLCBPcHRpb25hbDxGbG9hdFJlY3Q+
PiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiB7IEl0ZW1IYW5kbGUgeyBtX2N1cnJlbnRCdWZm
ZXJGb3JJdGVtIH0sIG1fY3VycmVudEV4dGVudCB9OyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBzaXplT2ZGaXhlZEJ1ZmZlckZvckN1cnJlbnRJdGVt
ID0gMjU2OworCisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW92ZUN1cnNvclRvU3RhcnRP
ZkN1cnJlbnRCdWZmZXIoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlVG9FbmQo
KTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRJdGVtKCk7CisgICAg
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlQ3VycmVudEl0ZW0oKTsKKyAgICAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKCk7CisgICAgICAgIGJvb2wgYXRFbmQoKSBjb25zdDsK
KworICAgICAgICBjb25zdCBEaXNwbGF5TGlzdCYgbV9kaXNwbGF5TGlzdDsKKyAgICAgICAgdWlu
dDhfdCogbV9jdXJzb3IgeyBudWxscHRyIH07CisgICAgICAgIHNpemVfdCBtX3JlYWRPbmx5QnVm
ZmVySW5kZXggeyAwIH07CisgICAgICAgIHNpemVfdCBtX2RyYXdpbmdJdGVtSW5kZXggeyAwIH07
CisgICAgICAgIHVpbnQ4X3QqIG1fY3VycmVudEVuZE9mQnVmZmVyIHsgbnVsbHB0ciB9OworCisg
ICAgICAgIHVpbnQ4X3QgbV9maXhlZEJ1ZmZlckZvckN1cnJlbnRJdGVtW3NpemVPZkZpeGVkQnVm
ZmVyRm9yQ3VycmVudEl0ZW1dIHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRCdWZm
ZXJGb3JJdGVtIHsgbnVsbHB0ciB9OworICAgICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IG1fY3Vy
cmVudEV4dGVudDsKKyAgICAgICAgc2l6ZV90IG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgeyAw
IH07CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhp
cyB9OyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0
b3I6OkltbWVkaWF0ZWx5TW92ZVRvRW5kOjpZZXMgfTsgfQogCiBwcml2YXRlOgotICAgIEl0ZW0m
IGFwcGVuZChSZWY8SXRlbT4mJiBpdGVtKQotICAgIHsKLSAgICAgICAgbV9saXN0LmFwcGVuZChX
VEZNb3ZlKGl0ZW0pKTsKLSAgICAgICAgcmV0dXJuIG1fbGlzdC5sYXN0KCkuZ2V0KCk7Ci0gICAg
fQorICAgIEl0ZW1CdWZmZXIqIGl0ZW1CdWZmZXJJZkV4aXN0cygpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlbXMuZ2V0KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVyJiBpdGVtQnVmZmVy
KCk7CiAKLSAgICAvLyBMZXNzIGVmZmljaWVudCBhcHBlbmQsIG9ubHkgdXNlZCBmb3IgdHJhY2tp
bmcgcmVwbGF5LgotICAgIHZvaWQgYXBwZW5kSXRlbShJdGVtJiBpdGVtKQorICAgIHZvaWQgYWRk
RHJhd2luZ0l0ZW1FeHRlbnQoT3B0aW9uYWw8RmxvYXRSZWN0PiYmIGV4dGVudCkKICAgICB7Ci0g
ICAgICAgIG1fbGlzdC5hcHBlbmQoaXRlbSk7CisgICAgICAgIEFTU0VSVChtX3RyYWNrc0RyYXdp
bmdJdGVtRXh0ZW50cyk7CisgICAgICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmFwcGVuZChXVEZN
b3ZlKGV4dGVudCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFn
cyhBc1RleHRGbGFncywgY29uc3QgSXRlbSYpOworICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBG
b3JGbGFncyhBc1RleHRGbGFncywgSXRlbUhhbmRsZSk7CiAKLSAgICBWZWN0b3I8UmVmPEl0ZW0+
PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9s
aXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJdGVtQnVmZmVyPiBtX2l0ZW1zOworICAgIFZlY3Rv
cjxPcHRpb25hbDxGbG9hdFJlY3Q+PiBtX2RyYXdpbmdJdGVtRXh0ZW50czsKKyAgICBib29sIG1f
dHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzIHsgdHJ1ZSB9OwogfTsKIAotCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBEaXNwbGF5TGlzdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUo
KSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwg
aXRlbS5nZXQoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3Bs
YXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPgordm9pZCBEaXNwbGF5TGlzdDo6YXBwZW5kKEFyZ3Mm
Ji4uLiBhcmdzKQogewotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBpdGVtQ291bnQ7Ci0gICAgZGVj
b2RlciA+PiBpdGVtQ291bnQ7Ci0gICAgaWYgKCFpdGVtQ291bnQpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICBEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdDsKLQotICAgIGZvciAo
dWludDY0X3QgaSA9IDA7IGkgPCAqaXRlbUNvdW50OyBpKyspIHsKLSAgICAgICAgYXV0byBpdGVt
ID0gSXRlbTo6ZGVjb2RlKGRlY29kZXIpOwotICAgICAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4g
ZGVjb2RlIGFsbCB0eXBlcywgZmFpbGluZyB0byBkZWNvZGUgYW4gaXRlbSBzaG91bGQgdHVybiBp
bnRvIGEgZGVjb2RlIGZhaWx1cmUuCi0gICAgICAgIC8vIEZvciBub3csIHdlIGp1c3QgaGF2ZSB0
byBpZ25vcmUgaXQuCi0gICAgICAgIGlmICghaXRlbSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBkaXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZSgqaXRlbSkpOwotICAgIH0KLQotICAg
IHJldHVybiBkaXNwbGF5TGlzdDsKKyAgICBpdGVtQnVmZmVyKCkuYXBwZW5kPFQ+KHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKIH0gLy8gRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcAppbmRleCBmN2NhNmJiZmZkOThmYTBkZjY4YTgxMzQ4Y2FlZDU4NjNhYTdkNTAzLi4w
ODFjZWM3OWUzYzlhZTJhMjgwNGMwMTUxZWVhZjNjNWIyOWI5Njc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRl
eHQuY3BwCkBAIC0zMzMsNyArMzMzLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICB1
cGRhdGVTdHJva2VDb2xvcihDR0dTdGF0ZUdldFN0cm9rZUNvbG9yKGdzdGF0ZSkpOwogICAgIHVw
ZGF0ZVNoYWRvdyhDR0dTdGF0ZUdldFN0eWxlKGdzdGF0ZSkpOwogCi0gICAgbV9vd25lci5hcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0ZSgqbV9vcmlnaW5hbEZvbnQs
IGdseXBocywgY29tcHV0ZUFkdmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBj
dXJyZW50VGV4dE1hdHJpeCkuZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9p
bnQocG9zaXRpb25zWzBdKSwgbV9zbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8
RHJhd0dseXBocz4oKm1fb3JpZ2luYWxGb250LCBnbHlwaHMsIGNvbXB1dGVBZHZhbmNlc0Zyb21Q
b3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgpLmRhdGEoKSwgY291
bnQsIGN1cnJlbnRUZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1fc21vb3RoaW5n
TW9kZSk7CiAKICAgICBtX293bmVyLmNvbmNhdENUTShpbnZlcnNlQ1RNRml4dXApOwogfQpAQCAt
MzUyLDcgKzM1Miw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2Uo
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXRlCiAgICAgbV9vd25lci5zY2Fs
ZShGbG9hdFNpemUoMSwgLTEpKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGNnSW1hZ2UpOwotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
SW1hZ2U6OmNyZWF0ZShpbWFnZSwgcmVjdCwge3sgfSwgaW1hZ2UtPnNpemUoKX0sIHsgSW1hZ2VP
cmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdCB9KSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0lt
YWdlPihpbWFnZSwgRmxvYXRSZWN0KHJlY3QpLCBGbG9hdFJlY3Qge3sgfSwgaW1hZ2UtPnNpemUo
KX0sIEltYWdlUGFpbnRpbmdPcHRpb25zIHsgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVm
dCB9KTsKIAogICAgIC8vIFVuZG8gdGhlIGFib3ZlIHktZmxpcCB0byByZXN0b3JlIHRoZSBjb250
ZXh0LgogICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6
ei5jcHAKaW5kZXggMjNhYzMyNGI3YjAwYTllMTZhNTZhZDY3MGNlMDRjZmE3N2ZjOWZhOC4uMTRj
MGVjNzJjNDBlMGU4OGIxNjNiYmNhOWE4NTg0ZWFhZWY2YTYwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVySGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6
LmNwcApAQCAtNDMsNyArNDMsNyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNSZWNv
cmRlcihSZWNvcmRlciYgb3duZXIpCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBo
cz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDIzYWMzMjRiN2IwMGE5ZTE2YTU2
YWQ2NzBjZTA0Y2ZhNzdmYzlmYTguLjE0YzBlYzcyYzQwZTBlODhiMTYzYmJjYTlhODU4NGVhYWVm
NmE2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyV2luLmNwcApAQCAtNDMsNyArNDMsNyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIpCiAKIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewot
ICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUo
Zm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5h
cHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2Rl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjli
NzQzMDg4YTEzNTFmNDdjYzAuLjk2ZTRiMWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUx
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29u
dGV4dDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERp
c3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlz
dCk7IH0KKyAgICBEaXNwbGF5TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4
Y2hhbmdlKG1fZGlzcGxheUxpc3QsIHsgfSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERp
c3BsYXlMaXN0KiByZXBsYXllZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXll
ZERpc3BsYXlMaXN0LmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1C
dWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYjkyODdiNzI3MzRkOWI0Y2NjNWI4NjVlNjhmYmYzMGYz
YWQ1NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDg3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaCIKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlz
cGxheUxpc3QgeworCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECitDU3Ry
aW5nIEl0ZW1IYW5kbGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRz
OworICAgIHRzIDw8ICp0aGlzOworICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQor
I2VuZGlmCisKK3ZvaWQgSXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogewor
ICAgICAgICBnZXQ8U2F2ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIGdldDxSZXN0b3JlPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogewor
ICAgICAgICBnZXQ8Um90YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB7CisgICAgICAgIGdldDxTY2FsZT4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
Q1RNOiB7CisgICAgICAgIGdldDxTZXRDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7
CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENv
bG9yOiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6IHsKKyAgICAgICAgZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
cm9rZVRoaWNrbmVzczogeworICAgICAgICBnZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOiB7CisgICAgICAgIGdldDxTZXRTdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB7CisgICAg
ICAgIGdldDxTZXRMaW5lQ2FwPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB7CisgICAgICAgIGdldDxTZXRM
aW5lRGFzaD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogeworICAgICAgICBnZXQ8U2V0TGluZUpvaW4+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDogeworICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzogeworICAgICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAg
ICBnZXQ8Q2xpcD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OiB7CisgICAgICAgIGdldDxDbGlwT3V0PigpLmFwcGx5
KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNs
aXBPdXRUb1BhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBPdXRUb1BhdGg+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
IHsKKyAgICAgICAgZ2V0PENsaXBQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogewor
ICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAg
ICAgICAgZ2V0PERyYXdHbHlwaHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3
SW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdl
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZUJ1
ZmZlcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJbWFn
ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UGF0dGVybjogeworICAgICAgICBnZXQ8RHJhd1BhdHRlcm4+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1JlY3Q6IHsKKyAgICAgICAgZ2V0PERyYXdSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAgICAg
IGdldDxEcmF3TGluZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7CisgICAgICAgIGdldDxEcmF3
TGluZXNGb3JUZXh0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6IHsKKyAgICAgICAg
Z2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAg
ICAgZ2V0PERyYXdFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOiB7CisgICAgICAgIGdldDxEcmF3UGF0
aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1Bh
dGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5n
UmVjdHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0PigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aENvbG9yOiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCku
YXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQ
YXRoOiB7CisgICAgICAgIGdldDxGaWxsSW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OiB7CisgICAgICAgIGdldDxGaWxsUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogeworICAgICAgICBn
ZXQ8RmlsbEVsbGlwc2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7CisgICAgICAgIGdldDxQdXRJbWFn
ZURhdGE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7CisgICAgICAgIGdldDxQYWludEZyYW1l
Rm9yTWVkaWE+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAgICAgICBnZXQ8U3Ryb2tlUmVjdD4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAg
ICAgIGdldDxTdHJva2VJbmxpbmVQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAg
ICAgICBnZXQ8U3Ryb2tlUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB7CisgICAgICAgIGdldDxT
dHJva2VFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAgICAgICBnZXQ8Q2xlYXJSZWN0Pigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgZ2V0PEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgZ2V0PEVuZFRy
YW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsK
KyAgICAgICAgZ2V0PEFwcGx5U3Ryb2tlUGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7
CisgICAgICAgIGdldDxBcHBseUZpbGxQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjogeworICAgICAgICBnZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSXRl
bUhhbmRsZTo6ZGVzdHJveSgpCit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRoPigpLn5D
bGlwT3V0VG9QYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0PENsaXBQYXRoPigpLn5DbGlwUGF0aCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczogeworICAgICAgICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpLn5DbGlwVG9EcmF3
aW5nQ29tbWFuZHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCku
fkRyYXdGb2N1c1JpbmdQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5n
UmVjdHM+KCkufkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+
KCkufkRyYXdHbHlwaHMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZT4oKS5+RHJhd0ltYWdlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2VCdWZmZXI+KCkufkRyYXdJbWFnZUJ1ZmZlcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0Zv
clRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCkufkRyYXdMaW5lc0ZvclRl
eHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0
aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5+RHJhd05hdGl2ZUlt
YWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1Bh
dGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOiB7CisgICAgICAgIGdl
dDxEcmF3UGF0dGVybj4oKS5+RHJhd1BhdHRlcm4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1Rp
bGVkSW1hZ2U+KCkufkRyYXdUaWxlZEltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERy
YXdUaWxlZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogewor
ICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5GaWxsQ29tcG9zaXRlZFJlY3QoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogewor
ICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAgICAgICAgZ2V0
PEZpbGxSZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdpdGhDb2xvcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OiB7Cisg
ICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5+RmlsbFJlY3RXaXRoR3JhZGllbnQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCku
fkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUm91bmRl
ZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAgICAgICBnZXQ8UHV0SW1hZ2VEYXRh
PigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuflNldExp
bmVEYXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0ZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAg
Z2V0PFN0cm9rZVBhdGg+KCkuflN0cm9rZVBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgVVNFKENHKQor
ICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlGaWxsUGF0dGVybj46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0
cm9rZVBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQYXR0ZXJuPjo6dmFsdWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXll
cjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxCZWdpblRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xlYXJT
aGFkb3c+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxDbGlwPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8Q2xpcE91dD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDb25jYXRlbmF0ZUNUTT46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+Ojp2YWx1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsK
KyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJh
d0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxs
eV9kZXN0cnVjdGlibGU8RHJhd0xpbmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RHJhd1JlY3Q+Ojp2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
RW5kVHJhbnNwYXJlbmN5TGF5ZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbEVsbGlwc2U+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8RmlsbElubGluZVBhdGg+Ojp2YWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxG
aWxsUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UGFpbnRGcmFtZUZvck1lZGlhPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVzdG9yZT46
OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8Um90YXRlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U2F2ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxTY2FsZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0Q1RNPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJ
bmxpbmVGaWxsQ29sb3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxHcmFkaWVudD46
OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVTdHJva2VDb2xvcj46OnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB7CisgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVDYXA+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUpvaW46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0TGluZUpvaW4+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRNaXRlckxpbWl0Pjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNr
bmVzczogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0
aWJsZTxTZXRTdHJva2VUaGlja25lc3M+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJva2VFbGxpcHNlPjo6dmFsdWUp
OworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6IHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlSW5saW5lUGF0aD46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8U3Ryb2tlUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VHJhbnNsYXRlPjo6dmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIH0KK30KKwordm9pZCBJdGVtSGFuZGxlOjpjb3B5VG8oSXRl
bUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBhdXRvIGl0ZW1UeXBlID0gdHlwZSgp
OworICAgIGRlc3RpbmF0aW9uLmRhdGFbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihpdGVtVHlw
ZSk7CisgICAgc3dpdGNoIChpdGVtVHlwZSkgeworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRU
b1BhdGg6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBl
KSkgQ2xpcE91dFRvUGF0aChnZXQ8Q2xpcE91dFRvUGF0aD4oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgbmV3IChkZXN0
aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQ2xpcFBhdGgoZ2V0PENsaXBQYXRoPigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0
ZW1UeXBlKSkgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGdldDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVt
VHlwZSkpIERyYXdGb2N1c1JpbmdQYXRoKGdldDxEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERy
YXdGb2N1c1JpbmdSZWN0cyhnZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAgIG5l
dyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdHbHlwaHMoZ2V0PERy
YXdHbHlwaHM+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdJbWFnZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRl
bVR5cGUpKSBEcmF3SW1hZ2UoZ2V0PERyYXdJbWFnZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIG5ldyAo
ZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdJbWFnZUJ1ZmZlcihnZXQ8
RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0
YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdMaW5lc0ZvclRleHQoZ2V0PERyYXdMaW5lc0ZvclRl
eHQ+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdO
YXRpdmVJbWFnZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRl
bVR5cGUpKSBEcmF3TmF0aXZlSW1hZ2UoZ2V0PERyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd1BhdGgoZ2V0PERy
YXdQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3UGF0dGVybjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRl
bVR5cGUpKSBEcmF3UGF0dGVybihnZXQ8RHJhd1BhdHRlcm4+KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIG5l
dyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdUaWxlZEltYWdlKGdl
dDxEcmF3VGlsZWRJbWFnZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlv
bi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoZ2V0PERyYXdU
aWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5k
YXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbENvbXBvc2l0ZWRSZWN0KGdldDxGaWxsQ29tcG9z
aXRlZFJlY3Q+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxQYXRoOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVt
VHlwZSkpIEZpbGxQYXRoKGdldDxGaWxsUGF0aD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6IHsKKyAgICAgICAgbmV3IChk
ZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFJlY3RXaXRoQ29sb3IoZ2V0
PEZpbGxSZWN0V2l0aENvbG9yPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUmVjdFdpdGhHcmFkaWVudChnZXQ8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB7CisgICAgICAgIG5ldyAoZGVzdGlu
YXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGdl
dDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAgIG5ldyAoZGVzdGlu
YXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxSb3VuZGVkUmVjdChnZXQ8RmlsbFJv
dW5kZWRSZWN0PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpQdXRJbWFnZURhdGE6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgUHV0SW1hZ2VEYXRhKGdldDxQdXRJbWFnZURhdGE+KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOiB7CisgICAgICAg
IG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldExpbmVEYXNoKGdl
dDxTZXRMaW5lRGFzaD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgU2V0U3RhdGUoZ2V0PFNldFN0YXRlPigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB7CisgICAgICAgIG5ldyAoZGVz
dGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFN0cm9rZVBhdGgoZ2V0PFN0cm9rZVBh
dGg+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6
ZW9mKEl0ZW1UeXBlKSkgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihnZXQ8QXBwbHlEZXZpY2VTY2Fs
ZUZhY3Rvcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgVVNFKENHKQorICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlv
bi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQXBwbHlGaWxsUGF0dGVybihnZXQ8QXBwbHlGaWxs
UGF0dGVybj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIEFwcGx5U3Ryb2tlUGF0dGVybihnZXQ8QXBwbHlTdHJva2VQYXR0ZXJu
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihnZXQ8QmVnaW5UcmFu
c3BhcmVuY3lMYXllcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVv
ZihJdGVtVHlwZSkpIENsZWFyUmVjdChnZXQ8Q2xlYXJSZWN0PigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBuZXcg
KGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDbGVhclNoYWRvdyhnZXQ8Q2xl
YXJTaGFkb3c+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBl
KSkgQ2xpcChnZXQ8Q2xpcD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXpl
b2YoSXRlbVR5cGUpKSBDbGlwT3V0KGdldDxDbGlwT3V0PigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogeworICAgICAgICBuZXcg
KGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDb25jYXRlbmF0ZUNUTShnZXQ8
Q29uY2F0ZW5hdGVDVE0+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6IHsKKyAgICAgICAgbmV3IChkZXN0aW5h
dGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihn
ZXQ8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5h
dGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0VsbGlwc2UoZ2V0PERyYXdFbGxpcHNl
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBE
cmF3TGluZShnZXQ8RHJhd0xpbmU+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSAr
IHNpemVvZihJdGVtVHlwZSkpIERyYXdSZWN0KGdldDxEcmF3UmVjdD4oKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsK
KyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIoZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogeworICAgICAgICBu
ZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsRWxsaXBzZShnZXQ8
RmlsbEVsbGlwc2U+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxJbmxpbmVQ
YXRoKGdldDxGaWxsSW5saW5lUGF0aD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5k
aWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUmVjdChnZXQ8RmlsbFJlY3Q+KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JN
ZWRpYTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBQYWludEZyYW1lRm9yTWVkaWEoZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAgICBu
ZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBSZXN0b3JlKGdldDxSZXN0
b3JlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkg
Um90YXRlKGdldDxSb3RhdGU+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNhdmU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgU2F2ZShnZXQ8U2F2ZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2NhbGUoZ2V0PFNjYWxlPigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHsKKyAgICAgICAgbmV3IChkZXN0
aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0Q1RNKGdldDxTZXRDVE0+KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBTZXRJbmxpbmVGaWxsQ29sb3IoZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNl
dElubGluZUZpbGxHcmFkaWVudChnZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBT
ZXRJbmxpbmVTdHJva2VDb2xvcihnZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHsKKyAgICAg
ICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0TGluZUNhcChn
ZXQ8U2V0TGluZUNhcD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6
ZW9mKEl0ZW1UeXBlKSkgU2V0TGluZUpvaW4oZ2V0PFNldExpbmVKb2luPigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldE1pdGVyTGlt
aXQoZ2V0PFNldE1pdGVyTGltaXQ+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBTZXRTdHJva2VUaGlja25lc3MoZ2V0PFNldFN0
cm9rZVRoaWNrbmVzcz4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlRWxsaXBzZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBz
aXplb2YoSXRlbVR5cGUpKSBTdHJva2VFbGxpcHNlKGdldDxTdHJva2VFbGxpcHNlPigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRp
b24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFN0cm9rZUlubGluZVBhdGgoZ2V0PFN0cm9rZUlu
bGluZVBhdGg+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBz
aXplb2YoSXRlbVR5cGUpKSBTdHJva2VSZWN0KGdldDxTdHJva2VSZWN0PigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgVHJhbnNsYXRlKGdldDxU
cmFuc2xhdGU+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIH0KK30KKworSXRlbUJ1
ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmIGhhbmRsZXMpCisgICAgOiBtX3Jl
YWRPbmx5QnVmZmVycyhXVEZNb3ZlKGhhbmRsZXMpKQoreworfQorCitJdGVtQnVmZmVyOjpJdGVt
QnVmZmVyKCkgPSBkZWZhdWx0OworCitJdGVtQnVmZmVyOjp+SXRlbUJ1ZmZlcigpCit7CisgICAg
Y2xlYXIoKTsKK30KKworSXRlbUJ1ZmZlcjo6SXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYgb3RoZXIp
CisgICAgOiBtX3JlYWRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRpbmdDbGll
bnQsIG51bGxwdHIpKQorICAgICwgbV93cml0aW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV93cml0aW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9j
YXRlZEJ1ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0
ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9hbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uo
b3RoZXIubV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICwgbV9yZWFkT25seUJ1ZmZlcnMo
c3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9KSkKKyAgICAsIG1fd3Jp
dGFibGVCdWZmZXIoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxlQnVmZmVyLCB7IH0pKQor
ICAgICwgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdHRl
bk51bWJlck9mQnl0ZXMsIDApKQoreworfQorCitJdGVtQnVmZmVyJiBJdGVtQnVmZmVyOjpvcGVy
YXRvcj0oSXRlbUJ1ZmZlciYmIG90aGVyKQoreworICAgIG1fcmVhZGluZ0NsaWVudCA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX3dyaXRpbmdD
bGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cik7Cisg
ICAgbV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycywgeyB9KTsKKyAgICBtX2FsbG9j
YXRlZEJ1ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9
KTsKKyAgICBtX3JlYWRPbmx5QnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25s
eUJ1ZmZlcnMsIHsgfSk7CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV93cml0YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzID0g
c3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK0l0ZW1CdWZmZXJIYW5kbGUgSXRlbUJ1ZmZlcjo6Y3JlYXRlSXRlbUJ1
ZmZlcihzaXplX3QgY2FwYWNpdHkpCit7CisgICAgaWYgKG1fd3JpdGluZ0NsaWVudCkgeworICAg
ICAgICBpZiAoYXV0byBoYW5kbGUgPSBtX3dyaXRpbmdDbGllbnQtPmNyZWF0ZUl0ZW1CdWZmZXIo
Y2FwYWNpdHkpKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkgPSAxIDw8IDEwOworCisgICAg
YXV0byBuZXdCdWZmZXJDYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCBkZWZhdWx0SXRlbUJ1
ZmZlckNhcGFjaXR5KTsKKyAgICBhdXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihmYXN0TWFsbG9jKG5ld0J1ZmZlckNhcGFjaXR5KSk7CisgICAgbV9hbGxvY2F0ZWRCdWZm
ZXJzLmFwcGVuZChidWZmZXIpOworICAgIHJldHVybiB7IEl0ZW1CdWZmZXJJZGVudGlmaWVyOjpn
ZW5lcmF0ZSgpLCBidWZmZXIsIG5ld0J1ZmZlckNhcGFjaXR5IH07Cit9CisKK3ZvaWQgSXRlbUJ1
ZmZlcjo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFu
ZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBt
X3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAgbWFwRnVuY3Rpb24oaGFuZGxlKTsKKworICAgIGlm
IChtX3dyaXRhYmxlQnVmZmVyICYmIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMpCisgICAgICAgIG1h
cEZ1bmN0aW9uKHsgbV93cml0YWJsZUJ1ZmZlci5pZGVudGlmaWVyLCBtX3dyaXRhYmxlQnVmZmVy
LmRhdGEsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgfSk7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6
Y2xlYXIoKQoreworICAgIGZvciAoYXV0byBpdGVtIDogc3RkOjpleGNoYW5nZShtX2l0ZW1zVG9E
ZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBpdGVtLmRlc3Ryb3koKTsK
KworICAgIGZvciAoYXV0byogYnVmZmVyIDogc3RkOjpleGNoYW5nZShtX2FsbG9jYXRlZEJ1ZmZl
cnMsIHsgfSkpCisgICAgICAgIGZhc3RGcmVlKGJ1ZmZlcik7CisKKyAgICBtX3JlYWRPbmx5QnVm
ZmVycy5jbGVhcigpOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSB7IH07CisgICAgbV93cml0dGVu
TnVtYmVyT2ZCeXRlcyA9IDA7Cit9CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6c3dhcFdyaXRhYmxlQnVm
ZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpCit7CisgICAgaWYgKG1fd3JpdHRlbk51
bWJlck9mQnl0ZXMgKyBudW1iZXJPZkJ5dGVzIDw9IG1fd3JpdGFibGVCdWZmZXIuY2FwYWNpdHkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmV4dEJ1ZmZlciA9IGNyZWF0ZUl0ZW1CdWZm
ZXIobnVtYmVyT2ZCeXRlcyk7CisgICAgYm9vbCBoYWRQcmV2aW91c0J1ZmZlciA9IG1fd3JpdGFi
bGVCdWZmZXI7CisgICAgYXV0byBwcmV2aW91c0J1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV93cml0
YWJsZUJ1ZmZlciwgeyB9KTsKKyAgICBwcmV2aW91c0J1ZmZlci5jYXBhY2l0eSA9IHN0ZDo6ZXhj
aGFuZ2UobV93cml0dGVuTnVtYmVyT2ZCeXRlcywgMCk7CisgICAgaWYgKGhhZFByZXZpb3VzQnVm
ZmVyKQorICAgICAgICBtX3JlYWRPbmx5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShwcmV2aW91c0J1
ZmZlcikpOworCisgICAgbV93cml0YWJsZUJ1ZmZlciA9IFdURk1vdmUobmV4dEJ1ZmZlcik7Cit9
CisKK3ZvaWQgSXRlbUJ1ZmZlcjo6YXBwZW5kRGF0YUFuZExlbmd0aChSZWY8U2hhcmVkQnVmZmVy
PiYmIGRhdGEsIHVpbnQ4X3QqIGxvY2F0aW9uKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8c2l6
ZV90Kj4obG9jYXRpb24pWzBdID0gZGF0YS0+c2l6ZSgpOworCisgICAgYXV0byogc3RhcnRPZlBh
ZGRpbmcgPSBsb2NhdGlvbiArIHNpemVvZihzaXplX3QpOworICAgIHNpemVfdCBwYWRkaW5nID0g
KGFsaWdub2YodWludDY0X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0T2ZQ
YWRkaW5nKSAlIGFsaWdub2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0X3QpOworICAgIGF1
dG8qIHN0YXJ0T2ZEYXRhID0gc3RhcnRPZlBhZGRpbmcgKyBwYWRkaW5nOworICAgIG1lbWNweShz
dGFydE9mRGF0YSwgZGF0YS0+ZGF0YUFzVUludDhQdHIoKSwgZGF0YS0+c2l6ZSgpKTsKKworICAg
IG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXpl
X3QpICsgcGFkZGluZyArIGRhdGEtPnNpemUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjQ4MmUwZThiM2E0N2UwNWIxYzgzNmQ2NmUzZGM2
NzI4Y2NmNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTk3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0
ZW1UeXBlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworbmFtZXNwYWNlIERpc3BsYXlM
aXN0IHsKKworY2xhc3MgRGlzcGxheUxpc3Q7CisKK2VudW0gSXRlbUJ1ZmZlcklkZW50aWZpZXJU
eXBlIHsgfTsKK3VzaW5nIEl0ZW1CdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJ
dGVtQnVmZmVySWRlbnRpZmllclR5cGU+OworCisvLyBBbiBJdGVtQnVmZmVySGFuZGxlIHdyYXBz
IGEgcG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIGRpc3BsYXkgbGlzdCBpdGVtIGRh
dGEuCitzdHJ1Y3QgSXRlbUJ1ZmZlckhhbmRsZSB7CisgICAgSXRlbUJ1ZmZlcklkZW50aWZpZXIg
aWRlbnRpZmllcjsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBj
YXBhY2l0eSB7IDAgfTsKKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgq
dGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRhOyB9Cit9
OworCit1c2luZyBJdGVtQnVmZmVySGFuZGxlcyA9IFZlY3RvcjxJdGVtQnVmZmVySGFuZGxlLCAy
PjsKKworLy8gQW4gSXRlbUhhbmRsZSB3cmFwcyBhIHBvaW50ZXIgdG8gYW4gSXRlbVR5cGUsIGZv
bGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGFuIGl0ZW0gb2YgdGhhdCB0eXBlLgorc3RydWN0IEl0ZW1I
YW5kbGUgeworICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgZGVzdHJveSgpOworICAgIGJvb2wgaXNEcmF3
aW5nSXRlbSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkRpc3BsYXlMaXN0Ojppc0RyYXdpbmdJ
dGVtKHR5cGUoKSk7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhISgq
dGhpcyk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFkYXRhOyB9CisK
KyNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKKyAgICBDU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7CisjZW5kaWYKKworICAgIEl0ZW1UeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxJdGVtVHlwZT4oZGF0YVswXSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVtSW5CeXRlcyh0eXBl
KCkpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGlzKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IFQ6Oml0ZW1UeXBlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCYg
Z2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpczxUPigpKTsKKyAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFQqPigmZGF0YVtzaXplb2YoSXRlbVR5cGUpXSk7CisgICAg
fQorCisgICAgdm9pZCBjb3B5VG8oSXRlbUhhbmRsZSBkZXN0aW5hdGlvbikgY29uc3Q7Cit9Owor
CitjbGFzcyBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgSXRlbUJ1ZmZlckhh
bmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZW5jb2RlSXRlbShJdGVtSGFuZGxlKSBjb25zdCA9IDA7Cit9OworCitjbGFz
cyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SXRlbUJ1
ZmZlclJlYWRpbmdDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgT3B0aW9uYWw8SXRlbUhhbmRs
ZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6
ZV90IGRhdGFMZW5ndGgsIEl0ZW1UeXBlLCB1aW50OF90KiBoYW5kbGVMb2NhdGlvbikgPSAwOwor
fTsKKworLy8gQW4gSXRlbUJ1ZmZlciBjb250YWlucyBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCBh
bmQgY29uc2lzdHMgb2YgYSByZWFkd3JpdGUgSXRlbUJ1ZmZlckhhbmRsZSAodG8gd2hpY2ggZGlz
cGxheQorLy8gbGlzdCBpdGVtcyBhcmUgYXBwZW5kZWQpIGFzIHdlbGwgYXMgYSBudW1iZXIgb2Yg
cmVhZG9ubHkgSXRlbUJ1ZmZlckhhbmRsZXMuIEl0ZW1zIGFyZSBhcHBlbmRlZCB0byB0aGUgcmVh
ZHdyaXRlCisvLyBidWZmZXIgdW50aWwgYWxsIGF2YWlsYWJsZSBjYXBhY2l0eSBpcyBleGhhdXN0
ZWQsIGF0IHdoaWNoIHBvaW50IHdlIHdpbGwgbW92ZSB0aGlzIHdyaXRhYmxlIGhhbmRsZSB0byB0
aGUgbGlzdAorLy8gb2YgcmVhZG9ubHkgaGFuZGxlcy4KK2NsYXNzIEl0ZW1CdWZmZXIgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEl0ZW1CdWZmZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGxheUxpc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBJdGVtQnVmZmVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkl0ZW1CdWZmZXIoKTsK
KyAgICBJdGVtQnVmZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYpOworCisgICAgV0VCQ09SRV9FWFBP
UlQgSXRlbUJ1ZmZlcihJdGVtQnVmZmVyJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZm
ZXImIG9wZXJhdG9yPShJdGVtQnVmZmVyJiYpOworCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGF1
dG8gYnVmZmVyIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgICAgICByZXN1bHQgKz0gYnVm
ZmVyLmNhcGFjaXR5OworICAgICAgICByZXN1bHQgKz0gbV93cml0dGVuTnVtYmVyT2ZCeXRlczsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3dyaXR0ZW5O
dW1iZXJPZkJ5dGVzICYmIG1fcmVhZE9ubHlCdWZmZXJzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90
KTsKKworICAgIC8vIEl0ZW1CdWZmZXI6OmFwcGVuZDxUPiguLi4pIGFwcGVuZHMgYSBkaXNwbGF5
IGxpc3QgaXRlbSBvZiB0eXBlIFQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudAorICAgIC8vIHdy
aXRhYmxlIGJ1ZmZlciBoYW5kbGU7IGlmIHJlbWFpbmluZyBidWZmZXIgY2FwYWNpdHkgaXMgaW5z
dWZmaWNpZW50IHRvIHN0b3JlIHRoZSBpdGVtLCBhCisgICAgLy8gbmV3IGJ1ZmZlciB3aWxsIGJl
IGFsbG9jYXRlZCAoZWl0aGVyIGJ5IHRoZSBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCwgaWYgc2V0
LCBvciBieSB0aGUgaXRlbQorICAgIC8vIGJ1ZmZlciBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gY2xp
ZW50KS4gSXRlbXMgYXJlIHBsYWNlZCBiYWNrLXRvLWJhY2sgaW4gdGhlc2UgaXRlbSBidWZmZXJz
LAorICAgIC8vIHdpdGggYW4gSXRlbVR5cGUgc2VwYXJhdGluZyBlYWNoIGl0ZW0uCisgICAgLy8K
KyAgICAvLyBJZiBhIHdyaXRpbmcgY2xpZW50IGlzIHByZXNlbnQgYW5kIHJlcXVpcmVzIGN1c3Rv
bSBlbmNvZGluZyBmb3IgdGhlIGdpdmVuIGl0ZW0gdHlwZSBULCB0aGUKKyAgICAvLyBpdGVtIGJ1
ZmZlciB3aWxsIGFzayB0aGUgY2xpZW50IGZvciBhbiBvcGFxdWUgU2hhcmVkQnVmZmVyIGNvbnRh
aW5pbmcgZW5jb2RlZCBkYXRhIGZvciB0aGUKKyAgICAvLyBpdGVtLiBUaGlzIGVuY29kZWQgZGF0
YSBpcyB0aGVuIGFwcGVuZGVkIHRvIHRoZSBpdGVtIGJ1ZmZlciwgd2l0aCBwYWRkaW5nIHRvIGVu
c3VyZSB0aGF0CisgICAgLy8gdGhlIHN0YXJ0IG9mIHRoaXMgZGF0YSBpcyBhbGlnbmVkIHRvIDgg
Ynl0ZXMsIGlmIG5lY2Vzc2FyeS4gV2hlbiBjb25zdW1pbmcgZW5jb2RlZCBpdGVtCisgICAgLy8g
ZGF0YSwgYSBjb3JyZXNwb25kaW5nIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHdpbGwgYmUgcmVx
dWlyZWQgdG8gY29udmVydCB0aGlzIGVuY29kZWQgZGF0YQorICAgIC8vIGJhY2sgaW50byBhbiBp
dGVtIG9mIHR5cGUgVC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2
b2lkIGFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSB8fCAhVDo6aXNJbmxpbmVJ
dGVtKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplb2Yo
SXRlbVR5cGUpICsgc2l6ZW9mKFQpOworCisgICAgICAgIGlmICghVDo6aXNJbmxpbmVJdGVtICYm
IG1fd3JpdGluZ0NsaWVudCkgeworICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgaXRlbUJ1ZmZl
cltzaXplT2ZUeXBlQW5kSXRlbV07CisgICAgICAgICAgICBpdGVtQnVmZmVyWzBdID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5cGUpOworICAgICAgICAgICAgbmV3IChpdGVtQnVmZmVy
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAg
ICAgICAgICAgaWYgKGF1dG8gc2hhcmVkQnVmZmVyID0gbV93cml0aW5nQ2xpZW50LT5lbmNvZGVJ
dGVtKHsgaXRlbUJ1ZmZlciB9KSkgeworICAgICAgICAgICAgICAgIHN3YXBXcml0YWJsZUJ1ZmZl
cklmTmVlZGVkKHNoYXJlZEJ1ZmZlci0+c2l6ZSgpICsgc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVv
ZihzaXplX3QpICsgYWxpZ25vZih1aW50NjRfdCkpOworICAgICAgICAgICAgICAgIG1fd3JpdGFi
bGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgICAgICBhcHBlbmREYXRhQW5kTGVuZ3RoKHNo
YXJlZEJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBtX3dyaXRhYmxlQnVmZmVyLmRhdGEgKyBtX3dy
aXR0ZW5OdW1iZXJPZkJ5dGVzICsgc2l6ZW9mKEl0ZW1UeXBlKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2FwV3JpdGFibGVCdWZm
ZXJJZk5lZWRlZChzaXplT2ZUeXBlQW5kSXRlbSk7CisKKyAgICAgICAgaWYgKCFzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlKQorICAgICAgICAgICAgbV9pdGVtc1RvRGVz
dHJveUluQWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoeyAmbV93cml0YWJsZUJ1ZmZlci5kYXRhW21f
d3JpdHRlbk51bWJlck9mQnl0ZXNdIH0pOworCisgICAgICAgIHVuY2hlY2tlZEFwcGVuZDxUPihz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHZvaWQgc2V0Q2xpZW50
KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpIHsgbV93cml0aW5nQ2xpZW50ID0gY2xp
ZW50OyB9CisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIGNsaWVu
dCkgeyBtX3JlYWRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJ
dGVtQnVmZmVySGFuZGxlcyYgcmVhZE9ubHlCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yZWFk
T25seUJ1ZmZlcnM7IH0KKyAgICB2b2lkIGZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYpPiYmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZV90IG51bWJlck9mQnl0ZXMpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kRGF0YUFuZExlbmd0aChSZWY8U2hhcmVkQnVm
ZmVyPiYmLCB1aW50OF90Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MuLi4gQXJn
cz4gdm9pZCB1bmNoZWNrZWRBcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBh
dXRvKiBzdGFydE9mSXRlbSA9ICZtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVy
T2ZCeXRlc107CisgICAgICAgIHN0YXJ0T2ZJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
VDo6aXRlbVR5cGUpOworICAgICAgICBuZXcgKHN0YXJ0T2ZJdGVtICsgc2l6ZW9mKEl0ZW1UeXBl
KSkgVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICBtX3dyaXR0ZW5OdW1i
ZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkgKyBzaXplT2ZJdGVtSW5CeXRlcyhUOjppdGVt
VHlwZSk7CisgICAgfQorCisgICAgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQqIG1fcmVhZGluZ0Ns
aWVudCB7IG51bGxwdHIgfTsKKyAgICBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogbV93cml0aW5n
Q2xpZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxJdGVtSGFuZGxlPiBtX2l0ZW1zVG9EZXN0
cm95SW5BbGxvY2F0ZWRCdWZmZXJzOworICAgIFZlY3Rvcjx1aW50OF90Kj4gbV9hbGxvY2F0ZWRC
dWZmZXJzOworICAgIEl0ZW1CdWZmZXJIYW5kbGVzIG1fcmVhZE9ubHlCdWZmZXJzOworICAgIEl0
ZW1CdWZmZXJIYW5kbGUgbV93cml0YWJsZUJ1ZmZlcjsKKyAgICBzaXplX3QgbV93cml0dGVuTnVt
YmVyT2ZCeXRlcyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5k
ZXggNTZiNTdmMDdjM2MzYzkzY2QzZjAxOTBmNWQ0YWNkMWJiNmMyYTRlOS4uYThjYzAzMWVjMzk0
NmNmYjM5NWJlNWRmZTZmMzdjYmMzMzVhYTc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmNwcApAQCAtNDMsMjA0ICs0MywxNiBAQCBuYW1lc3BhY2UgRGlzcGxheUxpc3Qgewog
Ly8gU2hvdWxkIG1hdGNoIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoKCkKIHN0
YXRpYyBjb25zdCBmbG9hdCBwbGF0Zm9ybUZvY3VzUmluZ1dpZHRoID0gMzsKIAotI2lmICFkZWZp
bmVkKE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAotV1RGOjpDU3RyaW5nIEl0ZW06OmRlc2NyaXB0
aW9uKCkgY29uc3QKLXsKLSAgICBUZXh0U3RyZWFtIHRzOwotICAgIHRzIDw8ICp0aGlzOwotICAg
IHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOwotfQotI2VuZGlmCi0KLUl0ZW06Okl0ZW0oSXRl
bVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1JdGVtOjp+SXRlbSgpID0g
ZGVmYXVsdDsKLQotc2l6ZV90IEl0ZW06OnNpemVJbkJ5dGVzKGNvbnN0IEl0ZW0mIGl0ZW0pCi17
Ci0gICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2F2ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UmVzdG9yZT4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxUcmFuc2xhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3Rh
dGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Um90YXRlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2Nh
bGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8U2V0Q1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0cm9r
ZVRoaWNrbmVzcz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0YXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5l
Q2FwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TGluZURhc2g+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lSm9pbjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRMaW5l
Sm9pbj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0TWl0ZXJMaW1pdD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsZWFyU2hhZG93OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENs
ZWFyU2hhZG93PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxDbGlwPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xp
cE91dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwT3V0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcFBhdGg+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3
R2x5cGhzPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdU
aWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ltYWdlQnVmZmVyPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PERyYXdOYXRpdmVJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdQYXR0ZXJuPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd1JlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdFbGxpcHNlPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RHJhd1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0
aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
UmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aENvbG9yPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3VuZGVkUmVj
dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihp
dGVtKSk7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbElubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbElubGlu
ZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Rmls
bEVsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRl
bSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlSW5s
aW5lUGF0aD4oaXRlbSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsZWFyUmVjdD4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0jaWYgVVNFKENHKQotICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseUZpbGxQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5Rmls
bFBhdHRlcm4+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcj4oaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdpbmdJdGVtJiBp
dGVtKQotewotICAgIHRzLnN0YXJ0R3JvdXAoKTsKLSAgICB0cyA8PCAiZXh0ZW50ICI7Ci0gICAg
aWYgKGl0ZW0uZXh0ZW50S25vd24oKSkKLSAgICAgICAgdHMgPDwgaXRlbS5leHRlbnQoKTsKLSAg
ICBlbHNlCi0gICAgICAgIHRzIDw8ICJ1bmtub3duIjsKLSAgICAKLSAgICB0cy5lbmRHcm91cCgp
OwotICAgIHJldHVybiB0czsKLX0KLQotRHJhd2luZ0l0ZW06OkRyYXdpbmdJdGVtKEl0ZW1UeXBl
IHR5cGUpCi0gICAgOiBJdGVtKHR5cGUpCi17Ci19Ci0KLURyYXdpbmdJdGVtOjp+RHJhd2luZ0l0
ZW0oKSA9IGRlZmF1bHQ7Ci0KLVNhdmU6OlNhdmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2F2
ZSkKLXsKLX0KLQotU2F2ZTo6flNhdmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2F2ZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2F2ZSgpOwog
fQogCi1SZXN0b3JlOjpSZXN0b3JlKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJlc3RvcmUpCi17
Ci19Ci0KLVJlc3RvcmU6On5SZXN0b3JlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJlc3RvcmU6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKIH0KIAotVHJhbnNsYXRlOjpUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OlRyYW5zbGF0ZSkKLSAgICAsIG1feCh4KQotICAgICwgbV95KHkpCi17
Ci19Ci0KLVRyYW5zbGF0ZTo6flRyYW5zbGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBUcmFuc2xh
dGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0
LnRyYW5zbGF0ZShtX3gsIG1feSk7CkBAIC0yNTQsMTQgKzY2LDYgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFRyYW5zbGF0ZSYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLVJvdGF0ZTo6Um90YXRlKGZsb2F0IGFuZ2xlKQotICAgIDogSXRl
bShJdGVtVHlwZTo6Um90YXRlKQotICAgICwgbV9hbmdsZShhbmdsZSkKLXsKLX0KLQotUm90YXRl
Ojp+Um90YXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFJvdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQucm90YXRlKG1fYW5nbGUpOwpAQCAt
Mjc0LDE0ICs3OCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSb3RhdGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1TY2FsZTo6U2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2NhbGUpCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLXsKLX0KLQotU2NhbGU6On5TY2FsZSgpID0gZGVmYXVsdDsKLQog
dm9pZCBTY2FsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuc2NhbGUobV9zaXplKTsKQEAgLTI5NCwxNCArOTAsNiBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2NhbGUmIGl0ZW0pCiAgICAg
cmV0dXJuIHRzOwogfQogCi1TZXRDVE06OlNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldENUTSkKLSAgICAsIG1fdHJhbnNmb3Jt
KHRyYW5zZm9ybSkKLXsKLX0KLQotU2V0Q1RNOjp+U2V0Q1RNKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNldENUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMxNCwxNCArMTAyLDYgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldENUTSYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUNvbmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNvbmNh
dGVuYXRlQ1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQotewotfQotCi1Db25jYXRl
bmF0ZUNUTTo6fkNvbmNhdGVuYXRlQ1RNKCkgPSBkZWZhdWx0OwotCiB2b2lkIENvbmNhdGVuYXRl
Q1RNOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5jb25jYXRDVE0obV90cmFuc2Zvcm0pOwpAQCAtMzM1LDggKzExNSw3IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb25jYXRlbmF0ZUNUTSYg
aXRlbSkKIH0KIAogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQo
Y29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50KQotICAgICwgbV9kYXRhKGdyYWRpZW50LmRhdGEoKSkKKyAgICA6IG1fZGF0
YShncmFkaWVudC5kYXRhKCkpCiAgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihn
cmFkaWVudC5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCiAgICAgLCBtX3NwcmVhZE1ldGhvZChn
cmFkaWVudC5zcHJlYWRNZXRob2QoKSkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGljX2Nh
c3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQpAQCAtMzU4LDE0ICsxMzcsOCBA
QCBSZWY8R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAog
ICAgIHJldHVybiBncmFkaWVudDsKIH0KIAotUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gU2V0
SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoY29uc3QgR3JhZGllbnQmIGdyYWRpZW50KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxHcmFkaWVudChncmFkaWVudCkp
OwotfQotCiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9h
dCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENv
bG9yU3RvcENvdW50XSwgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhv
ZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgOiBJdGVtKEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi0gICAgLCBtX2RhdGEoZGF0YSkKKyAgICA6IG1f
ZGF0YShkYXRhKQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybWF0aW9uKQogICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKQog
ICAgICwgbV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKQEAgLTM3Nyw4ICsxNTAsNiBA
QCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZz
ZXRzW21heENvbG9yU3RvcENvdW50XSwgUwogICAgIH0KIH0KIAotU2V0SW5saW5lRmlsbEdyYWRp
ZW50Ojp+U2V0SW5saW5lRmlsbEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldElubGlu
ZUZpbGxHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGlmIChtX2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KQpAQCAtNDA0LDEz
ICsxNzUsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50JikKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxT
ZXRJbmxpbmVGaWxsQ29sb3I+IFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yRGF0YSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxs
Q29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZUZpbGxDb2xvcjo6flNldElubGluZUZp
bGxDb2xvcigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihjb2xvcigpKTsKQEAgLTQyMiwxMyArMTg2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxDb2xvciYgc3RhdGUpCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+IFNldElubGluZVN0
cm9rZUNvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNldElubGluZVN0cm9rZUNvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1T
ZXRJbmxpbmVTdHJva2VDb2xvcjo6flNldElubGluZVN0cm9rZUNvbG9yKCkgPSBkZWZhdWx0Owot
CiB2b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xvcigpKTsKQEAgLTQ0
MCwxMyArMTk3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9
CiAKLVJlZjxTZXRTdHJva2VUaGlja25lc3M+IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKGZs
b2F0IHRoaWNrbmVzcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdHJva2VUaGlj
a25lc3ModGhpY2tuZXNzKSk7Ci19Ci0KLVNldFN0cm9rZVRoaWNrbmVzczo6flNldFN0cm9rZVRo
aWNrbmVzcygpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhtX3RoaWNrbmVzcyk7CkBAIC00NTksMTkgKzIwOSwxNSBAQCBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlVGhpY2tuZXNz
JiBzdGF0ZSkKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGUsIGZs
YWdzKQorICAgIDogbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCiB7CiB9CiAKIFNldFN0YXRlOjpTZXRT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAg
OiBJdGVtKEl0ZW1UeXBlOjpTZXRTdGF0ZSkKLSAgICAsIG1fc3RhdGUoc3RhdGVDaGFuZ2UpCisg
ICAgOiBtX3N0YXRlKHN0YXRlQ2hhbmdlKQogewogfQogCi1TZXRTdGF0ZTo6flNldFN0YXRlKCkg
PSBkZWZhdWx0OwotCiB2b2lkIFNldFN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgbV9zdGF0ZS5hcHBseShjb250ZXh0KTsKQEAgLTQ4MywxNCArMjI5
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVDYXA6OlNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZUNhcCkK
LSAgICAsIG1fbGluZUNhcChsaW5lQ2FwKQotewotfQotCi1TZXRMaW5lQ2FwOjp+U2V0TGluZUNh
cCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lQ2FwOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5lQ2FwKG1fbGluZUNhcCk7CkBA
IC01MDIsMTUgKzI0MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRMaW5lQ2FwJiBsaW5lQ2FwKQogICAgIHJldHVybiB0czsKIH0KIAot
U2V0TGluZURhc2g6OlNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9h
dCBkYXNoT2Zmc2V0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TGluZURhc2gpCi0gICAgLCBt
X2Rhc2hBcnJheShkYXNoQXJyYXkpCi0gICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKLXsK
LX0KLQotU2V0TGluZURhc2g6On5TZXRMaW5lRGFzaCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRM
aW5lRGFzaDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuc2V0TGluZURhc2gobV9kYXNoQXJyYXksIG1fZGFzaE9mZnNldCk7CkBAIC01MjMsMTQg
KzI1Miw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTZXRMaW5lRGFzaCYgbGluZURhc2gpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRMaW5l
Sm9pbjo6U2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi0gICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRMaW5lSm9pbikKLSAgICAsIG1fbGluZUpvaW4obGluZUpvaW4pCi17Ci19Ci0KLVNldExp
bmVKb2luOjp+U2V0TGluZUpvaW4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUpvaW46OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldExp
bmVKb2luKG1fbGluZUpvaW4pOwpAQCAtNTQyLDE0ICsyNjMsNiBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUpvaW4mIGxpbmVKb2lu
KQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TWl0ZXJMaW1pdDo6U2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0KQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdCkKLSAgICAs
IG1fbWl0ZXJMaW1pdChtaXRlckxpbWl0KQotewotfQotCi1TZXRNaXRlckxpbWl0Ojp+U2V0TWl0
ZXJMaW1pdCgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRNaXRlckxpbWl0OjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRNaXRlckxpbWl0KG1f
bWl0ZXJMaW1pdCk7CkBAIC01NjEsMjYgKzI3NCwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TWl0ZXJMaW1pdCYgbWl0ZXJMaW1pdCkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUNsZWFyU2hhZG93OjpDbGVhclNoYWRvdygpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpDbGVhclNoYWRvdykKLXsKLX0KLQotQ2xlYXJTaGFkb3c6On5DbGVhclNo
YWRvdygpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclNoYWRvdzo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKIH0KIAot
Q2xpcDo6Q2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpD
bGlwKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXA6On5DbGlwKCkgPSBkZWZhdWx0
OwotCiB2b2lkIENsaXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmNsaXAobV9yZWN0KTsKQEAgLTU5MiwxNCArMjkwLDYgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXAmIGl0ZW0pCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0OjpDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXQpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsK
LX0KLQotQ2xpcE91dDo6fkNsaXBPdXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcE91dDo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcE91
dChtX3JlY3QpOwpAQCAtNjExLDE0ICszMDEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLUNsaXBPdXRUb1BhdGg6OkNsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAg
ICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsK
LX0KLQotQ2xpcE91dFRvUGF0aDo6fkNsaXBPdXRUb1BhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
Q2xpcE91dFRvUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuY2xpcE91dChtX3BhdGgpOwpAQCAtNjMwLDE1ICszMTIsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcE91dFRvUGF0
aCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLUNsaXBQYXRoOjpDbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXBQ
YXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi0gICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQotewot
fQotCi1DbGlwUGF0aDo6fkNsaXBQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIENsaXBQYXRoOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlw
UGF0aChtX3BhdGgsIG1fd2luZFJ1bGUpOwpAQCAtNjUxLDE2ICszMjQsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFBhdGgmIGl0ZW0p
CiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwVG9EcmF3aW5nQ29tbWFuZHM6OkNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIERpc3BsYXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQotICAgIDogSXRlbShJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKLSAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQotICAgICwgbV9kcmF3aW5nQ29tbWFu
ZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQotewotfQotCi1DbGlwVG9EcmF3aW5nQ29tbWFu
ZHM6On5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobV9kZXN0aW5hdGlvbiwgbV9jb2xvclNw
YWNlLCBbJl0gKEdyYXBoaWNzQ29udGV4dCYgY2xpcHBpbmdDb250ZXh0KSB7CkBAIC02NzcsOCAr
MzQwLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IENsaXBUb0RyYXdpbmdDb21tYW5kcyYgaXRlbSkKIH0KIAogRHJhd0dseXBoczo6RHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGds
eXBocywgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBG
bG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
LSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhzKQotICAgICwgbV9mb250KGNv
bnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250KG1ha2VSZWZQdHIoY29uc3RfY2Fz
dDxGb250Jj4oZm9udCkpKQogICAgICwgbV9nbHlwaHMoV1RGTW92ZShnbHlwaHMpKQogICAgICwg
bV9hZHZhbmNlcyhXVEZNb3ZlKGFkdmFuY2VzKSkKICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxB
bmNob3IpCkBAIC02ODgsOCArMzUwLDcgQEAgRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywKIH0KIAog
RHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01v
ZGUgc21vb3RoaW5nTW9kZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3R2x5cGhz
KQotICAgICwgbV9mb250KGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKQorICAgIDogbV9mb250KG1h
a2VSZWZQdHIoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpKQogICAgICwgbV9sb2NhbEFuY2hvcihs
b2NhbEFuY2hvcikKICAgICAsIG1fc21vb3RoaW5nTW9kZShzbW9vdGhpbmdNb2RlKQogewpAQCAt
NzAyLDE5ICszNjMsMTcgQEAgRHJhd0dseXBoczo6RHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEcKICAgICBjb21wdXRlQm91
bmRzKCk7CiB9CiAKLURyYXdHbHlwaHM6On5EcmF3R2x5cGhzKCkgPSBkZWZhdWx0OwotCiBpbmxp
bmUgR2x5cGhCdWZmZXIgRHJhd0dseXBoczo6Z2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0CiB7
CiAgICAgR2x5cGhCdWZmZXIgcmVzdWx0OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9n
bHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sIG1fZm9u
dC5nZXQoKSwgbV9hZHZhbmNlc1tpXSwgR2x5cGhCdWZmZXI6Om5vT2Zmc2V0KTsKKyAgICAgICAg
cmVzdWx0LmFkZChtX2dseXBoc1tpXSwgKm1fZm9udCwgbV9hZHZhbmNlc1tpXSwgR2x5cGhCdWZm
ZXI6Om5vT2Zmc2V0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIERyYXdHbHlwaHM6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LmRy
YXdHbHlwaHMobV9mb250LCBnZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUo
KSwgYW5jaG9yUG9pbnQoKSwgbV9zbW9vdGhpbmdNb2RlKTsKKyAgICBjb250ZXh0LmRyYXdHbHlw
aHMoKm1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBtX2dseXBocy5zaXplKCksIGFu
Y2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoczo6Y29t
cHV0ZUJvdW5kcygpCkBAIC03MzQsMTQgKzM5Myw4IEBAIHZvaWQgRHJhd0dseXBoczo6Y29tcHV0
ZUJvdW5kcygpCiAgICAgfQogfQogCi1PcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdHbHlwaHM6Omxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
Ym91bmRzOwotfQotCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0dseXBocyYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2FsQW5jaG9yKCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiYW5jaG9yLXBvaW50IiwgaXRlbS5hbmNob3JQb2ludCgpKTsK
QEAgLTc1MCwxNyArNDAzLDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1E
cmF3SW1hZ2U6OkRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJh
d0ltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRp
b25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3SW1hZ2U6On5EcmF3SW1hZ2Uo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0ltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9k
ZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzY4LDI2
ICs0MTAsMTIgQEAgdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmlt
YWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlKQotICAgICwgbV9pbWFn
ZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTaXplKHRpbGVTaXplKQotICAgICwgbV9zcGFjaW5nKHNw
YWNpbmcpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25z
KQotewotfQotCi1EcmF3VGlsZWRJbWFnZTo6fkRyYXdUaWxlZEltYWdlKCkgPSBkZWZhdWx0Owot
CiB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5kcmF3VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3Rp
bmF0aW9uLCBtX3NvdXJjZSwgbV90aWxlU2l6ZSwgbV9zcGFjaW5nLCBtX2ltYWdlUGFpbnRpbmdP
cHRpb25zKTsKQEAgLTc5NSw3ICs0MjMsNiBAQCB2b2lkIERyYXdUaWxlZEltYWdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgi
c291cmNlLXBvaW50IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0
LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwpAQCAtODA0LDIwICs0MzEsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkSW1h
Z2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6RHJh
d1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVG
YWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3
aW5nSXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGlt
YWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNv
dXJjZSkKLSAgICAsIG1fdGlsZVNjYWxlRmFjdG9yKHRpbGVTY2FsZUZhY3RvcikKLSAgICAsIG1f
aFJ1bGUoaFJ1bGUpCi0gICAgLCBtX3ZSdWxlKHZSdWxlKQotICAgICwgbV9pbWFnZVBhaW50aW5n
T3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd1RpbGVkU2NhbGVkSW1h
Z2U6On5EcmF3VGlsZWRTY2FsZWRJbWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3VGlsZWRT
Y2FsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5nZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9z
b3VyY2UsIG1fdGlsZVNjYWxlRmFjdG9yLCBtX2hSdWxlLCBtX3ZSdWxlLCBtX2ltYWdlUGFpbnRp
bmdPcHRpb25zKTsKQEAgLTgyNSwyNSArNDM4LDEzIEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1h
Z2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZFNjYWxlZElt
YWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKLURyYXdJbWFnZUJ1ZmZlcjo6RHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0ltYWdl
QnVmZmVyKQotICAgICwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIocmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKQotICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCi0gICAg
LCBtX3NyY1JlY3Qoc3JjUmVjdCkKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotewotfQotCi1E
cmF3SW1hZ2VCdWZmZXI6On5EcmF3SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgRHJh
d0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAorTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODUxLDcgKzQ1Miw2IEBAIHZvaWQgRHJhd0ltYWdl
QnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ltYWdlQnVmZmVyJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJyZW1vdGUtcmVzb3VyY2UtaWRlbnRpZmllciIsIGl0ZW0ucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNl
LXJlY3QiLCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIs
IGl0ZW0uZGVzdGluYXRpb25SZWN0KCkpOwpAQCAtODU5LDggKzQ1OSw3IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2VCdWZmZXIm
IGl0ZW0pCiB9CiAKIERyYXdOYXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2
ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlKQotICAgICwgbV9pbWFnZShpbWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAg
ICAgLCBtX2ltYWdlU2l6ZShpbWFnZVNpemUpCiAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0
UmVjdCkKICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQpAQCAtODY4LDggKzQ2Nyw2IEBAIERyYXdO
YXRpdmVJbWFnZTo6RHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpCiB7CiB9CiAKLURyYXdOYXRpdmVJbWFnZTo6fkRyYXdOYXRpdmVJ
bWFnZSgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdOYXRpdmVJbWFnZSht
X2ltYWdlLCBtX2ltYWdlU2l6ZSwgbV9kZXN0aW5hdGlvblJlY3QsIG1fc3JjUmVjdCwgbV9vcHRp
b25zKTsKQEAgLTg3Nyw3ICs0NzQsNiBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQogewotICAg
IHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklY
TUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0Iiwg
aXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRl
c3RpbmF0aW9uUmVjdCgpKTsKQEAgLTg4NSw4ICs0ODEsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd05hdGl2ZUltYWdlJiBpdGVtKQog
fQogCiBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdQYXR0ZXJuKQotICAgICwgbV9pbWFnZShp
bWFnZSkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCiAgICAgLCBtX3BhdHRlcm5UcmFuc2Zvcm0ocGF0
dGVyblRyYW5zZm9ybSkKICAgICAsIG1fdGlsZVJlY3QodGlsZVJlY3QpCiAgICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RSZWN0KQpAQCAtODk2LDggKzQ5MSw2IEBAIERyYXdQYXR0ZXJuOjpEcmF3UGF0
dGVybihJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjCiB7CiB9CiAKLURyYXdQYXR0ZXJuOjp+RHJhd1BhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmRyYXdQYXR0ZXJuKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1f
dGlsZVJlY3QsIG1fcGF0dGVyblRyYW5zZm9ybSwgbV9waGFzZSwgbV9zcGFjaW5nLCBtX29wdGlv
bnMpOwpAQCAtOTA1LDcgKzQ5OCw2IEBAIHZvaWQgRHJhd1BhdHRlcm46OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXR0ZXJuJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJwYXR0ZXJuLXRy
YW5zZm9ybSIsIGl0ZW0ucGF0dGVyblRyYW5zZm9ybSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
InRpbGUtcmVjdCIsIGl0ZW0udGlsZVJlY3QoKSk7CkBAIC05MTUsMTUgKzUwNyw2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0dGVy
biYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdSZWN0OjpEcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpEcmF3UmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9ib3JkZXJU
aGlja25lc3MoYm9yZGVyVGhpY2tuZXNzKQotewotfQotCi1EcmF3UmVjdDo6fkRyYXdSZWN0KCkg
PSBkZWZhdWx0OwotCiB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UmVjdChtX3JlY3QsIG1fYm9yZGVyVGhpY2tu
ZXNzKTsKQEAgLTkzMSwyMSArNTE0LDExIEBAIHZvaWQgRHJhd1JlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJy
ZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYm9yZGVyLXRoaWNrbmVz
cyIsIGl0ZW0uYm9yZGVyVGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0xp
bmU6OkRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lKQotICAgICwgbV9w
b2ludDEocG9pbnQxKQotICAgICwgbV9wb2ludDIocG9pbnQyKQotewotfQotCi1EcmF3TGluZTo6
fkRyYXdMaW5lKCkgPSBkZWZhdWx0OwotCiBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lOjps
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEZsb2F0UmVj
dCBib3VuZHM7CkBAIC05NjAsMTUgKzUzMywxMyBAQCB2b2lkIERyYXdMaW5lOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBz
dGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0
eSgicG9pbnQtMSIsIGl0ZW0ucG9pbnQxKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQt
MiIsIGl0ZW0ucG9pbnQyKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogRHJhd0xpbmVzRm9yVGV4
dDo6RHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25z
dCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQpCi0gICAgLCBtX2Jsb2NrTG9jYXRpb24o
YmxvY2tMb2NhdGlvbikKKyAgICA6IG1fYmxvY2tMb2NhdGlvbihibG9ja0xvY2F0aW9uKQogICAg
ICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKICAgICAsIG1fd2lkdGhzKHdpZHRocykKICAg
ICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKQEAgLTk3Nyw4ICs1NDgsNiBAQCBEcmF3TGluZXNG
b3JUZXh0OjpEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24s
IGNvbnN0IEZsb2F0UwogewogfQogCi1EcmF3TGluZXNGb3JUZXh0Ojp+RHJhd0xpbmVzRm9yVGV4
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3TGluZXNGb3JUZXh0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3TGluZXNGb3JUZXh0KHBv
aW50KCksIG1fdGhpY2tuZXNzLCBtX3dpZHRocywgbV9wcmludGluZywgbV9kb3VibGVMaW5lcyk7
CkBAIC05OTgsNyArNTY3LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZXNGb3JUZXh0
Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xpbmVzRm9yVGV4
dCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiYmxvY2stbG9jYXRpb24iLCBpdGVtLmJsb2NrTG9j
YXRpb24oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJsb2NhbC1hbmNob3IiLCBpdGVtLmxvY2Fs
QW5jaG9yKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicG9pbnQiLCBpdGVtLnBvaW50KCkpOwpA
QCAtMTAxMCwxNSArNTc4LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdMaW5lc0ZvclRleHQmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwog
fQogCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLSAg
ICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9zdHlsZShzdHlsZSkKLXsKLX0KLQotRHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjo6fkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihtX3JlY3QsIG1fc3R5bGUpOwpAQCAtMTAzMSwxOSArNTkwLDEwIEBAIE9wdGlvbmFsPEZsb2F0
UmVjdD4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyJiBpdGVtKQogewotICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd0VsbGlwc2U6
OkRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1EcmF3RWxs
aXBzZTo6fkRyYXdFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdFbGxpcHNlOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3RWxs
aXBzZShtX3JlY3QpOwpAQCAtMTA1NSwxNCArNjA1LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotRHJhd1BhdGg6OkRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi0gICAg
OiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLXsK
LX0KLQotRHJhd1BhdGg6On5EcmF3UGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3UGF0aDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogI2lmIFVTRShDRykKQEAg
LTEwNzIsMjQgKzYxNCwxMiBAQCB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAjZW5kaWYKIH0KIAotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJiBpdGVtKQorc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotLy8gICAgdHMuZHVt
cFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOyAvLyBGSVhNRTogYWRkIGxvZ2dpbmcgZm9y
IHBhdGhzLgorICAgIC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCiAgICAgcmV0dXJu
IHRzOwogfQogCi1EcmF3Rm9jdXNSaW5nUGF0aDo6RHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoKQotICAgICwgbV9w
YXRoKHBhdGgpCi0gICAgLCBtX3dpZHRoKHdpZHRoKQotICAgICwgbV9vZmZzZXQob2Zmc2V0KQot
ICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRHJhd0ZvY3VzUmluZ1BhdGg6On5EcmF3Rm9j
dXNSaW5nUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3Vz
UmluZyhtX3BhdGgsIG1fd2lkdGgsIG1fb2Zmc2V0LCBtX2NvbG9yKTsKQEAgLTExMDQsNyArNjM0
LDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3Rm9jdXNSaW5nUGF0aDo6bG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdQYXRoJiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAvLyAgICB0
cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2lu
ZyBmb3IgcGF0aHMuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExMTMs
MTYgKzY0MiwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB9CiAKIERyYXdGb2N1c1JpbmdSZWN0
czo6RHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0cykKLSAgICAsIG1fcmVjdHMocmVjdHMp
CisgICAgOiBtX3JlY3RzKHJlY3RzKQogICAgICwgbV93aWR0aCh3aWR0aCkKICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKICAgICAsIG1fY29sb3IoY29sb3IpCiB7CiB9CiAKLURyYXdGb2N1c1JpbmdS
ZWN0czo6fkRyYXdGb2N1c1JpbmdSZWN0cygpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3Rm9jdXNS
aW5nUmVjdHM6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmRyYXdGb2N1c1JpbmcobV9yZWN0cywgbV93aWR0aCwgbV9vZmZzZXQsIG1fY29sb3Ip
OwpAQCAtMTEzOSw3ICs2NjUsNiBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdGb2N1c1JpbmdS
ZWN0czo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29ucwogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0ZvY3VzUmlu
Z1JlY3RzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0cyIsIGl0ZW0ucmVjdHMoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJ3aWR0aCIsIGl0ZW0ud2lkdGgoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJvZmZzZXQiLCBpdGVtLm9mZnNldCgpKTsKQEAgLTExNDcsMTQgKzY3Miw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9j
dXNSaW5nUmVjdHMmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdDo6RmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxSZWN0Ojp+RmlsbFJlY3Qo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCk7CkBAIC0xMTYyLDIw
ICs2NzksMTAgQEAgdm9pZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3Qo
KSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhDb2xvcjo6RmlsbFJlY3RXaXRo
Q29sb3IoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3IpCi0gICAgLCBtX3JlY3QocmVj
dCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0KLUZpbGxSZWN0V2l0aENvbG9yOjp+Rmls
bFJlY3RXaXRoQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoQ29sb3I6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxS
ZWN0KG1fcmVjdCwgbV9jb2xvcik7CkBAIC0xMTgzLDIxICs2OTAsMTcgQEAgdm9pZCBGaWxsUmVj
dFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RX
aXRoQ29sb3ImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgcmV0dXJuIHRz
OwogfQogCiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQpCi0gICAgLCBtX3JlY3QocmVjdCkKKyAgICA6
IG1fcmVjdChyZWN0KQogICAgICwgbV9ncmFkaWVudChncmFkaWVudCkKIHsKIH0KIAotRmlsbFJl
Y3RXaXRoR3JhZGllbnQ6On5GaWxsUmVjdFdpdGhHcmFkaWVudCgpID0gZGVmYXVsdDsKLQogdm9p
ZCBGaWxsUmVjdFdpdGhHcmFkaWVudDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2dyYWRpZW50LmdldCgpKTsK
QEAgLTEyMDUsMjMgKzcwOCwxMSBAQCB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50OjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhHcmFkaWVudCYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IC8vIEZJWE1FOiBsb2cgZ3JhZGllbnQuCiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRl
bS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRmlsbENvbXBvc2l0ZWRSZWN0OjpGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQot
ICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fb3Aob3ApCi0gICAgLCBtX2JsZW5kTW9kZShi
bGVuZE1vZGUpCi17Ci19Ci0KLUZpbGxDb21wb3NpdGVkUmVjdDo6fkZpbGxDb21wb3NpdGVkUmVj
dCgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsQ29tcG9zaXRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0KG1fcmVjdCwg
bV9jb2xvciwgbV9vcCwgbV9ibGVuZE1vZGUpOwpAQCAtMTIyOSw3ICs3MjAsNiBAQCB2b2lkIEZp
bGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiY29tcG9zaXRlLW9wZXJhdGlvbiIsIGl0ZW0uY29tcG9zaXRlT3BlcmF0
b3IoKSk7CkBAIC0xMjM3LDE2ICs3MjcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbENvbXBvc2l0ZWRSZWN0JiBpdGVtKQogICAgIHJl
dHVybiB0czsKIH0KIAotRmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdCkKLSAgICAs
IG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLSAgICAsIG1fYmxlbmRNb2RlKGJs
ZW5kTW9kZSkKLXsKLX0KLQotRmlsbFJvdW5kZWRSZWN0Ojp+RmlsbFJvdW5kZWRSZWN0KCkgPSBk
ZWZhdWx0OwotCiB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KG1fcmVjdCwgbV9j
b2xvciwgbV9ibGVuZE1vZGUpOwpAQCAtMTI1NCwyMyArNzM0LDEyIEBAIHZvaWQgRmlsbFJvdW5k
ZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUm91bmRlZFJl
Y3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihp
dGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJvdW5kZWRSZWN0KCkpOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBpdGVtLmNvbG9yKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiYmxlbmQtbW9kZSIsIGl0ZW0uYmxlbmRNb2RlKCkpOwogICAgIHJldHVybiB0czsK
IH0KIAotRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpCi0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fcm91bmRl
ZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVjdCkKLSAgICAsIG1fY29sb3IoY29sb3IpCi17Ci19Ci0K
LUZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjp+RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSA9IGRl
ZmF1bHQ7Ci0KIHZvaWQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKG1fcmVjdCwgbV9yb3VuZGVkSG9sZVJlY3QsIG1fY29sb3IpOwpAQCAtMTI3OCw3ICs3NDcs
NiBAQCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJvdW5kZWQt
aG9sZS1yZWN0IiwgaXRlbS5yb3VuZGVkSG9sZVJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CkBAIC0xMjg3LDE0ICs3NTUsNiBAQCBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUmIGl0ZQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAKLUZpbGxJbmxp
bmVQYXRoOjpGaWxsSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCi0g
ICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCi0gICAgLCBtX3BhdGhE
YXRhKHBhdGhEYXRhKQotewotfQotCi1GaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkg
PSBkZWZhdWx0OwotCiB2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOwpAQCAtMTMw
MiwyMSArNzYyLDEyIEBAIHZvaWQgRmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJw
YXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCi1GaWxsUGF0aDo6RmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0aCkKLSAgICAsIG1fcGF0aChw
YXRoKQotewotfQotCi1GaWxsUGF0aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZp
bGxQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29u
dGV4dC5maWxsUGF0aChtX3BhdGgpOwpAQCAtMTMyNCwxOSArNzc1LDEwIEBAIHZvaWQgRmlsbFBh
dGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQog
ewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0K
IAotRmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6
IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsRWxsaXBzZSkKLSAgICAsIG1fcmVjdChyZWN0KQot
ewotfQotCi1GaWxsRWxsaXBzZTo6fkZpbGxFbGxpcHNlKCkgPSBkZWZhdWx0OwotCiB2b2lkIEZp
bGxFbGxpcHNlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsRWxsaXBzZShtX3JlY3QpOwpAQCAtMTM0NCwxNCArNzg2LDEyIEBAIHZvaWQg
RmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxFbGxp
cHNlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJl
dHVybiB0czsKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGEpCi0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0
KQogICAgICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoaW1hZ2VE
YXRhLmRlZXBDbG9uZSgpKSAvLyBUaGlzIGNvcHkgaXMgYWN0dWFsbHkgcmVxdWlyZWQgdG8gcHJl
c2VydmUgdGhlIHNlbWFudGljcyBvZiBwdXRJbWFnZURhdGEoKS4KICAgICAsIG1faW5wdXRGb3Jt
YXQoaW5wdXRGb3JtYXQpCkBAIC0xMzYwLDggKzgwMCw3IEBAIFB1dEltYWdlRGF0YTo6UHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0
YSYKIH0KIAogUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQdXRJbWFnZURhdGEp
Ci0gICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICA6IG1fc3JjUmVjdChzcmNSZWN0KQogICAg
ICwgbV9kZXN0UG9pbnQoZGVzdFBvaW50KQogICAgICwgbV9pbWFnZURhdGEoV1RGTW92ZShpbWFn
ZURhdGEpKQogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEzNjksOSArODA4
LDcgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJgogewogfQogCi1QdXRJbWFnZURhdGE6On5QdXRJ
bWFnZURhdGEoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgUHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdAorTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBQdXRJbWFnZURh
dGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhh
bmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM3
OSw3ICs4MTYsNiBAQCB2b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFB1dEltYWdlRGF0YSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW5wdXRGb3JtYXQiLCBp
dGVtLmlucHV0Rm9ybWF0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2VEYXRhU2l6ZSIs
IGl0ZW0uaW1hZ2VEYXRhKCkuc2l6ZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNyY1JlY3Qi
LCBpdGVtLnNyY1JlY3QoKSk7CkBAIC0xMzg4LDMzICs4MjQsMTMgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFB1dEltYWdlRGF0YSYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxQYWludEZyYW1lRm9yTWVkaWE+IFBhaW50RnJhbWVG
b3JNZWRpYTo6Y3JlYXRlKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFpbnRGcmFtZUZvck1lZGlh
KHBsYXllciwgZGVzdGluYXRpb24pKTsKLX0KLQotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFp
bnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoTWVkaWFQbGF5ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgUGFpbnRGcmFtZUZvck1lZGlhKGlkZW50aWZpZXIsIGRlc3RpbmF0aW9uKSk7Ci19Ci0KIFBh
aW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6UGFpbnRGcmFtZUZvck1lZGlhKQotICAgICwgbV9pZGVudGlmaWVyKHBsYXllci5pZGVudGlm
aWVyKCkpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotewotfQotCi1QYWludEZy
YW1lRm9yTWVkaWE6OlBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRl
bnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVt
KEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEpCi0gICAgLCBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKKyAgICA6IG1faWRlbnRpZmllcihwbGF5ZXIuaWRlbnRpZmllcigpKQogICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKIHsKIH0KIAotUGFpbnRGcmFtZUZvck1lZGlhOjp+UGFp
bnRGcmFtZUZvck1lZGlhKCkgPSBkZWZhdWx0OwotCi12b2lkIFBhaW50RnJhbWVGb3JNZWRpYTo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKK05PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZv
aWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewog
ICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBkZWxlZ2F0ZS4KICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTE0MjIsMjAgKzgzOCwxMCBAQCB2b2lkIFBhaW50RnJhbWVGb3JNZWRp
YTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFBhaW50RnJhbWVGb3JNZWRpYSYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZGVzdGluYXRpb24iLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAg
IHJldHVybiB0czsKIH0KIAotU3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJv
a2VSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2xpbmVXaWR0aChsaW5lV2lkdGgp
Ci17Ci19Ci0KLVN0cm9rZVJlY3Q6On5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwotCiBPcHRpb25h
bDxGbG9hdFJlY3Q+IFN0cm9rZVJlY3Q6OmxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IG1fcmVjdDsKQEAgLTE0NTAsNyAr
ODU2LDYgQEAgdm9pZCBTdHJva2VSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBTdHJva2VSZWN0JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgibGluZS13aWR0aCIsIGl0ZW0ubGluZVdpZHRoKCkp
OwogICAgIHJldHVybiB0czsKQEAgLTE0NzMsMTkgKzg3OCwxMCBAQCB2b2lkIFN0cm9rZVBhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCiB7
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQog
Ci1TdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlKQotICAgICwgbV9yZWN0KHJl
Y3QpCi17Ci19Ci0KLVN0cm9rZUVsbGlwc2U6On5TdHJva2VFbGxpcHNlKCkgPSBkZWZhdWx0Owot
CiBPcHRpb25hbDxGbG9hdFJlY3Q+IFN0cm9rZUVsbGlwc2U6OmxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBmbG9hdCBzdHJva2VUaGlja25l
c3MgPSBjb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTUwMiw3ICs4OTgsNiBAQCB2b2lk
IFN0cm9rZUVsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9r
ZUVsbGlwc2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAg
ICAgcmV0dXJuIHRzOwogfQpAQCAtMTUyNiwzNyArOTIxLDEyIEBAIHZvaWQgU3Ryb2tlSW5saW5l
UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlSW5saW5lUGF0
aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0
ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1
cm4gdHM7CiB9CiAKLVN0cm9rZUlubGluZVBhdGg6OlN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5s
aW5lUGF0aERhdGEmIHBhdGhEYXRhKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9r
ZUlubGluZVBhdGgpCi0gICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQotewotfQotCi1TdHJva2VJ
bmxpbmVQYXRoOjp+U3Ryb2tlSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKLQogI2VuZGlmIC8vIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1TdHJva2VQYXRoOjpTdHJva2VQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlUGF0aCkKLSAgICAs
IG1fcGF0aChwYXRoKQotewotfQotCi1TdHJva2VQYXRoOjp+U3Ryb2tlUGF0aCgpID0gZGVmYXVs
dDsKLQotQ2xlYXJSZWN0OjpDbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkNsZWFyUmVjdCkKLSAgICAsIG1fcmVjdChyZWN0KQotewot
fQotCi1DbGVhclJlY3Q6On5DbGVhclJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJSZWN0
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGVhclJlY3QobV9yZWN0KTsKQEAgLTE1NjQsMTkgKzkzNCwxMCBAQCB2b2lkIENsZWFyUmVjdDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xlYXJSZWN0JiBpdGVtKQogewot
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0KCkpOwogICAgIHJldHVybiB0czsKIH0KIAot
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIp
Ci0gICAgLCBtX29wYWNpdHkob3BhY2l0eSkKLXsKLX0KLQotQmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6fkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQmVnaW5UcmFu
c3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewog
ICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX29wYWNpdHkpOwpAQCAtMTU4NCw1
NyArOTQ1LDI4IEBAIHZvaWQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgQmVnaW5UcmFuc3BhcmVuY3lMYXllciYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgib3BhY2l0eSIsIGl0ZW0ub3BhY2l0eSgpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLUVuZFRyYW5zcGFyZW5jeUxheWVyOjpFbmRUcmFuc3BhcmVuY3lMYXllcigpCi0gICAgOiBE
cmF3aW5nSXRlbShJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi17Ci19Ci0KLUVuZFRy
YW5zcGFyZW5jeUxheWVyOjp+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKICNpZiBV
U0UoQ0cpCi1BcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybigpCi0gICAgOiBJ
dGVtKEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm4pCi17Ci19Ci0KLUFwcGx5U3Ryb2tlUGF0
dGVybjo6fkFwcGx5U3Ryb2tlUGF0dGVybigpID0gZGVmYXVsdDsKIAogdm9pZCBBcHBseVN0cm9r
ZVBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmFwcGx5U3Ryb2tlUGF0dGVybigpOwogfQogCi1BcHBseUZpbGxQYXR0ZXJuOjpBcHBs
eUZpbGxQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm4pCi17
Ci19Ci0KLUFwcGx5RmlsbFBhdHRlcm46On5BcHBseUZpbGxQYXR0ZXJuKCkgPSBkZWZhdWx0Owot
CiB2b2lkIEFwcGx5RmlsbFBhdHRlcm46OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmFwcGx5RmlsbFBhdHRlcm4oKTsKIH0KICNlbmRpZgogCi1B
cHBseURldmljZVNjYWxlRmFjdG9yOjpBcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxl
RmFjdG9yKQotICAgIDogSXRlbShJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLSAg
ICAsIG1fc2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpCi17Ci19Ci0KLUFwcGx5RGV2aWNlU2NhbGVG
YWN0b3I6On5BcHBseURldmljZVNjYWxlRmFjdG9yKCkgPSBkZWZhdWx0OwotCiB2b2lkIEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9zY2FsZUZhY3Rvcik7CkBA
IC0xNjQ2LDcgKzk3OCw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBBcHBseURldmljZVNjYWxlRmFjdG9yJiBpdGVtCiAgICAgcmV0dXJuIHRz
OwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgSXRlbVR5cGUmIHR5cGUpCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgSXRlbVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNl
IEl0ZW1UeXBlOjpTYXZlOiB0cyA8PCAic2F2ZSI7IGJyZWFrOwpAQCAtMTcxNywxNzIgKzEwNDks
MTcwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBJdGVtVHlwZSYgdHlwZSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtSGFuZGxlIGl0ZW0pCiB7Ci0gICAgVGV4dFN0cmVh
bTo6R3JvdXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgaXRlbS50eXBlKCk7CiAKLSAgICAv
LyBGSVhNRTogTWFrZSBhIG1hY3JvIHdoaWNoIHRha2VzIGEgbWFjcm8gZm9yIGFsbCB0aGVzZSBl
bnVtZXJhdGlvbiBzd2l0Y2hlcwogICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKICAgICBjYXNl
IEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFRyYW5zbGF0ZT4oKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxS
b3RhdGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxSb3RhdGU+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxTY2FsZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNjYWxlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PFNldENUTT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldENUTT4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAg
IHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8Q29uY2F0ZW5hdGVDVE0+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5s
aW5lRmlsbEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5l
RmlsbEdyYWRpZW50PigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJ
bmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZUZpbGxDb2xv
cj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldElubGluZUZpbGxDb2xvcj4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0
TGluZUNhcD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldExpbmVDYXA+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldExpbmVEYXNoPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lSm9pbjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTZXRMaW5lSm9pbj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0
TWl0ZXJMaW1pdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNldE1pdGVyTGltaXQ+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PENsaXA+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwPigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxDbGlwT3V0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xp
cE91dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0
aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PENsaXBPdXRUb1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGlwUGF0aD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXBQYXRoPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIHRz
IDw8IGRvd25jYXN0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ds
eXBocz4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdHbHlwaHM+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0lt
YWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFn
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIHRzIDw8IGRvd25j
YXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0ltYWdlQnVm
ZmVyPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PERyYXdOYXRpdmVJbWFnZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXR0ZXJu
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1BhdHRlcm4+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxEcmF3UmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdSZWN0Pigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8RHJhd0xpbmU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxE
cmF3TGluZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbSk7
CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Ci0gICAg
ICAgIHRzIDw8IGRvd25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3
RWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdGg6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8RHJhd1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5n
UGF0aD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3Q+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
UmVjdFdpdGhHcmFkaWVudD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsQ29tcG9zaXRl
ZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbFJvdW5kZWRSZWN0PigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVt
LmdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKTsKICAgICAgICAgYnJlYWs7CiAjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RmlsbElubGluZVBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFBhdGg+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZp
bGxFbGxpcHNlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQdXRJbWFn
ZURhdGE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFB1dEltYWdlRGF0YT4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PFB1dEltYWdlRGF0YT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxQYWlu
dEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVJlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VSZWN0PigpOwogICAgICAgICBicmVhazsKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQ
YXRoOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7
CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTdHJva2VQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tl
UGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBz
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFN0cm9rZUVsbGlwc2U+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xlYXJSZWN0
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xlYXJSZWN0PigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oaXRlbSk7CisgICAgICAgIHRzIDw8
IGl0ZW0uZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgLy8gSXRlbXMgd2l0aCBubyBhZGRpdGlvbmFsIGRhdGEuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAppbmRleCBmMDE1YmU1ZTg2NjA2ZWNjMmY2Y2U4NTdjMWY3MTE2NzY5NGZlOGUz
Li4xZjkwOWIwNGVlZmNkODc0OTJiNzAxN2E4NjBhN2ZlMDZhZTkxNjBjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTUxLDMyMCArNTEsMTYzIEBAIHN0cnVjdCBJbWFnZVBh
aW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2lu
Z0l0ZW0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTYXZlIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBleHBsaWNpdCBEcmF3aW5nSXRlbShJdGVtVHlwZSk7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTYXZlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5E
cmF3aW5nSXRlbSgpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIHNldEV4dGVudChjb25zdCBGbG9hdFJlY3QmIHIpIHsgbV9leHRlbnQgPSByOyB9
Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudC52
YWx1ZSgpOyB9Ci0KLSAgICBib29sIGV4dGVudEtub3duKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9leHRlbnQpOyB9Ci0KLSAgICAvLyBSZXR1cm4gYm91bmRzIG9mIHRoaXMg
ZHJhd2luZyBvcGVyYXRpb24gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgLy8gRG9lcyBub3Qg
aW5jbHVkZSBlZmZldHMgb2YgdHJhbnNmb3JtLCBzaGFkb3cgZXRjIGluIHRoZSBzdGF0ZS4KLSAg
ICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLSAgICAvLyBTb21lIG9w
ZXJhdGlvbnMgKGUuZy4gcHV0SW1hZ2VEYXRhKSBvcGVyYXRlIGluIGdsb2JhbCBib3VuZHMuIEZv
ciB0aGVzZSBvcGVyYXRpb25zLCBvdmVycmlkZSB0aGlzIG1ldGhvZC4KLSAgICAvLyBJZiBhcHBs
aWNhYmxlLCB0aGUgcmV0dXJuIHZhbHVlIG5lZWRzIHRvIGluY2x1ZGUgdGhlIGVmZmVjdHMgb2Yg
c2hhZG93cywgY2xpcHBpbmcsIGV0Yy4KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBtX2V4dGVudDsgLy8gSW4gYmFzZSBjb29yZGlu
YXRlcywgdGFraW5nIHNoYWRvd3MgYW5kIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLWNsYXNzIFNh
dmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSZXN0b3JlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFNhdmU+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
YXZlKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpSZXN0b3JlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TYXZlKCk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFNhdmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFNhdmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2F2ZTo6
ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPFNhdmU+PiBTYXZlOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJu
IFNhdmU6OmNyZWF0ZSgpOwotfQotCi1jbGFzcyBSZXN0b3JlIDogcHVibGljIEl0ZW0geworY2xh
c3MgVHJhbnNsYXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlc3RvcmU+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXN0b3JlKTsKLSAgICB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZXN0b3JlKCk7Ci0KLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxSZXN0b3JlPj4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBSZXN0b3JlKCk7Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotfTsKLQotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgUmVzdG9yZTo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAot
ewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBS
ZXN0b3JlOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIFJlc3RvcmU6OmNyZWF0ZSgp
OwotfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
VHJhbnNsYXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLWNs
YXNzIFRyYW5zbGF0ZSA6IHB1YmxpYyBJdGVtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFRy
YW5zbGF0ZT4gY3JlYXRlKGZsb2F0IHgsIGZsb2F0IHkpCisgICAgVHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCisgICAgICAgIDogbV94KHgpCisgICAgICAgICwgbV95KHkpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFuc2xhdGUoeCwgeSkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflRyYW5zbGF0ZSgpOwotCiAgICAgZmxvYXQgeCgpIGNv
bnN0IHsgcmV0dXJuIG1feDsgfQogICAgIGZsb2F0IHkoKSBjb25zdCB7IHJldHVybiBtX3k7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFRyYW5z
bGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
VHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
IAotICAgIGZsb2F0IG1feDsKLSAgICBmbG9hdCBtX3k7Citwcml2YXRlOgorICAgIGZsb2F0IG1f
eCB7IDAgfTsKKyAgICBmbG9hdCBtX3kgeyAwIH07CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBUcmFuc2xhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV94OwotICAgIGVuY29kZXIgPDwgbV95OwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFRyYW5zbGF0ZT4+IFRyYW5zbGF0ZTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAgZGVjb2Rl
ciA+PiB4OwotICAgIGlmICgheCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IE9wdGlvbmFsPGZsb2F0PiB5OwotICAgIGRlY29kZXIgPj4geTsKLSAgICBpZiAoIXkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gVHJhbnNsYXRlOjpjcmVhdGUo
KngsICp5KTsKLX0KLQotY2xhc3MgUm90YXRlIDogcHVibGljIEl0ZW0geworY2xhc3MgUm90YXRl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJvdGF0ZT4gY3JlYXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6Um90YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAg
ICBSb3RhdGUoZmxvYXQgYW5nbGUpCisgICAgICAgIDogbV9hbmdsZShhbmdsZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJvdGF0ZShhbmdsZUluUmFkaWFucykpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJvdGF0ZSgpOwotCiAgICAgZmxvYXQg
YW5nbGUoKSBjb25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxSb3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOwot
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFJvdGF0ZShmbG9hdCBhbmdsZSk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV9hbmdsZTsgLy8gSW4gcmFkaWFu
cy4KK3ByaXZhdGU6CisgICAgZmxvYXQgbV9hbmdsZSB7IDAgfTsgLy8gSW4gcmFkaWFucy4KIH07
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFJvdGF0ZTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2FuZ2xlOwotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFJvdGF0ZT4+IFJvdGF0ZTo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGFuZ2xlOwotICAgIGRlY29k
ZXIgPj4gYW5nbGU7Ci0gICAgaWYgKCFhbmdsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBSb3RhdGU6OmNyZWF0ZSgqYW5nbGUpOwotfQotCi1jbGFzcyBTY2Fs
ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNjYWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFNjYWxlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2NhbGU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKKyAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNjYWxlKHNpemUpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5TY2FsZSgpOwotCiAgICAgY29uc3QgRmxvYXRTaXplJiBhbW91bnQoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPFNjYWxlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTY2FsZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKIH07CiAKLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIFNjYWxlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTY2FsZT4+IFNjYWxlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxGbG9hdFNpemU+IHNjYWxlOwotICAgIGRlY29kZXIgPj4gc2NhbGU7Ci0g
ICAgaWYgKCFzY2FsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVy
biBTY2FsZTo6Y3JlYXRlKCpzY2FsZSk7Ci19Ci0KLWNsYXNzIFNldENUTSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNldENUTSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRDVE0+IGNyZWF0
ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG1hdHJpeCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldENUTTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNE
cmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldENUTShtYXRyaXgpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRDVE0oKTsKLQogICAgIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldENUTT4+IGRlY29k
ZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0
ZToKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiB9OwogCi10ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgotdm9pZCBTZXRDVE06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV90cmFuc2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxSZWY8U2V0Q1RNPj4gU2V0Q1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxBZmZpbmVUcmFuc2Zvcm0+IHRyYW5zZm9ybTsKLSAgICBkZWNv
ZGVyID4+IHRyYW5zZm9ybTsKLSAgICBpZiAoIXRyYW5zZm9ybSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0K
LQotY2xhc3MgQ29uY2F0ZW5hdGVDVE0gOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDb25jYXRlbmF0
ZUNUTSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb25jYXRlbmF0ZUNUTT4gY3JlYXRlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE07CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQorICAgICAgICA6IG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbmNhdGVuYXRlQ1RNKG1hdHJp
eCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNvbmNhdGVuYXRlQ1RN
KCk7Ci0KICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhbnNmb3JtOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxDb25jYXRlbmF0ZUNUTT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIENvbmNhdGVuYXRlQ1RNOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fdHJhbnNmb3JtOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPENvbmNhdGVuYXRlQ1RNPj4gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3Jt
OwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAgIGlmICghdHJhbnNmb3JtKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENvbmNhdGVuYXRlQ1RNOjpjcmVh
dGUoKnRyYW5zZm9ybSk7Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCA6IHB1Ymxp
YyBJdGVtIHsKK2NsYXNzIFNldElubGluZUZpbGxHcmFkaWVudCB7CiBwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKICAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3QgbWF4Q29sb3JTdG9wQ291bnQgPSA0OwogCi0gICAgc3Rh
dGljIFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBHcmFkaWVudCYpOwot
ICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdyYWRpZW50Jik7Ci0KLSAgICB2aXJ0dWFs
IH5TZXRJbmxpbmVGaWxsR3JhZGllbnQoKTsKLQotICAgIFJlZjxHcmFkaWVudD4gZ3JhZGllbnQo
KSBjb25zdDsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6
Ci0gICAgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNyZWF0ZShmbG9hdCBvZmZz
ZXRzW21heENvbG9yU3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3Rv
cENvdW50XSwKLSAgICAgICAgY29uc3QgR3JhZGllbnQ6OkRhdGEmIGRhdGEsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1l
dGhvZCBzcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9wQ291bnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGllbnQob2Zmc2V0cywgY29s
b3JzLCBkYXRhLCBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIHNwcmVhZE1ldGhvZCwgY29s
b3JTdG9wQ291bnQpKTsKLSAgICB9Ci0KKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3Qg
R3JhZGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZmxv
YXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhD
b2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiwKICAgICAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFk
TWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KTsKIAotICAgIFNldElubGluZUZpbGxHcmFk
aWVudChjb25zdCBHcmFkaWVudCYpOworICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdy
YWRpZW50Jik7CisgICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorCitwcml2YXRlOgogICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhD
b2xvclN0b3BDb3VudF07CiAgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9w
Q291bnRdOwogICAgIEdyYWRpZW50OjpEYXRhIG1fZGF0YTsKQEAgLTM3MywxOTggKzIxNiw3OSBA
QCBwcml2YXRlOgogICAgIHVpbnQ4X3QgbV9jb2xvclN0b3BDb3VudCB7IDAgfTsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxHcmFkaWVudDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENv
dW50OwotICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkg
ewotICAgICAgICBlbmNvZGVyIDw8IG1fb2Zmc2V0c1tpXTsKLSAgICAgICAgZW5jb2RlciA8PCBQ
YWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JzW2ldIH0udmFsdWU7Ci0gICAgfQotICAgIGVuY29k
ZXIgPDwgbV9kYXRhOwotICAgIGVuY29kZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b247Ci0gICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVp
bnQ4X3Q+IGNvbG9yU3RvcENvdW50OwotICAgIGRlY29kZXIgPj4gY29sb3JTdG9wQ291bnQ7Ci0g
ICAgaWYgKCFjb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIGlmICgqY29sb3JTdG9wQ291bnQgPiBtYXhDb2xvclN0b3BDb3VudCkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRd
OwotICAgIFNSR0JBPHVpbnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgZm9y
ICh1aW50OF90IGkgPSAwOyBpIDwgKmNvbG9yU3RvcENvdW50OyArK2kpIHsKLSAgICAgICAgT3B0
aW9uYWw8ZmxvYXQ+IG9mZnNldDsKLSAgICAgICAgZGVjb2RlciA+PiBvZmZzZXQ7Ci0gICAgICAg
IGlmICghb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAg
ICBPcHRpb25hbDx1aW50MzJfdD4gY29sb3I7Ci0gICAgICAgIGRlY29kZXIgPj4gY29sb3I7Ci0g
ICAgICAgIGlmICghY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgICAgIGNvbG9yc1tpXSA9IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqY29sb3IgfSk7
Ci0gICAgICAgIG9mZnNldHNbaV0gPSAqb2Zmc2V0OwotICAgIH0KLQotICAgIE9wdGlvbmFsPEdy
YWRpZW50OjpEYXRhPiBkYXRhOwotICAgIGRlY29kZXIgPj4gZGF0YTsKLSAgICBpZiAoIWRhdGEp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxBZmZpbmVUcmFu
c2Zvcm0+IGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBkZWNvZGVyID4+IGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBpZiAoIWdyYWRpZW50U3BhY2VUcmFuc2Zvcm1h
dGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEdyYWRp
ZW50U3ByZWFkTWV0aG9kPiBzcHJlYWRNZXRob2Q7Ci0gICAgZGVjb2RlciA+PiBzcHJlYWRNZXRo
b2Q7Ci0gICAgaWYgKCFzcHJlYWRNZXRob2QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4geyBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShvZmZzZXRzLCBj
b2xvcnMsICpkYXRhLCAqZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCAqc3ByZWFkTWV0aG9k
LCAqY29sb3JTdG9wQ291bnQpIH07Ci19Ci0KLWNsYXNzIFNldElubGluZUZpbGxDb2xvciA6IHB1
YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZUZpbGxDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1
aW50OF90Pik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xv
cigpOwotCi0gICAgQ29sb3IgY29sb3IoKSBjb25zdCB7IHJldHVybiB7IG1fY29sb3JEYXRhIH07
IH0KLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dElubGluZUZpbGxDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0
SW5saW5lRmlsbENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVt
KEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29s
b3JEYXRhKQorICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBD
b2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQorICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgU1JHQkE8dWludDhfdD4g
bV9jb2xvckRhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRJbmxp
bmVGaWxsQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29k
ZXIgPDwgUGFja2VkQ29sb3I6OlJHQkEgeyBtX2NvbG9yRGF0YSB9LnZhbHVlOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxDb2xvcj4+IFNl
dElubGluZUZpbGxDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9u
YWw8dWludDMyX3Q+IHZhbHVlOwotICAgIGRlY29kZXIgPj4gdmFsdWU7Ci0gICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBTZXRJbmxpbmVG
aWxsQ29sb3I6OmNyZWF0ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsK
LX0KLQotY2xhc3MgU2V0SW5saW5lU3Ryb2tlQ29sb3IgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBT
ZXRJbmxpbmVTdHJva2VDb2xvciB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZVN0cm9rZUNvbG9yKCk7Ci0KLSAgICBD
b2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tl
Q29sb3I+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVTdHJv
a2VDb2xvcihTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi0gICAgICAgIDogSXRlbShJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3IpCi0gICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRh
KQorICAgICAgICA6IG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKICAgICB7CiAgICAgfQogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFNSR0JB
PHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwotfTsKKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0
dXJuIHsgbV9jb2xvckRhdGEgfTsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBT
ZXRJbmxpbmVTdHJva2VDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IFNldElubGlu
ZVN0cm9rZUNvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1
aW50MzJfdD4gdmFsdWU7Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6
Y3JlYXRlKGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQorcHJpdmF0
ZToKKyAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKK307CiAKLWNsYXNzIFNldFN0cm9r
ZVRoaWNrbmVzcyA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0cm9rZVRoaWNrbmVzcyB7CiBw
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+
IGNyZWF0ZShmbG9hdCB0aGlja25lc3MpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0U3Ryb2tlVGhpY2tuZXNzKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0
dXJuIG1fdGhpY2tuZXNzOyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgogICAgIFNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi0gICAgICAg
IDogSXRlbShJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzKQotICAgICAgICAsIG1fdGhpY2tu
ZXNzKHRoaWNrbmVzcykKKyAgICAgICAgOiBtX3RoaWNrbmVzcyh0aGlja25lc3MpCiAgICAgewog
ICAgIH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKLX07CisgICAgZmxvYXQgdGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0U3Ryb2tlVGhpY2tuZXNzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fdGhpY2tuZXNzOwotfQorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPj4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gdGhpY2tuZXNzOwotICAgIGRl
Y29kZXIgPj4gdGhpY2tuZXNzOwotICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAotICAgIHJldHVybiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSgqdGhpY2tuZXNz
KTsKLX0KK3ByaXZhdGU6CisgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Cit9OwogCi1jbGFz
cyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldFN0YXRlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFNldFN0YXRlPiBjcmVhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRlKHN0YXRlLCBmbGFncykp
OwotICAgIH0KLQotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+IGNyZWF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaGFuZ2UpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTZXRTdGF0ZShzdGF0ZUNoYW5nZSkpOwotICAgIH0KKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0YXRlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+U2V0U3RhdGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBTZXRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZSYpOwogICAgIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIApAQCAtNTczLDE0ICsyOTcsMTQg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYp
OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hh
bmdlJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlIG1fc3RhdGU7CiB9OwogCkBAIC02NjksNyArMzkzLDcgQEAg
dm9pZCBTZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzPiBjaGFuZ2VGbGFnczsKICAgICBkZWNvZGVyID4+IGNoYW5nZUZs
YWdzOwpAQCAtODk2LDY4ICs2MjAsNTUgQEAgT3B0aW9uYWw8UmVmPFNldFN0YXRlPj4gU2V0U3Rh
dGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gKnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAg
IH0KIAotICAgIHJldHVybiBTZXRTdGF0ZTo6Y3JlYXRlKHN0YXRlQ2hhbmdlKTsKKyAgICByZXR1
cm4geyBzdGF0ZUNoYW5nZSB9OwogfQogCi1jbGFzcyBTZXRMaW5lQ2FwIDogcHVibGljIEl0ZW0g
eworY2xhc3MgU2V0TGluZUNhcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lQ2Fw
PiBjcmVhdGUoTGluZUNhcCBsaW5lQ2FwKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZUNhcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCisgICAg
ICAgIDogbV9saW5lQ2FwKGxpbmVDYXApCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTZXRMaW5lQ2FwKGxpbmVDYXApKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5TZXRMaW5lQ2FwKCk7Ci0gICAgCiAgICAgTGluZUNhcCBsaW5lQ2FwKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lQ2FwOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxTZXRMaW5lQ2FwPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRMaW5lQ2FwKExpbmVDYXApOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBMaW5lQ2FwIG1fbGluZUNhcDsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldExpbmVDYXA6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9saW5lQ2FwOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVDYXA+PiBTZXRMaW5lQ2Fw
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxMaW5lQ2FwPiBsaW5l
Q2FwOwotICAgIGRlY29kZXIgPj4gbGluZUNhcDsKLSAgICBpZiAoIWxpbmVDYXApCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUNhcDo6Y3JlYXRlKCps
aW5lQ2FwKTsKLX0KLQotY2xhc3MgU2V0TGluZURhc2ggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBT
ZXRMaW5lRGFzaCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRMaW5lRGFzaD4gY3JlYXRl
KGNvbnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0TGluZURhc2g7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKKyAgICAgICAg
OiBtX2Rhc2hBcnJheShkYXNoQXJyYXkpCisgICAgICAgICwgbV9kYXNoT2Zmc2V0KGRhc2hPZmZz
ZXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRMaW5lRGFzaChkYXNo
QXJyYXksIGRhc2hPZmZzZXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5TZXRMaW5lRGFzaCgpOwotCiAgICAgY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXkoKSBjb25z
dCB7IHJldHVybiBtX2Rhc2hBcnJheTsgfQogICAgIGZsb2F0IGRhc2hPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2Rhc2hPZmZzZXQ7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNP
UkVfRVhQT1JUIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQp
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRMaW5lRGFzaD4gZGVjb2RlKERl
Y29kZXImKTsKIAorcHJpdmF0ZToKICAgICBEYXNoQXJyYXkgbV9kYXNoQXJyYXk7CiAgICAgZmxv
YXQgbV9kYXNoT2Zmc2V0OwogfTsKQEAgLTk3MCw3ICs2ODEsNyBAQCB2b2lkIFNldExpbmVEYXNo
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFNldExpbmVEYXNoPiBTZXRMaW5lRGFzaDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RGFzaEFycmF5PiBkYXNoQXJyYXk7
CiAgICAgZGVjb2RlciA+PiBkYXNoQXJyYXk7CkBAIC05ODIsMjE1ICs2OTMsMTM4IEBAIE9wdGlv
bmFsPFJlZjxTZXRMaW5lRGFzaD4+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWRhc2hPZmZzZXQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICByZXR1cm4gU2V0TGluZURhc2g6OmNyZWF0ZSgqZGFzaEFycmF5LCAqZGFzaE9mZnNldCk7
CisgICAgcmV0dXJuIHt7ICpkYXNoQXJyYXksICpkYXNoT2Zmc2V0IH19OwogfQogCi1jbGFzcyBT
ZXRMaW5lSm9pbiA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVKb2luIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFNldExpbmVKb2luPiBjcmVhdGUoTGluZUpvaW4gbGluZUpvaW4pCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgU2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCisgICAgICAgIDogbV9saW5lSm9pbihsaW5lSm9p
bikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVKb2luKGxpbmVK
b2luKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0TGluZUpvaW4o
KTsKLSAgICAKICAgICBMaW5lSm9pbiBsaW5lSm9pbigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUpv
aW47IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PFNldExpbmVKb2luPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTZXRMaW5lSm9pbihMaW5lSm9pbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQogCitwcml2YXRlOgogICAgIExpbmVKb2luIG1fbGluZUpvaW47CiB9OwogCi10ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgotdm9pZCBTZXRMaW5lSm9pbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVKb2luOwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNldExpbmVKb2luPj4gU2V0TGluZUpvaW46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVKb2luPiBsaW5lSm9pbjsK
LSAgICBkZWNvZGVyID4+IGxpbmVKb2luOwotICAgIGlmICghbGluZUpvaW4pCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TGluZUpvaW46OmNyZWF0ZSgqbGlu
ZUpvaW4pOwotfQotCi1jbGFzcyBTZXRNaXRlckxpbWl0IDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0TWl0ZXJMaW1pdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXRNaXRlckxpbWl0PiBj
cmVhdGUoZmxvYXQgbGltaXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7CisKKyAgICBTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCisgICAg
ICAgIDogbV9taXRlckxpbWl0KG1pdGVyTGltaXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTZXRNaXRlckxpbWl0KGxpbWl0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2V0TWl0ZXJMaW1pdCgpOwotCiAgICAgZmxvYXQgbWl0ZXJMaW1pdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWl0ZXJMaW1pdDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IGRlY29kZShEZWNvZGVy
Jik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TWl0ZXJMaW1pdChmbG9hdCk7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fbWl0
ZXJMaW1pdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldE1pdGVyTGlt
aXQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9t
aXRlckxpbWl0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNl
dE1pdGVyTGltaXQ+PiBTZXRNaXRlckxpbWl0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxmbG9hdD4gbWl0ZXJMaW1pdDsKLSAgICBkZWNvZGVyID4+IG1pdGVyTGlt
aXQ7Ci0gICAgaWYgKCFtaXRlckxpbWl0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIFNldE1pdGVyTGltaXQ6OmNyZWF0ZSgqbWl0ZXJMaW1pdCk7Ci19Ci0KLWNs
YXNzIENsZWFyU2hhZG93IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xlYXJTaGFkb3cgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJTaGFkb3c+IGNyZWF0ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclNoYWRvdyk7Ci0gICAgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+Q2xlYXJTaGFkb3coKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNs
ZWFyU2hhZG93OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJTaGFkb3coKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBDbGVhclNo
YWRvdzo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPENsZWFyU2hhZG93Pj4gQ2xlYXJTaGFkb3c6OmRlY29kZShEZWNv
ZGVyJikKLXsKLSAgICByZXR1cm4gQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpOwotfQotCi0vLyBGSVhN
RTogdHJlYXQgYXMgRHJhd2luZ0l0ZW0/Ci1jbGFzcyBDbGlwIDogcHVibGljIEl0ZW0geworLy8g
RklYTUU6IHRyZWF0IGFzIGRyYXdpbmcgaXRlbT8KK2NsYXNzIENsaXAgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8Q2xpcD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXA7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xpcChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+Q2xpcCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Q2xpcD4+IGRlY29kZShE
ZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXAoY29uc3QgRmxvYXRSZWN0Jik7
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IENsaXA6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXA+
PiBDbGlwOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGlwOjpjcmVhdGUoKnJlY3QpOwot
fQotCi1jbGFzcyBDbGlwT3V0IDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcE91dCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwT3V0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xp
cE91dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0KHJlY3QpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0KCk7CisgICAgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBGbG9hdFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxDbGlwT3V0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgQ2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcE91dDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcE91dD4+IENsaXBPdXQ6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNv
ZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIENsaXBPdXQ6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBP
dXRUb1BhdGggOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0VG9QYXRoIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPENsaXBPdXRUb1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcE91
dFRvUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAg
IENsaXBPdXRUb1BhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKFdURk1vdmUocGF0
aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwT3V0VG9QYXRoKHBh
dGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwT3V0VG9QYXRo
KCk7CisgICAgQ2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0
aChwYXRoKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxDbGlwT3V0VG9QYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gZGVjb2RlKERl
Y29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0VG9QYXRoKGNv
bnN0IFBhdGgmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKLSAgICBjb25zdCBQYXRo
IG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgpAQCAtMTIwMCwzNyArODM0LDQ3IEBAIHZvaWQgQ2xpcE91dFRvUGF0aDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8Q2xpcE91dFRvUGF0aD4+IENsaXBPdXRUb1BhdGg6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcE91dFRvUGF0aD4gQ2xpcE91dFRvUGF0aDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBk
ZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgcmV0dXJuIENsaXBPdXRUb1BhdGg6OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0
dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBDbGlwUGF0aCA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIENsaXBQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBQYXRo
PiBjcmVhdGUoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwUGF0aDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBQYXRoKFBhdGgm
JiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRo
KSkKKyAgICAgICAgLCBtX3dpbmRSdWxlKHdpbmRSdWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB+Q2xpcFBhdGgoKTsKKyAgICBDbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICAgICAgLCBt
X3dpbmRSdWxlKHdpbmRSdWxlKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3dpbmRSdWxlOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBDbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxDbGlwUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIGNvbnN0
IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKICAgICBXaW5kUnVsZSBt
X3dpbmRSdWxlOwogfTsKIApAQCAtMTI0Miw3ICs4ODYsNyBAQCB2b2lkIENsaXBQYXRoOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxDbGlwUGF0aD4+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPENsaXBQYXRoPiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CkBAIC0x
MjU0LDMwICs4OTgsNTAgQEAgT3B0aW9uYWw8UmVmPENsaXBQYXRoPj4gQ2xpcFBhdGg6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghd2luZFJ1bGUpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xpcFBhdGg6OmNyZWF0ZSgqcGF0aCwgKndpbmRS
dWxlKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCksICp3aW5kUnVsZSB9fTsKIH0KIAot
Y2xhc3MgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsaXBUb0RyYXdpbmdD
b21tYW5kcz4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICAgICAgOiBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNw
YWNlKQorICAgICAgICAsIG1fZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRz
KSkKKyAgICB7CisgICAgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IENsaXBU
b0RyYXdpbmdDb21tYW5kcyYgb3RoZXIpCisgICAgICAgIDogbV9kZXN0aW5hdGlvbihvdGhlci5t
X2Rlc3RpbmF0aW9uKQorICAgICAgICAsIG1fY29sb3JTcGFjZShvdGhlci5tX2NvbG9yU3BhY2Up
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkpOwor
ICAgICAgICAvLyBGSVhNRTogQ29weSBtX2RyYXdpbmdDb21tYW5kcy4KICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7CisgICAgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzJiBvcGVyYXRvcj0oY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBvdGhlcikK
KyAgICB7CisgICAgICAgIG1fZGVzdGluYXRpb24gPSBvdGhlci5tX2Rlc3RpbmF0aW9uOworICAg
ICAgICBtX2NvbG9yU3BhY2UgPSBvdGhlci5tX2NvbG9yU3BhY2U7CisgICAgICAgIC8vIEZJWE1F
OiBDb3B5IG1fZHJhd2luZ0NvbW1hbmRzLgorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQog
CiAgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X2NvbG9yU3BhY2U7IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZHJhd2luZ0NvbW1hbmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmF3aW5nQ29tbWFuZHM7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPENsaXBUb0RyYXdpbmdDb21tYW5kcz4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSwgRGlzcGxheUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMp
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9kZXN0aW5hdGlvbjsKICAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKICAgICBEaXNwbGF5
TGlzdCBtX2RyYXdpbmdDb21tYW5kczsKQEAgLTEyODgsMTEgKzk1MiwxMSBAQCB2b2lkIENsaXBU
b0RyYXdpbmdDb21tYW5kczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAg
ZW5jb2RlciA8PCBtX2Rlc3RpbmF0aW9uOwogICAgIGVuY29kZXIgPDwgbV9jb2xvclNwYWNlOwot
ICAgIGVuY29kZXIgPDwgbV9kcmF3aW5nQ29tbWFuZHM7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBhIHdheSB0byBlbmNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlzdHMuCiB9CiAKIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPENs
aXBUb0RyYXdpbmdDb21tYW5kcz4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwogICAg
IGRlY29kZXIgPj4gZGVzdGluYXRpb247CkBAIC0xMzA0LDI3ICs5NjgsMTYgQEAgT3B0aW9uYWw8
UmVmPENsaXBUb0RyYXdpbmdDb21tYW5kcz4+IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2Rl
KERlY29kZXImIGRlY28KICAgICBpZiAoIWNvbG9yU3BhY2UpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBPcHRpb25hbDxEaXNwbGF5TGlzdD4gZHJhd2luZ0NvbW1hbmRzOwot
ICAgIGRlY29kZXIgPj4gZHJhd2luZ0NvbW1hbmRzOwotICAgIGlmICghZHJhd2luZ0NvbW1hbmRz
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIENsaXBUb0RyYXdp
bmdDb21tYW5kczo6Y3JlYXRlKCpkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIFdURk1vdmUoKmRy
YXdpbmdDb21tYW5kcykpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYSB3YXkgdG8gZGVjb2Rl
IGluLW1lbW9yeSBkaXNwbGF5IGxpc3RzLgorICAgIERpc3BsYXlMaXN0IGRyYXdpbmdDb21tYW5k
czsKKyAgICByZXR1cm4ge3sgKmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3
aW5nQ29tbWFuZHMpIH19OwogfQogCi1jbGFzcyBEcmF3R2x5cGhzIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIERyYXdHbHlwaHMgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ds
eXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGds
eXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQs
IGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
bmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0dseXBocyhm
b250LCBnbHlwaHMsIGFkdmFuY2VzLCBjb3VudCwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUp
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmPERyYXdHbHlwaHM+IGNyZWF0ZShjb25zdCBGb250
JiBmb250LCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmIGdseXBocywgVmVjdG9yPEds
eXBoQnVmZmVyQWR2YW5jZSwgMTI4PiYmIGFkdmFuY2VzLCBjb25zdCBGbG9hdFBvaW50JiBsb2Nh
bEFuY2hvciwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdHbHlwaHMoZm9udCwgV1RGTW92ZShnbHlwaHMpLCBX
VEZNb3ZlKGFkdmFuY2VzKSwgbG9jYWxBbmNob3IsIHNtb290aGluZ01vZGUpKTsKLSAgICB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3R2x5cGhzKCk7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3R2x5cGhzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKICAgICBjb25zdCBGbG9hdFBvaW50
JiBsb2NhbEFuY2hvcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxBbmNob3I7IH0KIApAQCAtMTMz
MywyMSArOTg2LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlw
aCwgMTI4PiYgZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHM7IH0KIAogICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdHbHlwaHM+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxEcmF3R2x5cGhzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgogICAgIERyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3Is
IEZvbnRTbW9vdGhpbmdNb2RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3R2x5cGhzKGNvbnN0
IEZvbnQmLCBWZWN0b3I8R2x5cGhCdWZmZXJHbHlwaCwgMTI4PiYmLCBWZWN0b3I8R2x5cGhCdWZm
ZXJBZHZhbmNlLCAxMjg+JiYsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21v
b3RoaW5nTW9kZSk7CiAKLSAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKK3ByaXZhdGU6CisgICAgdm9pZCBjb21w
dXRlQm91bmRzKCk7CiAgICAgR2x5cGhCdWZmZXIgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpIGNvbnN0
OwogCi0gICAgUmVmPEZvbnQ+IG1fZm9udDsKKyAgICBSZWZQdHI8Rm9udD4gbV9mb250OwogICAg
IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+IG1fZ2x5cGhzOwogICAgIFZlY3RvcjxHbHlw
aEJ1ZmZlckFkdmFuY2UsIDEyOD4gbV9hZHZhbmNlczsKICAgICBGbG9hdFJlY3QgbV9ib3VuZHM7
CkBAIC0xMzU4LDcgKzEwMTEsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
IHZvaWQgRHJhd0dseXBoczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAg
ZW5jb2RlciA8PCBtX2ZvbnQ7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCptX2ZvbnQpOwogICAg
IGVuY29kZXIgPDwgbV9nbHlwaHM7CiAgICAgZW5jb2RlciA8PCBtX2FkdmFuY2VzOwogICAgIGVu
Y29kZXIgPDwgbV9sb2NhbEFuY2hvcjsKQEAgLTEzNjYsNyArMTAxOSw3IEBAIHZvaWQgRHJhd0ds
eXBoczo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdHbHlwaHM6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0dseXBocz4gRHJhd0dseXBoczo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVmPEZvbnQ+PiBmb250OwogICAg
IGRlY29kZXIgPj4gZm9udDsKQEAgLTEzOTYsMzIgKzEwNDksMzYgQEAgT3B0aW9uYWw8UmVmPERy
YXdHbHlwaHM+PiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAo
IXNtb290aGluZ01vZGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1
cm4gRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQtPmdldCgpLCBXVEZNb3ZlKCpnbHlwaHMpLCBXVEZN
b3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hvciwgKnNtb290aGluZ01vZGUpOworICAgIHJldHVy
biB7eyBmb250LT5nZXQoKSwgV1RGTW92ZSgqZ2x5cGhzKSwgV1RGTW92ZSgqYWR2YW5jZXMpLCAq
bG9jYWxBbmNob3IsICpzbW9vdGhpbmdNb2RlIH19OwogfQogCi1jbGFzcyBEcmF3SW1hZ2UgOiBw
dWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPERyYXdJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKKyAgICAgICAgOiBtX2lt
YWdlKGltYWdlKQorICAgICAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCisgICAgICAg
ICwgbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1h
Z2VQYWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIGltYWdlUGFpbnRpbmdPcHRpb25z
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ltYWdlKCk7Ci0K
ICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAg
RmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQog
CiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0lt
YWdlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0ltYWdlPiBkZWNvZGUoRGVjb2Rl
ciYpOwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJbWFn
ZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBhbmlt
YXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUuCiAg
ICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRSZWN0IG1fc291cmNlOwpAQCAt
MTQ0MSw3ICsxMDk4LDcgQEAgdm9pZCBEcmF3SW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdJ
bWFnZT4+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3
SW1hZ2U+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9u
YWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7
CkBAIC0xNDYzLDE3ICsxMTIwLDE0IEBAIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBEcmF3SW1h
Z2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlv
bnMpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ltYWdl
OjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAqc291cmNlLCAqaW1h
Z2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAq
ZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9ucyB9fTsKIH0KIAotY2xh
c3MgRHJhd1RpbGVkSW1hZ2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd1RpbGVk
SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd1RpbGVkSW1hZ2U+IGNyZWF0ZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3VGlsZWRJbWFnZShpbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIGltYWdlUGFpbnRpbmdP
cHRpb25zKSk7Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVk
SW1hZ2UoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRy
dWU7CiAKICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdl
dCgpOyB9CiAgICAgRmxvYXRQb2ludCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsg
fQpAQCAtMTQ4MiwxNiArMTEzNiwyNSBAQCBwdWJsaWM6CiAgICAgRmxvYXRTaXplIHRpbGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQogICAgIEZsb2F0U2l6ZSBzcGFjaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgRHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNp
emUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2Up
CisgICAgICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKKyAgICAgICAgLCBtX3NwYWNpbmcoc3Bh
Y2luZykKKyAgICAgICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRp
b25zKQorICAgIHsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvbjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGls
ZWRJbWFnZT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBtdXRhYmxlIFJlZjxJ
bWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBjYXVzZSB0aGVpciBh
bmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRvIGJlIG11dGFibGUu
CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiAgICAgRmxvYXRQb2ludCBtX3NvdXJjZTsK
QEAgLTE1MTQsNyArMTE3Nyw3IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPERyYXdUaWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkSW1hZ2U+IERyYXdUaWxlZEltYWdlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VIYW5kbGU7
CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE1NDYsMzIgKzEyMDksMzkgQEAgT3B0
aW9uYWw8UmVmPERyYXdUaWxlZEltYWdlPj4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQogICAgIGlmICghaW1hZ2VQYWludGluZ09wdGlvbnMpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1RpbGVkSW1hZ2U6OmNyZWF0ZSgqaW1h
Z2VIYW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2l6ZSwgKnNwYWNp
bmcsICppbWFnZVBhaW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+
aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdl
UGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRTY2FsZWRJbWFnZSB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdl
UGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwgbV9k
ZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAg
ICAgICwgbV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQorICAgICAgICAsIG1faFJ1
bGUoaFJ1bGUpCisgICAgICAgICwgbV92UnVsZSh2UnVsZSkKKyAgICAgICAgLCBtX2ltYWdlUGFp
bnRpbmdPcHRpb25zKGltYWdlUGFpbnRpbmdPcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9u
cykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdUaWxlZFNjYWxl
ZEltYWdlKCk7Ci0KICAgICBjb25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2lt
YWdlLmdldCgpOyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlOyB9CiAgICAgRmxvYXRSZWN0IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4g
ZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGls
ZWRTY2FsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCitwcml2YXRlOgogICAgIG11dGFi
bGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNl
IHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUg
bXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9z
b3VyY2U7CkBAIC0xNTk2LDcgKzEyNjYsNyBAQCB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2FsZWRJbWFnZT4+IERyYXdUaWxlZFNjYWxlZElt
YWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdUaWxlZFNjYWxlZElt
YWdlPiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1h
Z2VIYW5kbGU7CkBAIC0xNjMxLDMzICsxMzAxLDM3IEBAIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRT
Y2FsZWRJbWFnZT4+IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
CiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhh
bmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1
bGUsIHZSdWxlLCAqaW1hZ2VQYWludGluZ09wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VI
YW5kbGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICp0aWxlU2NhbGVGYWN0b3IsIGhS
dWxlLCB2UnVsZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3SW1h
Z2VCdWZmZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ltYWdlQnVmZmVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdJbWFnZUJ1ZmZlcj4gY3JlYXRlKFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ltYWdlQnVmZmVyKFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCisgICAgICAgIDogbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQorICAgICAgICAsIG1fZGVzdGluYXRp
b25SZWN0KGRlc3RSZWN0KQorICAgICAgICAsIG1fc3JjUmVjdChzcmNSZWN0KQorICAgICAgICAs
IG1fb3B0aW9ucyhvcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0ltYWdlQnVmZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgZGVzdGluYXRpb24s
IHNvdXJjZSwgb3B0aW9ucykpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkRyYXdJbWFnZUJ1ZmZlcigpOwotCiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyOyB9CiAgICAgRmxvYXRSZWN0IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3JjUmVjdDsgfQogICAgIEZsb2F0UmVjdCBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogICAgIEltYWdlUGFpbnRpbmdPcHRpb25zIG9wdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IGRlY29kZShEZWNv
ZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxEcmF3SW1hZ2VCdWZmZXI+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZh
dGU6CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyOwogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKICAgICBGbG9hdFJl
Y3QgbV9zcmNSZWN0OwpAQCAtMTY3NCw3ICsxMzQ4LDcgQEAgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3SW1hZ2VCdWZmZXI+IERyYXdJbWFn
ZUJ1ZmZlcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyPiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CiAgICAg
ZGVjb2RlciA+PiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7CkBAIC0xNjk2LDMxICsxMzcw
LDI5IEBAIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2VCdWZmZXI+PiBEcmF3SW1hZ2VCdWZmZXI6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSgqcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpvcHRpb25z
KTsKKyAgICByZXR1cm4ge3sgKnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgKmRlc3RpbmF0
aW9uLCAqc291cmNlLCAqb3B0aW9ucyB9fTsKIH0KIAotY2xhc3MgRHJhd05hdGl2ZUltYWdlIDog
cHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdOYXRpdmVJbWFnZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFnZVB0
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd05h
dGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7
Ci0gICAgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAot
ICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KLSAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJl
Y3Q7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxE
cmF3TmF0aXZlSW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvblJlY3QoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KIAotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOwogICAgIEZsb2F0U2l6
ZSBtX2ltYWdlU2l6ZTsKICAgICBGbG9hdFJlY3QgbV9kZXN0aW5hdGlvblJlY3Q7CkBAIC0xNzM5
LDcgKzE0MTEsNyBAQCB2b2lkIERyYXdOYXRpdmVJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJh
d05hdGl2ZUltYWdlPj4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxOYXRpdmVJbWFnZVB0cj4gaW1hZ2U7CiAgICAg
ZGVjb2RlciA+PiBpbWFnZTsKQEAgLTE3NjYsMTcgKzE0MzgsMTYgQEAgT3B0aW9uYWw8UmVmPERy
YXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIERyYXdOYXRpdmVJbWFnZTo6Y3JlYXRlKCppbWFnZSwgKmltYWdlU2l6ZSwgKmRlc3Rp
bmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlLCAq
aW1hZ2VTaXplLCAqZGVzdGluYXRpb25SZWN0LCAqc3JjUmVjdCwgKm9wdGlvbnMgfX07CiB9CiAK
LWNsYXNzIERyYXdQYXR0ZXJuIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdQYXR0
ZXJuIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdQYXR0ZXJuPiBjcmVhdGUoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0dGVybjsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
RHJhd1BhdHRlcm4oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIGNv
bnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3BhdHRlcm5UcmFuc2Zvcm07IH0KQEAgLTE3ODUsMTYgKzE0NTYsMTUgQEAgcHVibGljOgogICAg
IEZsb2F0UG9pbnQgcGhhc2UoKSBjb25zdCB7IHJldHVybiBtX3BoYXNlOyB9CiAgICAgRmxvYXRT
aXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNpbmc7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gZGVjb2Rl
KERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3UGF0dGVybihJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2Rlc3RpbmF0aW9uOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEcmF3UGF0dGVybj4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBt
dXRhYmxlIFJlZjxJbWFnZT4gbV9pbWFnZTsgLy8gRklYTUU6IERyYXdpbmcgaW1hZ2VzIGNhbiBj
YXVzZSB0aGVpciBhbmltYXRpb25zIHRvIHByb2dyZXNzLiBUaGlzIHNob3VsZG4ndCBoYXZlIHRv
IGJlIG11dGFibGUuCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAg
ICBGbG9hdFJlY3QgbV90aWxlUmVjdDsKQEAgLTE4MTksNyArMTQ4OSw3IEBAIHZvaWQgRHJhd1Bh
dHRlcm46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1BhdHRlcm4+IERyYXdQYXR0ZXJuOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1h
Z2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE4NTYsMTgyICsxNTI2
LDEwMCBAQCBPcHRpb25hbDxSZWY8RHJhd1BhdHRlcm4+PiBEcmF3UGF0dGVybjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFvcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQYXR0ZXJuOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5p
bWFnZSwgKmRlc3RpbmF0aW9uLCAqdGlsZVJlY3QsICpwYXR0ZXJuVHJhbnNmb3JtLCAqcGhhc2Us
ICpzcGFjaW5nLCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2Us
ICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAqc3Bh
Y2luZywgKm9wdGlvbnMgfX07CiB9CiAKLS8vIElzIERyYXdpbmdJdGVtIGJlY2F1c2UgdGhlIHNp
emUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5k
cy4KLWNsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgQmVnaW5UcmFuc3BhcmVuY3lMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxC
ZWdpblRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoZmxvYXQgb3BhY2l0eSkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOyAvLyBJcyBkcmF3
aW5nIGl0ZW0gYmVjYXVzZSB0aGUgc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGxheWVyIGlzIGlt
cGxpY2l0bHkgdGhlIGNsaXAgYm91bmRzLgorCisgICAgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQorICAgICAgICA6IG1fb3BhY2l0eShvcGFjaXR5KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KSk7
CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+QmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpOwotCiAgICAgZmxvYXQgb3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhY2l0eTsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QmVn
aW5UcmFuc3BhcmVuY3lMYXllcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vcGFjaXR5
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X29wYWNpdHk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QmVn
aW5UcmFuc3BhcmVuY3lMYXllcj4+IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBvcGFjaXR5OwotICAgIGRlY29k
ZXIgPj4gb3BhY2l0eTsKLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gQmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCpvcGFj
aXR5KTsKLX0KLQotY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworY2xhc3MgRW5kVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBFbmRUcmFuc3BhcmVuY3lMYXllcik7Ci0gICAgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+RW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVy
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBFbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUo
RW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+PiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZGVjb2Rl
KERlY29kZXImKQotewotICAgIHJldHVybiBFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCk7
Ci19Ci0KLWNsYXNzIERyYXdSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdS
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdSZWN0PiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UmVjdDsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3UmVjdChGbG9hdFJlY3QgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAs
IG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVzcykKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcykpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdSZWN0KCk7Ci0KICAgICBGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGZsb2F0IGJvcmRlclRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyVGhpY2tuZXNzOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UmVjdD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1fYm9yZGVyVGhpY2tuZXNzOwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd1JlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9i
b3JkZXJUaGlja25lc3M7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8RHJhd1JlY3Q+PiBEcmF3UmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAo
IXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxmbG9h
dD4gYm9yZGVyVGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4gYm9yZGVyVGhpY2tuZXNzOwotICAg
IGlmICghYm9yZGVyVGhpY2tuZXNzKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIERyYXdSZWN0OjpjcmVhdGUoKnJlY3QsICpib3JkZXJUaGlja25lc3MpOwotfQot
Ci1jbGFzcyBEcmF3TGluZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3TGluZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TGluZT4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0xpbmU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0xpbmUoRmxvYXRQb2ludCBwb2lu
dDEsIEZsb2F0UG9pbnQgcG9pbnQyKQorICAgICAgICA6IG1fcG9pbnQxKHBvaW50MSkKKyAgICAg
ICAgLCBtX3BvaW50Mihwb2ludDIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEcmF3TGluZShwb2ludDEsIHBvaW50MikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdMaW5lKCk7Ci0KICAgICBGbG9hdFBvaW50IHBvaW50MSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnQxOyB9CiAgICAgRmxvYXRQb2ludCBwb2ludDIoKSBjb25zdCB7IHJldHVy
biBtX3BvaW50MjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8RHJhd0xpbmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBt
X3BvaW50MTsKICAgICBGbG9hdFBvaW50IG1fcG9pbnQyOwogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgRHJhd0xpbmU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9wb2ludDE7Ci0gICAgZW5jb2RlciA8PCBtX3BvaW50MjsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZT4+IERyYXdM
aW5lOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFBvaW50
PiBwb2ludDE7Ci0gICAgZGVjb2RlciA+PiBwb2ludDE7Ci0gICAgaWYgKCFwb2ludDEpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBwb2lu
dDI7Ci0gICAgZGVjb2RlciA+PiBwb2ludDI7Ci0gICAgaWYgKCFwb2ludDIpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQx
LCAqcG9pbnQyKTsKLX0KLQotY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3TGluZXNGb3JUZXh0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PERyYXdMaW5lc0ZvclRleHQ+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9u
LCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJhd0xpbmVzRm9yVGV4dChibG9ja0xvY2F0
aW9uLCBsb2NhbEFuY2hvciwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cykpOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IGJsb2NrTG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgbG9jYWxBbmNob3IsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpOwogCiAgICAgdm9pZCBzZXRCbG9ja0xvY2F0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGJs
b2NrTG9jYXRpb24pIHsgbV9ibG9ja0xvY2F0aW9uID0gYmxvY2tMb2NhdGlvbjsgfQogICAgIGNv
bnN0IEZsb2F0UG9pbnQmIGJsb2NrTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrTG9j
YXRpb247IH0KQEAgLTIwNDIsMTYgKzE2MzAsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcmlu
dGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KICAgICBib29sIGRvdWJsZUxpbmVz
KCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVMaW5lczsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0xpbmVzRm9yVGV4dD4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2Fs
QW5jaG9yLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd0xpbmVzRm9yVGV4
dD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYmxvY2tM
b2NhdGlvbjsKICAgICBGbG9hdFNpemUgbV9sb2NhbEFuY2hvcjsKICAgICBEYXNoQXJyYXkgbV93
aWR0aHM7CkBAIC0yMDcyLDcgKzE2NTksNyBAQCB2b2lkIERyYXdMaW5lc0ZvclRleHQ6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdMaW5lc0ZvclRleHQ+IERyYXdMaW5lc0Zv
clRleHQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IGJsb2NrTG9jYXRpb247CiAgICAgZGVjb2RlciA+PiBibG9ja0xvY2F0aW9uOwpAQCAtMjEw
NCwxMTkgKzE2OTEsODMgQEAgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBEcmF3TGlu
ZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWRvdWJsZUxpbmVz
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdMaW5lc0Zv
clRleHQ6OmNyZWF0ZSgqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAq
d2lkdGhzLCAqcHJpbnRpbmcsICpkb3VibGVMaW5lcyk7CisgICAgcmV0dXJuIHt7ICpibG9ja0xv
Y2F0aW9uLCAqbG9jYWxBbmNob3IsICp0aGlja25lc3MsICp3aWR0aHMsICpwcmludGluZywgKmRv
dWJsZUxpbmVzIH19OwogfQogCi1jbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAg
ICAgICAgLCBtX3N0eWxlKHN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKTsKLQog
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OworCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOworICAgIEZsb2F0UmVjdCBtX3JlY3Q7CisgICAg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgbV9zdHlsZTsKK307CisKK2NsYXNzIERyYXdFbGxpcHNl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OkRyYXdFbGxpcHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIERyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBt
X3JlY3QocmVjdCkKKyAgICB7CisgICAgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQorCisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMo
KSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7Ci0gICAgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgbV9zdHlsZTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotICAgIGVuY29kZXIgPDwgbV9zdHlsZTsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyPj4gRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4g
cmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAg
ICBPcHRpb25hbDxEb2N1bWVudE1hcmtlckxpbmVTdHlsZT4gc3R5bGU7Ci0gICAgZGVjb2RlciA+
PiBzdHlsZTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZSgqcmVjdCwgKnN0
eWxlKTsKLX0KLQotY2xhc3MgRHJhd0VsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRHJhd1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0VsbGlwc2U+IGNyZWF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAg
OiBtX3BhdGgocGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdF
bGxpcHNlKHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+RHJhd0VsbGlwc2Uo
KTsKLQotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0KLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3RWxsaXBz
ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9Ci0KLSAgICBGbG9hdFJlY3QgbV9yZWN0OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgRHJhd0VsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPERyYXdFbGxpcHNlPj4gRHJhd0VsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJl
Y3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIERyYXdFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBEcmF3UGF0aCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4g
Y3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgRHJhd1BhdGgoUGF0aCYmIHBhdGgpCisgICAg
ICAgIDogbV9wYXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEcmF3UGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RHJhd1BhdGgoKTsKLQogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVy
biBtX3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPERyYXdQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RHJhd1BhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdGgoY29uc3QgUGF0aCYpOwotCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAotICAgIGNvbnN0IFBhdGggbV9w
YXRoOworcHJpdmF0ZToKKyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+CkBAIC0yMjI2LDI0ICsxNzc3LDM3IEBAIHZvaWQgRHJhd1BhdGg6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPERyYXdQYXRoPj4gRHJhd1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8RHJhd1BhdGg+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBpZiAoIXBh
dGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd1BhdGg6
OmNyZWF0ZSgqcGF0aCk7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1j
bGFzcyBEcmF3Rm9jdXNSaW5nUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3
Rm9jdXNSaW5nUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUGF0
aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CisKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChQYXRoJiYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRoKFdU
Rk1vdmUocGF0aCkpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdGb2N1c1JpbmdQYXRoKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd0ZvY3VzUmlu
Z1BhdGgoKTsKKyAgICBEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBDb2xvciBjb2xvcikKKyAgICAgICAgOiBtX3BhdGgocGF0aCkK
KyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CiAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3dpZHRoOyB9CkBAIC0yMjUxLDE2ICsxODE1LDE1IEBAIHB1YmxpYzoKICAgICBj
b25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUGF0
aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPERyYXdGb2N1c1JpbmdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3Bh
dGg7CiAgICAgZmxvYXQgbV93aWR0aDsKICAgICBmbG9hdCBtX29mZnNldDsKICAgICBDb2xvciBt
X2NvbG9yOwpAQCAtMjI3Niw3ICsxODM5LDcgQEAgdm9pZCBEcmF3Rm9jdXNSaW5nUGF0aDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gRHJhd0Zv
Y3VzUmluZ1BhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBh
dGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwpAQCAtMjI5OCwzMyArMTg2MSwzMSBAQCBP
cHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1BhdGg+PiBEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUGF0aDo6Y3JlYXRlKCpwYXRoLCAq
d2lkdGgsICpvZmZzZXQsICpjb2xvcik7CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpLCAq
d2lkdGgsICpvZmZzZXQsICpjb2xvciB9fTsKIH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1JlY3Rz
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdGb2N1c1JpbmdSZWN0cyB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+IGNyZWF0ZShjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdGb2N1
c1JpbmdSZWN0cyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKLSAgICB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UmVjdHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1c1JpbmdSZWN0cygpOworICAgIFdFQkNPUkVf
RVhQT1JUIERyYXdGb2N1c1JpbmdSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7CiAKICAgICBjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiByZWN0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdHM7IH0KICAgICBmbG9hdCB3
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KICAgICBmbG9hdCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdSZWN0cz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1JlY3RzPiBkZWNvZGUoRGVjb2RlciYpOwogCitw
cml2YXRlOgogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fcmVjdHM7CiAgICAgZmxvYXQgbV93aWR0
aDsKICAgICBmbG9hdCBtX29mZnNldDsKQEAgLTIzNDEsNyArMTkwMiw3IEBAIHZvaWQgRHJhd0Zv
Y3VzUmluZ1JlY3RzOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBEcmF3
Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0Zv
Y3VzUmluZ1JlY3RzPiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIE9wdGlvbmFsPFZlY3RvcjxGbG9hdFJlY3Q+PiByZWN0czsKICAgICBkZWNvZGVy
ID4+IHJlY3RzOwpAQCAtMjM2Myw3MSArMTkyNCw1NSBAQCBPcHRpb25hbDxSZWY8RHJhd0ZvY3Vz
UmluZ1JlY3RzPj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICBpZiAoIWNvbG9yKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKCpyZWN0cywgKndpZHRoLCAqb2Zmc2V0LCAq
Y29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdHMsICp3aWR0aCwgKm9mZnNldCwgKmNvbG9yIH19
OwogfQogCi1jbGFzcyBGaWxsUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxs
UmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdD4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0g
SXRlbVR5cGU6OkZpbGxSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIEZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICAgICAgOiBtX3Jl
Y3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0KHJl
Y3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdCgpOwor
ICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAogcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlY3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBGaWxsUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3Q+PiBGaWxsUmVjdDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIg
Pj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4gRmlsbFJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLS8vIEZJWE1FOiBNYWtl
IHRoZXNlIGluaGVyaXQgZnJvbSBGaWxsUmVjdCBwcm9wZXIuCi1jbGFzcyBGaWxsUmVjdFdpdGhD
b2xvciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsUmVjdFdpdGhDb2xvciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0V2l0aENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6IG1f
cmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVjdFdpdGhDb2xvcihyZWN0LCBjb2xvcikpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aENvbG9yKCk7Ci0KICAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAotICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gZGVj
b2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSZWN0V2l0aENvbG9yKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJlY3RXaXRoQ29sb3I+IGRlY29k
ZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xv
ciBtX2NvbG9yOwogfTsKQEAgLTI0NDAsNyArMTk4NSw3IEBAIHZvaWQgRmlsbFJlY3RXaXRoQ29s
b3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RXaXRoQ29s
b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoQ29sb3I+
IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjQ1MiwyOSAr
MTk5NywyOSBAQCBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoQ29sb3I+PiBGaWxsUmVjdFdpdGhD
b2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhDb2xvcjo6Y3Jl
YXRlKCpyZWN0LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yIH19OwogfQog
Ci1jbGFzcyBGaWxsUmVjdFdpdGhHcmFkaWVudCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFz
cyBGaWxsUmVjdFdpdGhHcmFkaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUmVj
dFdpdGhHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRo
R3JhZGllbnQocmVjdCwgZ3JhZGllbnQpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RmlsbFJlY3RXaXRoR3JhZGllbnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGaWxs
UmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwogCi0gICAgRmxv
YXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBjb25zdCBHcmFkaWVudCYg
Z3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50LmdldCgpOyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFk
aWVudD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhHcmFk
aWVudChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Cisg
ICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aEdy
YWRpZW50PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3Jl
Y3Q7CiAgICAgbXV0YWJsZSBSZWY8R3JhZGllbnQ+IG1fZ3JhZGllbnQ7IC8vIEZJWE1FOiBNYWtl
IHRoaXMgbm90IG11dGFibGUKIH07CkBAIC0yNDg3LDcgKzIwMzIsNyBAQCB2b2lkIEZpbGxSZWN0
V2l0aEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhHcmFkaWVudD4+IEZp
bGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZp
bGxSZWN0V2l0aEdyYWRpZW50PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIg
Pj4gcmVjdDsKQEAgLTI0OTgsMzIgKzIwNDMsMzcgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0
aEdyYWRpZW50Pj4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUK
ICAgICBpZiAoIWdyYWRpZW50KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUoKnJlY3QsIGdyYWRpZW50LT5nZXQo
KSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCBncmFkaWVudC0+Z2V0KCkgfX07CiB9CiAKLWNsYXNz
IEZpbGxDb21wb3NpdGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBGaWxsQ29t
cG9zaXRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbENvbXBvc2l0ZWRSZWN0
PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsQ29tcG9zaXRl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0
KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisgICAgICAgICwgbV9vcChvcCkKKyAgICAgICAg
LCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsQ29tcG9zaXRlZFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsQ29tcG9zaXRlZFJlY3QoKTsK
LQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgY29u
c3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQogICAg
IEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9kZTsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbENvbXBv
c2l0ZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxDb21wb3Np
dGVkUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIENvbG9yIG1fY29sb3I7
CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9vcDsKQEAgLTI1NDAsNyArMjA5MCw3IEBAIHZvaWQg
RmlsbENvbXBvc2l0ZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRlZFJlY3Q+
PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8
RmlsbENvbXBvc2l0ZWRSZWN0PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNvZGVyID4+
IHJlY3Q7CkBAIC0yNTYyLDMxICsyMTEyLDM1IEBAIE9wdGlvbmFsPFJlZjxGaWxsQ29tcG9zaXRl
ZFJlY3Q+PiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IGlmICghYmxlbmRNb2RlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0
dXJuIEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKCpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5k
TW9kZSk7CisgICAgcmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpvcCwgKmJsZW5kTW9kZSB9fTsK
IH0KIAotY2xhc3MgRmlsbFJvdW5kZWRSZWN0IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNz
IEZpbGxSb3VuZGVkUmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUm91bmRlZFJl
Y3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICAg
ICAgLCBtX2JsZW5kTW9kZShibGVuZE1vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSb3VuZGVkUmVjdCgpOwotCiAgICAg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Q7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9
CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxlbmRNb2RlOyB9
CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxs
Um91bmRlZFJlY3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUm91bmRlZFJlY3Q+IGRlY29kZShEZWNvZGVyJik7CiAK
LXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3QucmVj
dCgpOyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdC5yZWN0KCk7IH0K
IAorcHJpdmF0ZToKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2Nv
bG9yOwogICAgIEJsZW5kTW9kZSBtX2JsZW5kTW9kZTsKQEAgLTI2MDEsNyArMjE1NSw3IEBAIHZv
aWQgRmlsbFJvdW5kZWRSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAog
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUm91bmRlZFJlY3Q+PiBG
aWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RmlsbFJv
dW5kZWRSZWN0PiBGaWxsUm91bmRlZFJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEZsb2F0Um91bmRlZFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0
OwpAQCAtMjYxOCwzMSArMjE3MiwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0Pj4g
RmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBpZiAoIWJsZW5k
TW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUm91
bmRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqYmxlbmRNb2RlKTsKKyAgICByZXR1cm4g
e3sgKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCisgICAgICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVSZWN0KQor
ICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9y
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoKTsKLQogICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcm91bmRlZEhvbGVSZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNv
bG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4gZGVjb2RlKERlY29kZXImKTsKIAotcHJpdmF0ZToK
LSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVj
dDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0
ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIEZsb2F0Um91bmRlZFJlY3QgbV9yb3VuZGVk
SG9sZVJlY3Q7CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTI2NTcsNyArMjIxNSw3IEBAIHZvaWQg
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IHJlY3Q7CiAgICAgZGVjb2RlciA+PiByZWN0OwpAQCAtMjY3NCw3NCArMjIzMiw2MyBAQCBP
cHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6ZGVjb2RlKERlY29kZXImCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Y3JlYXRl
KCpyZWN0LCAqcm91bmRlZEhvbGVSZWN0LCAqY29sb3IpOworICAgIHJldHVybiB7eyAqcmVjdCwg
KnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yIH19OwogfQogCiAjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCiAKLWNsYXNzIEZpbGxJbmxpbmVQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIEZpbGxJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxJbmxpbmVQ
YXRoPiBjcmVhdGUoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbElubGluZVBh
dGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEo
cGF0aERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsSW5saW5l
UGF0aChwYXRoRGF0YSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZp
bGxJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpm
cm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERh
dGEmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gcGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCitwcml2YXRl
OgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgotdm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gRmlsbElubGluZVBhdGg6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBw
YXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhEYXRhOwotICAgIGlmICghcGF0aERhdGEpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gRmlsbElubGluZVBhdGg6
OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOwotfQotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCiAKLWNsYXNzIEZpbGxQYXRoIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIEZpbGxQYXRoIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OkZpbGxQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBGaWxsUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RG
TW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxQYXRo
KHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUGF0aCgp
OworICAgIEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgp
CisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEZpbGxQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9w
YXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsK
K3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PgpAQCAtMjc1MSw5MCArMjI5OCw2NSBAQCB2b2lkIEZpbGxQYXRoOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsUGF0aD4+IEZpbGxQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PEZpbGxQYXRoPiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0
aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIEZpbGxQYXRoOjpjcmVh
dGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3Mg
RmlsbEVsbGlwc2UgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbEVsbGlwc2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbEVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpGaWxsRWxsaXBzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBGaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9y
ZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsRWxsaXBz
ZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbEVsbGlw
c2UoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsRWxs
aXBzZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
RmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9h
dFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbEVs
bGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxF
bGxpcHNlPj4gRmlsbEVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxFbGxp
cHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBQdXRJbWFnZURhdGEgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgUHV0SW1hZ2VEYXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZWY8UHV0SW1hZ2VEYXRhPiBjcmVhdGUoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiBpbWFnZURhdGEsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgV1RGTW92ZShpbWFnZURhdGEpLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGRlc3RGb3JtYXQpKTsKLSAgICB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflB1dElt
YWdlRGF0YSgpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RGb3JtYXQpOworICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXQ7IH0KLSAgICBJbWFnZURhdGEmIGltYWdl
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9CisgICAgSW1hZ2VEYXRhJiBpbWFn
ZURhdGEoKSBjb25zdCB7IHJldHVybiAqbV9pbWFnZURhdGE7IH0KICAgICBJbnRSZWN0IHNyY1Jl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBJbnRQb2ludCBkZXN0UG9pbnQo
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RQb2ludDsgfQogICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdEZvcm1hdDsgfQogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RGb3JtYXQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VEYXRhPiYmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4ge3sgbV9kZXN0
UG9pbnQsIG1fc3JjUmVjdC5zaXplKCkgfX07IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KG1fZGVzdFBv
aW50LCBtX3NyY1JlY3Quc2l6ZSgpKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZv
aWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBz
dGF0aWMgT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRl
OgogICAgIEludFJlY3QgbV9zcmNSZWN0OwogICAgIEludFBvaW50IG1fZGVzdFBvaW50OwotICAg
IFJlZjxJbWFnZURhdGE+IG1faW1hZ2VEYXRhOworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1faW1h
Z2VEYXRhOwogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gbV9pbnB1dEZvcm1hdDsKICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG1fZGVzdEZvcm1hdDsKIH07CkBAIC0yODQzLDE0ICsyMzY1
LDE0IEBAIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFB1dEltYWdlRGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2RlciA8PCBtX2lucHV0Rm9ybWF0
OwotICAgIGVuY29kZXIgPDwgbV9pbWFnZURhdGE7CisgICAgZW5jb2RlciA8PCBtYWtlUmVmKCpt
X2ltYWdlRGF0YSk7CiAgICAgZW5jb2RlciA8PCBtX3NyY1JlY3Q7CiAgICAgZW5jb2RlciA8PCBt
X2Rlc3RQb2ludDsKICAgICBlbmNvZGVyIDw8IG1fZGVzdEZvcm1hdDsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8UHV0SW1hZ2VEYXRhPiBQdXRJbWFn
ZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEFscGhhUHJl
bXVsdGlwbGljYXRpb24+IGlucHV0Rm9ybWF0OwogICAgIE9wdGlvbmFsPFJlZjxJbWFnZURhdGE+
PiBpbWFnZURhdGE7CkBAIC0yODc4LDE2OSArMjQwMCwxMDkgQEAgT3B0aW9uYWw8UmVmPFB1dElt
YWdlRGF0YT4+IFB1dEltYWdlRGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFkZXN0Rm9ybWF0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IFB1dEltYWdlRGF0YTo6Y3JlYXRlKCppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwg
KnNyY1JlY3QsICpkZXN0UG9pbnQsICpkZXN0Rm9ybWF0KTsKKyAgICByZXR1cm4ge3sgKmlucHV0
Rm9ybWF0LCBXVEZNb3ZlKCppbWFnZURhdGEpLCAqc3JjUmVjdCwgKmRlc3RQb2ludCwgKmRlc3RG
b3JtYXQgfX07CiB9CiAKLWNsYXNzIFBhaW50RnJhbWVGb3JNZWRpYSA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBjcmVhdGUoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5QYWludEZyYW1l
Rm9yTWVkaWEoKTsKKyAgICBQYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKIAogICAgIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAgICAgTWVkaWFQbGF5ZXJJZGVu
dGlmaWVyIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVG
b3JNZWRpYT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50
aWZpZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAg
UGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHsgbV9kZXN0aW5hdGlvbiB9OyB9CiAKK3ByaXZh
dGU6CiAgICAgTWVkaWFQbGF5ZXJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKICAgICBGbG9hdFJl
Y3QgbV9kZXN0aW5hdGlvbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFBh
aW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAg
ZW5jb2RlciA8PCBtX2lkZW50aWZpZXI7Ci0gICAgZW5jb2RlciA8PCBtX2Rlc3RpbmF0aW9uOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFBhaW50RnJhbWVGb3JN
ZWRpYT4+IFBhaW50RnJhbWVGb3JNZWRpYTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBpZGVudGlmaWVyOwotICAgIGRlY29k
ZXIgPj4gaWRlbnRpZmllcjsKLSAgICBpZiAoIWlkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGRlc3RpbmF0aW9uOwotICAg
IGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBQYWludEZyYW1lRm9yTWVkaWE6OmNy
ZWF0ZSgqaWRlbnRpZmllciwgKmRlc3RpbmF0aW9uKTsKLX0KLQotY2xhc3MgU3Ryb2tlUmVjdCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VSZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFN0cm9rZVJlY3Q+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRl
bVR5cGU6OlN0cm9rZVJlY3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVl
OworCisgICAgU3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2xpbmVXaWR0aChsaW5lV2lk
dGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VSZWN0KHJlY3Qs
IGxpbmVXaWR0aCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9r
ZVJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
CiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9saW5lV2lkdGg7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVJl
Y3Q+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCk7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAgZmxvYXQgbV9saW5lV2lk
dGg7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VSZWN0OjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAg
ICBlbmNvZGVyIDw8IG1fbGluZVdpZHRoOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPFN0cm9rZVJlY3Q+PiBTdHJva2VSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiBy
ZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IE9wdGlvbmFsPGZsb2F0PiBsaW5lV2lkdGg7Ci0gICAgZGVjb2RlciA+PiBsaW5lV2lkdGg7Ci0g
ICAgaWYgKCFsaW5lV2lkdGgpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBy
ZXR1cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGluZVdpZHRoKTsKLX0KLQogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VJbmxpbmVQYXRoIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUlubGluZVBhdGggewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBw
YXRoRGF0YSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGg7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgU3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERh
dGEpCisgICAgICAgIDogbV9wYXRoRGF0YShwYXRoRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQYXRoKCk7Ci0KICAgICBQYXRo
IHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CiAKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQ
YXRoPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBT
dHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgSW5saW5lUGF0aERhdGEgbV9wYXRoRGF0YTsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFN0cm9rZUlubGluZVBhdGg6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRo
Pj4gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0
aW9uYWw8SW5saW5lUGF0aERhdGE+IHBhdGhEYXRhOwotICAgIGRlY29kZXIgPj4gcGF0aERhdGE7
Ci0gICAgaWYgKCFwYXRoRGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTdHJva2VJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0K
LQogI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBTdHJva2VQYXRo
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZVBhdGggewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTdHJva2VQYXRoOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBTdHJva2VQYXRo
KFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUGF0aChwYXRoKSk7CiAgICAgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlUGF0aCgpOworICAgIFN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgocGF0aCkKKyAgICB7CisgICAgfQog
CiAgICAgY29uc3QgUGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFN0cm9rZVBhdGg+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgU3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICBjb25zdCBQYXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7
CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtMzA1MCw3MjEgKzI1MTIsMTE1IEBA
IHZvaWQgU3Ryb2tlUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlUGF0aD4+IFN0cm9rZVBh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8U3Ryb2tlUGF0aD4gU3Ryb2tl
UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0
aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYgKCFwYXRoKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIFN0cm9rZVBhdGg6OmNyZWF0ZSgqcGF0aCk7Cisg
ICAgcmV0dXJuIHt7IFdURk1vdmUoKnBhdGgpIH19OwogfQogCi1jbGFzcyBTdHJva2VFbGxpcHNl
IDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFN0cm9rZUVsbGlwc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U3Ryb2tlRWxsaXBzZT4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlN0
cm9rZUVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VFbGxpcHNl
KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+U3Ryb2tlRWxsaXBzZSgpOwor
ICAgIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0g
ICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlRWxsaXBzZT4+IGRlY29kZShEZWNvZGVyJik7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBG
bG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ry
b2tlRWxsaXBzZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
U3Ryb2tlRWxsaXBzZT4+IFN0cm9rZUVsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IFN0cm9rZUVsbGlwc2U6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsZWFyUmVjdCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBDbGVhclJlY3QgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q2xlYXJSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJSZWN0OworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIENsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhclJlY3QocmVjdCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsZWFyUmVjdCgpOworICAgIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0gICAgRmxvYXRSZWN0IHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8Q2xlYXJSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQot
CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIENsZWFyUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5j
b2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8Q2xlYXJSZWN0Pj4gQ2xlYXJSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlm
ICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBDbGVh
clJlY3Q6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KICNpZiBVU0UoQ0cpCi1jbGFzcyBBcHBseVN0cm9r
ZVBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxBcHBseVN0
cm9rZVBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcHBseVN0cm9rZVBhdHRlcm4pOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgfkFwcGx5U3Ryb2tlUGF0dGVybigpOwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXIm
KTsKK2NsYXNzIEFwcGx5U3Ryb2tlUGF0dGVybiB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBBcHBseVN0cm9rZVBhdHRlcm4oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseVN0cm9rZVBh
dHRlcm46OmVuY29kZShFbmNvZGVyJikgY29uc3QKLXsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseVN0cm9rZVBhdHRlcm4+PiBBcHBseVN0cm9rZVBhdHRl
cm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlTdHJva2VQYXR0ZXJuOjpj
cmVhdGUoKTsKLX0KLQotY2xhc3MgQXBwbHlGaWxsUGF0dGVybiA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIEFwcGx5RmlsbFBhdHRlcm4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBwbHlGaWxs
UGF0dGVybj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFw
cGx5RmlsbFBhdHRlcm4pOwotICAgIH0KKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5
RmlsbFBhdHRlcm4oKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8QXBwbHlG
aWxsUGF0dGVybj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgQXBwbHlGaWxsUGF0dGVybigpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseUZp
bGxQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlGaWxsUGF0dGVybj4+IEFwcGx5RmlsbFBhdHRl
cm46OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gQXBwbHlGaWxsUGF0dGVybjo6Y3Jl
YXRlKCk7Ci19CiAjZW5kaWYKIAotY2xhc3MgQXBwbHlEZXZpY2VTY2FsZUZhY3RvciA6IHB1Ymxp
YyBJdGVtIHsKK2NsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4gY3JlYXRlKGZsb2F0IHNjYWxlRmFjdG9y
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBw
bHlEZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKKyAg
ICAgICAgOiBtX3NjYWxlRmFjdG9yKHNjYWxlRmFjdG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvcikpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
KTsKLQogICAgIGZsb2F0IHNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZUZhY3Rv
cjsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rv
cik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV9zY2FsZUZhY3Rv
cjsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV9zY2FsZUZhY3RvciB7IDEgfTsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9zY2FsZUZhY3RvcjsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxBcHBseURldmljZVNj
YWxlRmFjdG9yPj4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCi17Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHNjYWxlRmFjdG9yOwotICAgIGRlY29kZXIgPj4g
c2NhbGVGYWN0b3I7Ci0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHJldHVybiBBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoKnNj
YWxlRmFjdG9yKTsKLX0KLQotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgY29uc3QgSXRlbSYpOwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBJ
dGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1f
dHlwZTsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTYXZlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8UmVzdG9yZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpU
cmFuc2xhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxSb3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2NhbGU+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldENUTT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxDb25jYXRlbmF0ZUNUTT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRT
dGF0ZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVDYXA+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U2V0TGluZURhc2g+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0TGluZUpvaW4+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRNaXRlckxp
bWl0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hh
ZG93OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyU2hhZG93PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8Q2xpcD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsaXBPdXQ+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0VG9QYXRoPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PENsaXBQYXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3
R2x5cGhzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJ
bWFnZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RHJhd05hdGl2ZUltYWdlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERy
YXdQYXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdSZWN0PigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdMaW5lPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RHJhd0xpbmVzRm9yVGV4dD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RHJhd0VsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1BhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd1BhdGg+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1Bh
dGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1BhdGg+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3Rz
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdDoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhDb2xvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RmlsbENvbXBvc2l0ZWRSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxGaWxsUm91bmRlZFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGlu
ZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KCp0aGlz
KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsUGF0aD4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxGaWxsRWxsaXBzZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UHV0
SW1hZ2VEYXRhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlBh
aW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxQYWludEZyYW1l
Rm9yTWVkaWE+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlUmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
U3Ryb2tlSW5saW5lUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ry
b2tlUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZUVsbGlwc2U+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENsZWFyUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgVVNFKENHKQotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tl
UGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseVN0cm9rZVBhdHRlcm4+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0
dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseUZpbGxQYXR0ZXJuPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxBcHBseURldmljZVNj
YWxlRmFjdG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8SXRlbVR5cGU+IGl0ZW1UeXBlOwotICAgIGRlY29k
ZXIgPj4gaXRlbVR5cGU7Ci0gICAgaWYgKCFpdGVtVHlwZSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIHN3aXRjaCAoKml0ZW1UeXBlKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2F2ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNhdmU6OmRlY29kZShkZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gUmVzdG9yZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFRyYW5zbGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IFJvdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2NhbGU6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRDVE06OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5l
RmlsbEdyYWRpZW50OiB7Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0U3RhdGU6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZUNhcDo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0TGluZURhc2g6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVKb2luOjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldE1pdGVyTGltaXQ6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyU2hhZG93OjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IENsaXA6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQ2xpcE91dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBD
bGlwT3V0VG9QYXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlw
UGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IENsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBEcmF3R2x5cGhzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRHJhd0ltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3SW1hZ2VCdWZmZXI6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1h
Z2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXR0ZXJuOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6
Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAg
ICBpZiAoYXV0byBpdGVtID0gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKGRlY29kZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3RWxsaXBz
ZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1BhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3Rm9jdXNSaW5nUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdGb2N1c1JpbmdQ
YXRoOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJh
d0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBG
aWxsUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbFJlY3RXaXRoQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJvdW5kZWRSZWN0OjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbElubGluZVBhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxFbGxpcHNlOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0
SW1hZ2VEYXRhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUHV0SW1hZ2VEYXRhOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gUGFpbnRGcmFtZUZvck1l
ZGlhOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVJlY3Q6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAg
ICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlSW5saW5lUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
UGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZVBhdGg6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IENsZWFyUmVjdDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBCZWdpblRyYW5zcGFyZW5jeUxheWVy
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBFbmRU
cmFuc3BhcmVuY3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBBcHBseVN0cm9rZVBhdHRlcm46OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQ
YXR0ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlGaWxsUGF0dGVybjo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVt
VHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQorVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgSXRlbUhhbmRsZSk7CiAKIH0gLy8gbmFtZXNwYWNlIERp
c3BsYXlMaXN0CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIG9iamVjdCkgeyByZXR1cm4gb2JqZWN0LnByZWRpY2F0
ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfRFJBV0lOR0lURU0oRHJhd2luZ0l0ZW0sIGlzRHJhd2luZ0l0ZW0o
KSkKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oVG9W
YWx1ZVR5cGVOYW1lKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0udHlwZSgp
ID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VG9WYWx1ZVR5cGVOYW1lOyB9IFwK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFNhdmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUmVzdG9yZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShU
cmFuc2xhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUm90YXRl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNjYWxlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldENUTSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNUTSkKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVGaWxsR3JhZGllbnQpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbENvbG9yKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZVN0cm9rZUNvbG9y
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0cm9rZVRoaWNr
bmVzcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdGF0ZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lQ2FwKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNoKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVKb2luKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldE1pdGVyTGltaXQpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsaXBPdXRUb1BhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oQ2xpcFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQ2xpcFRvRHJhd2luZ0NvbW1hbmRzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdHbHlwaHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRHJhd0ltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdUaWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdUaWxlZFNjYWxlZEltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdJbWFnZUJ1ZmZlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3TmF0aXZlSW1hZ2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRHJhd1BhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRHJhd1JlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRHJhd0xpbmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRHJh
d0xpbmVzRm9yVGV4dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKERyYXdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KERyYXdGb2N1c1JpbmdQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdGb2N1c1JpbmdSZWN0cykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShGaWxsUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShGaWxsUmVjdFdpdGhDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQotI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZp
bGxJbmxpbmVQYXRoKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRmlsbFBhdGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
RmlsbEVsbGlwc2UpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oUHV0
SW1hZ2VEYXRhKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFBhaW50
RnJhbWVGb3JNZWRpYSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
dHJva2VSZWN0KQotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGluZVBhdGgpCi0jZW5kaWYKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRW5kVHJhbnNwYXJlbmN5TGF5ZXIpCi0j
aWYgVVNFKENHKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEFwcGx5
U3Ryb2tlUGF0dGVybikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShB
cHBseUZpbGxQYXR0ZXJuKQotI2VuZGlmCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oQXBwbHlEZXZpY2VTY2FsZUZhY3RvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShDbGVhclNoYWRvdykKLQogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggYmY1YjgzYjIy
YzNmNGM3MjU4MWU2OGI5YTUyZDc3MzAyZDI4Mjk0ZS4uOTBlYmRlNTVmODk3OTZhODExODc5ZGIw
Nzg0OGMwNzRmNDUzODU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtNTYsNyArNTYsNyBAQCBSZWNvcmRlcjo6flJlY29yZGVyKCkKIAogdm9pZCBSZWNv
cmRlcjo6cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50LCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCiB7Ci0gICAgYXBwZW5k
SXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7CisgICAgYXBw
ZW5kPFB1dEltYWdlRGF0YT4oaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBkZXN0Rm9ybWF0KTsKIH0KIAogc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3Rh
dGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKQEAgLTg3LDIx
ICs4NywyMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYQogdm9pZCBSZWNvcmRlcjo6YXBwZW5k
U3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGFuZ2Vz
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFncykKIHsK
ICAgICBpZiAoIWNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyhjaGFuZ2VzLCBjaGFuZ2VG
bGFncykpIHsKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldFN0YXRlOjpjcmVh
dGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncykpOworICAgICAgICBhcHBlbmQ8U2V0U3Rh
dGU+KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lu
bGluZSgpKSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oY2hhbmdlcy5t
X3N0YXRlLnN0cm9rZUNvbG9yLmFzSW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUo
Y2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOworICAgICAgICBhcHBlbmQ8U2V0U3Ry
b2tlVGhpY2tuZXNzPihjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAogICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xv
cjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSkpOworICAgICAg
ICBhcHBlbmQ8U2V0SW5saW5lRmlsbENvbG9yPihjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFz
SW5saW5lKCkpOwogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVu
ZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUoKmNoYW5nZXMubV9zdGF0ZS5maWxs
R3JhZGllbnQpKTsKKyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxHcmFkaWVudD4oKmNoYW5n
ZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpOwogfQogCiB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5k
SXRlbU9mVHlwZShJdGVtVHlwZSB0eXBlKQpAQCAtMTM5LDI3ICsxMzksMjcgQEAgdm9pZCBSZWNv
cmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGEKIAogdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQogewotICAgIGFw
cGVuZEl0ZW0oQ2xlYXJTaGFkb3c6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8Q2xlYXJTaGFkb3c+
KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewot
ICAgIGFwcGVuZEl0ZW0oU2V0TGluZUNhcDo6Y3JlYXRlKGxpbmVDYXApKTsKKyAgICBhcHBlbmQ8
U2V0TGluZUNhcD4obGluZUNhcCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGFwcGVu
ZEl0ZW0oU2V0TGluZURhc2g6OmNyZWF0ZShkYXNoQXJyYXksIGRhc2hPZmZzZXQpKTsKKyAgICBh
cHBlbmQ8U2V0TGluZURhc2g+KGRhc2hBcnJheSwgZGFzaE9mZnNldCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGFwcGVuZEl0ZW0o
U2V0TGluZUpvaW46OmNyZWF0ZShsaW5lSm9pbikpOworICAgIGFwcGVuZDxTZXRMaW5lSm9pbj4o
bGluZUpvaW4pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVy
TGltaXQpCiB7Ci0gICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1p
dCkpOworICAgIGFwcGVuZDxTZXRNaXRlckxpbWl0PihtaXRlckxpbWl0KTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAg
LTE2OSwxOSArMTY5LDE5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpCiAKIEltYWdlRHJhd1Jl
c3VsdCBSZWNvcmRlcjo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBpbWFn
ZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdU
aWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdUaWxlZElt
YWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5n
LCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3VGlsZWRJbWFnZT4oaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7CiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCiBJ
bWFnZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFj
dG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CisgICAgYXBwZW5kPERy
YXdUaWxlZFNjYWxlZEltYWdlPihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxl
RmFjdG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKICAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWRSZWNvcmQ7CiB9CiAKQEAgLTE5MCwyMyArMTkwLDIzIEBAIGJv
b2wgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjCiAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX2RlbGVnYXRl
LT5sb2NrUmVtb3RlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVm
ZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdOYXRpdmVJ
bWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVuZEl0ZW1B
bmRVcGRhdGVFeHRlbnQoRHJhd05hdGl2ZUltYWdlOjpjcmVhdGUoaW1hZ2UsIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd05hdGl2ZUltYWdl
PihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdQYXR0ZXJuOjpjcmVhdGUoaW1hZ2UsIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpKTsKKyAgICBhcHBlbmQ8RHJhd1BhdHRlcm4+KGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6c2F2ZSgpCiB7Ci0gICAgYXBwZW5kSXRlbShTYXZlOjpjcmVhdGUoKSk7CisgICAg
YXBwZW5kPFNhdmU+KCk7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChtX3N0YXRlU3RhY2subGFz
dCgpLmNsb25lRm9yU2F2ZSgpKTsKIH0KIApAQCAtMjIxLDI1ICsyMjEsMjUgQEAgdm9pZCBSZWNv
cmRlcjo6cmVzdG9yZSgpCiAgICAgLy8gSGF2ZSB0byBhdm9pZCBlbGlkaW5nIG5lc3RlZCBTYXZl
L1Jlc3RvcmUgd2hlbiBhIGRlc2NlbmRhbnQgc3RhdGUgY29udGFpbnMgZHJhd2luZyBpdGVtcy4K
ICAgICBjdXJyZW50U3RhdGUoKS53YXNVc2VkRm9yRHJhd2luZyB8PSBzdGF0ZVVzZWRGb3JEcmF3
aW5nOwogCi0gICAgYXBwZW5kSXRlbShSZXN0b3JlOjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPFJl
c3RvcmU+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnRyYW5zbGF0ZSh4LCB5KTsKLSAgICBhcHBlbmRJdGVt
KFRyYW5zbGF0ZTo6Y3JlYXRlKHgsIHkpKTsKKyAgICBhcHBlbmQ8VHJhbnNsYXRlPih4LCB5KTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQogewogICAg
IGN1cnJlbnRTdGF0ZSgpLnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0gICAgYXBwZW5kSXRlbShS
b3RhdGU6OmNyZWF0ZShhbmdsZUluUmFkaWFucykpOworICAgIGFwcGVuZDxSb3RhdGU+KGFuZ2xl
SW5SYWRpYW5zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLnNjYWxlKHNpemUpOwotICAgIGFwcGVuZEl0ZW0o
U2NhbGU6OmNyZWF0ZShzaXplKSk7CisgICAgYXBwZW5kPFNjYWxlPihzaXplKTsKIH0KIAogdm9p
ZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpA
QCAtMjQ4LDEzICsyNDgsMTMgQEAgdm9pZCBSZWNvcmRlcjo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKICAgICBjdXJyZW50U3Rh
dGUoKS5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBlbmRJdGVtKENvbmNhdGVuYXRlQ1RN
OjpjcmVhdGUodHJhbnNmb3JtKSk7CisgICAgYXBwZW5kPENvbmNhdGVuYXRlQ1RNPih0cmFuc2Zv
cm0pOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiB7CiAgICAgY3VycmVudFN0YXRlKCkuc2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
YXBwZW5kSXRlbShTZXRDVE06OmNyZWF0ZSh0cmFuc2Zvcm0pKTsKKyAgICBhcHBlbmQ8U2V0Q1RN
Pih0cmFuc2Zvcm0pOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKQEAgLTI2NSwxNTggKzI2NSwxNTggQEAg
QWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGUpCiAKIHZvaWQgUmVjb3JkZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6OmNyZWF0ZShvcGFjaXR5KSk7CisgICAgYXBwZW5kPEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI+KG9wYWNpdHkpOwogfQogCiB2b2lkIFJlY29yZGVyOjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCiB7Ci0gICAgYXBwZW5kSXRlbShFbmRUcmFuc3BhcmVuY3lMYXllcjo6Y3JlYXRlKCkp
OworICAgIGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3UmVjdDo6Y3JlYXRlKHJlY3Qs
IGJvcmRlclRoaWNrbmVzcykpOworICAgIGFwcGVuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3TGluZTo6Y3JlYXRlKHBvaW50MSwgcG9pbnQyKSk7CisgICAgYXBwZW5k
PERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpCiB7Ci0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoRmxv
YXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMpKTsKKyAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2lu
dCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7
Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
OjpjcmVhdGUocmVjdCwgc3R5bGUpKTsKKyAgICBhcHBlbmQ8RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcj4ocmVjdCwgc3R5bGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
RWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RHJhd0VsbGlwc2U+KHJlY3QpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBw
ZW5kPERyYXdQYXRoPihwYXRoKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUGF0
aDo6Y3JlYXRlKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7CisgICAgYXBwZW5kPERyYXdG
b2N1c1JpbmdQYXRoPihwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgYXBwZW5k
SXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZShyZWN0cywgd2lk
dGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0
cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChG
aWxsUmVjdDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3Q+KHJlY3QpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0V2l0
aENvbG9yOjpjcmVhdGUocmVjdCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29s
b3I+KHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKHJlY3QsIGdyYWRpZW50KSk7
CisgICAgYXBwZW5kPEZpbGxSZWN0V2l0aEdyYWRpZW50PihyZWN0LCBncmFkaWVudCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsK
LSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRl
KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7CisgICAgYXBwZW5kPEZpbGxDb21wb3NpdGVk
UmVjdD4ocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwogfQogCiB2b2lkIFJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVF
eHRlbnQoRmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUocmVjdCwgY29sb3IsIGJsZW5kTW9kZSkpOwor
ICAgIGFwcGVuZDxGaWxsUm91bmRlZFJlY3Q+KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6OmNyZWF0ZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKSk7CisgICAg
YXBwZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNv
bG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxpbmVEYXRh
KCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsSW5saW5lUGF0aDo6
Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFwcGVuZDxGaWxsSW5saW5lUGF0
aD4ocGF0aC5pbmxpbmVEYXRhKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0g
ICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAg
ICBhcHBlbmQ8RmlsbFBhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChGaWxsRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8RmlsbEVsbGlwc2U+KHJl
Y3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ry
b2tlUmVjdDo6Y3JlYXRlKHJlY3QsIGxpbmVXaWR0aCkpOworICAgIGFwcGVuZDxTdHJva2VSZWN0
PihyZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAgICAgaWYgKHBh
dGguaGFzSW5saW5lRGF0YSgpKSB7Ci0gICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQo
U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIGFw
cGVuZDxTdHJva2VJbmxpbmVQYXRoPihwYXRoLmlubGluZURhdGEoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVBh
dGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPFN0cm9rZVBhdGg+KHBhdGgpOwogfQogCiB2
b2lkIFJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUVsbGlwc2U6OmNyZWF0ZShyZWN0KSk7
CisgICAgYXBwZW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QpOwogfQogCiB2b2lkIFJlY29yZGVyOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRh
dGVFeHRlbnQoQ2xlYXJSZWN0OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxDbGVhclJlY3Q+
KHJlY3QpOwogfQogCiAjaWYgVVNFKENHKQogdm9pZCBSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0
ZXJuKCkKIHsKLSAgICBhcHBlbmRJdGVtKEFwcGx5U3Ryb2tlUGF0dGVybjo6Y3JlYXRlKCkpOwor
ICAgIGFwcGVuZDxBcHBseVN0cm9rZVBhdHRlcm4+KCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmFw
cGx5RmlsbFBhdHRlcm4oKQogewotICAgIGFwcGVuZEl0ZW0oQXBwbHlGaWxsUGF0dGVybjo6Y3Jl
YXRlKCkpOworICAgIGFwcGVuZDxBcHBseUZpbGxQYXR0ZXJuPigpOwogfQogI2VuZGlmCiAKIHZv
aWQgUmVjb3JkZXI6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGN1cnJlbnRT
dGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHJlY3QpOwotICAgIGFwcGVuZEl0ZW0oQ2xpcDo6
Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0ZW0oQ2xp
cE91dDo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBlbmQ8Q2xpcE91dD4ocmVjdCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBhcHBlbmRJdGVt
KENsaXBPdXRUb1BhdGg6OmNyZWF0ZShwYXRoKSk7CisgICAgYXBwZW5kPENsaXBPdXRUb1BhdGg+
KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBX
aW5kUnVsZSB3aW5kUnVsZSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzLmludGVy
c2VjdChwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwUGF0aDo6
Y3JlYXRlKHBhdGgsIHdpbmRSdWxlKSk7CisgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5k
UnVsZSk7CiB9CiAKIEludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQpAQCAtNDQ0LDE5ICs0
NDQsMTkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY28KIAogICAgIGF1dG8gcmVjb3JkaW5nQ29u
dGV4dCA9IG1ha2VVbmlxdWU8RHJhd2luZ0NvbnRleHQ+KGRlc3RpbmF0aW9uLnNpemUoKSwgaW5p
dGlhbENUTSk7CiAgICAgZHJhd2luZ0Z1bmN0aW9uKHJlY29yZGluZ0NvbnRleHQtPmNvbnRleHQo
KSk7Ci0gICAgYXBwZW5kSXRlbShDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmNyZWF0ZShkZXN0aW5h
dGlvbiwgY29sb3JTcGFjZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0KCkpKTsK
KyAgICBhcHBlbmQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbiwgY29sb3JTcGFj
ZSwgcmVjb3JkaW5nQ29udGV4dC0+dGFrZURpc3BsYXlMaXN0KCkpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikKIHsKLSAgICBhcHBlbmRJdGVtKFBhaW50RnJhbWVGb3JNZWRpYTo6
Y3JlYXRlKHBsYXllciwgZGVzdGluYXRpb24pKTsKKyAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1l
ZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICAvLyBGSVhNRTog
dGhpcyBjaGFuZ2VzIHRoZSBiYXNlQ1RNLCB3aGljaCB3aWxsIGludmFsaWRhdGUgYWxsIG9mIG91
ciBjYWNoZWQgZXh0ZW50cy4KICAgICAvLyBBc3NlcnQgdGhhdCBpdCdzIG9ubHkgY2FsbGVkIGVh
cmx5IG9uPwotICAgIGFwcGVuZEl0ZW0oQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRlKGRl
dmljZVNjYWxlRmFjdG9yKSk7CisgICAgYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGRl
dmljZVNjYWxlRmFjdG9yKTsKIH0KIAogRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpCkBAIC00NjUsMzAgKzQ2NSw2IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6CiAgICAgcmV0
dXJuIHJlY3Q7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQo
UmVmPERyYXdpbmdJdGVtPiYmIGl0ZW0pCi17Ci0gICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBp
dGVtLmdldCgpOwotICAgIGFwcGVuZEl0ZW0oV1RGTW92ZShpdGVtKSk7Ci0gICAgdXBkYXRlSXRl
bUV4dGVudChuZXdJdGVtKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6YXBwZW5kSXRlbShSZWY8SXRl
bT4mJiBpdGVtKQotewotICAgIEl0ZW0mIG5ld0l0ZW0gPSBpdGVtLmdldCgpOwotICAgIGF1dG8g
dHlwZSA9IG5ld0l0ZW0udHlwZSgpOwotICAgIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKHR5cGUpOwot
ICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kKFdURk1vdmUoaXRlbSkpOwotICAgIGRpZEFwcGVuZEl0
ZW1PZlR5cGUodHlwZSk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnVwZGF0ZUl0ZW1FeHRlbnQoRHJh
d2luZ0l0ZW0mIGl0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVj
dCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0KCkpKQotICAgICAgICBpdGVtLnNl
dEV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMocmVjdC52YWx1ZSgpKSk7Ci0gICAgZWxzZSBp
ZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5nbG9iYWxCb3VuZHMoKSkKLSAgICAg
ICAgaXRlbS5zZXRFeHRlbnQocmVjdC52YWx1ZSgpKTsKLX0KLQogLy8gRklYTUU6IHNoYXJlIHdp
dGggU2hhZG93RGF0YQogc3RhdGljIGlubGluZSBmbG9hdCBzaGFkb3dQYWludGluZ0V4dGVudChm
bG9hdCBibHVyUmFkaXVzKQogewpAQCAtNTA4LDcgKzQ4NCw3IEBAIEZsb2F0UmVjdCBSZWNvcmRl
cjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAg
ICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7CiAgICAgaWYgKGdy
YXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IpKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQ9IGJvdW5kczsKKyAg
ICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0
ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hh
ZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CiAgICAgICAgIGJvdW5kcy51bml0ZShz
aGFkb3dFeHRlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXgg
OTJjMDUxM2E3ZjljNmJjYTUyNTA0NDhmMzA4M2ZkZTFjZDY2ZDg5NC4uZmZlMTU5MWJhZmQ0OWRi
MzNlOTQzZTk5YzFiYTE0Y2RiYzRjNjAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgog
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFn
cy5oIgpAQCAtNDgsOCArNDksNiBAQCBzdHJ1Y3QgSW1hZ2VQYWludGluZ09wdGlvbnM7CiAKIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIERyYXdpbmdJdGVtOwotCiBjbGFzcyBSZWNv
cmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CkBAIC0xNDgsMTUg
KzE0NywzNCBAQCBwcml2YXRlOgogCiAgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRl
OwogCi0gICAgdm9pZCBhcHBlbmRJdGVtKFJlZjxJdGVtPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBjbGFzcy4uLiBBcmdzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQor
ICAgIHsKKyAgICAgICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOworICAgICAg
ICBtX2Rpc3BsYXlMaXN0LmFwcGVuZDxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwor
ICAgICAgICBkaWRBcHBlbmRJdGVtT2ZUeXBlKFQ6Oml0ZW1UeXBlKTsKKworICAgICAgICBpZiAo
IVQ6OmlzRHJhd2luZ0l0ZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKExJ
S0VMWSghbV9kaXNwbGF5TGlzdC50cmFja3NEcmF3aW5nSXRlbUV4dGVudHMoKSkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBpdGVtID0gVChzdGQ6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOworICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFw
aGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVt
RXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOworICAgICAgICBlbHNlIGlmIChh
dXRvIHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQorICAgICAgICAgICAgbV9kaXNwbGF5TGlz
dC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGOjpudWxsb3B0KTsKKyAgICB9
CisKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtT2ZUeXBlKEl0ZW1UeXBlKTsKICAgICB2b2lkIGRp
ZEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwotICAgIHZvaWQgYXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChSZWY8RHJhd2luZ0l0ZW0+JiYpOwogCiAgICAgdm9pZCBhcHBlbmRTdGF0ZUNoYW5n
ZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlSXRlbUV4dGVu
dChEcmF3aW5nSXRlbSYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Y3RtKCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZXBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKaW5kZXggMTJiNWY2MmNjNDI0
NTIxNDJkOGI5OGUyZGVmMjU0ZWUxMGQ3ZjE4Mi4uZDZiMWE5MjI1NjYyNTBjNTIxY2Q2OTFkMzg5
YjFkNTdjNGE0OGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNw
cApAQCAtNTIsMjYgKzUyLDI2IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gUmVwbGF5
ZXI6OnJlcGxheShjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBib29sCiAgICAgaWYgKFVO
TElLRUxZKHRyYWNrUmVwbGF5TGlzdCkpCiAgICAgICAgIHJlcGxheUxpc3QgPSBtYWtlVW5pcXVl
PERpc3BsYXlMaXN0PigpOwogCi0gICAgYXV0byYgaXRlbXMgPSBtX2Rpc3BsYXlMaXN0Lmxpc3Qo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1tpXS5nZXQoKTsKLQotICAgICAgICBpZiAoIWluaXRpYWxD
bGlwLmlzWmVybygpICYmIGlzPERyYXdpbmdJdGVtPihpdGVtKSkgewotICAgICAgICAgICAgY29u
c3QgRHJhd2luZ0l0ZW0mIGRyYXdpbmdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGl0ZW0p
OwotICAgICAgICAgICAgaWYgKGRyYXdpbmdJdGVtLmV4dGVudEtub3duKCkgJiYgIWRyYXdpbmdJ
dGVtLmV4dGVudCgpLmludGVyc2VjdHMoaW5pdGlhbENsaXApKSB7Ci0gICAgICAgICAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJza2lwcGluZyAiIDw8IGkg
PDwgIiAiIDw8IGl0ZW0pOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQorI2lmICFMT0dfRElTQUJMRUQKKyAgICBzaXplX3QgaSA9IDA7CisjZW5kaWYKKyAgICBmb3Ig
KGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBtX2Rpc3BsYXlMaXN0KSB7CisgICAgICAgIGlmICghaW5p
dGlhbENsaXAuaXNaZXJvKCkgJiYgZXh0ZW50ICYmICFleHRlbnQtPmludGVyc2VjdHMoaW5pdGlh
bENsaXApKSB7CisgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJl
YW0gPDwgInNraXBwaW5nICIgPDwgaSsrIDw8ICIgIiA8PCBpdGVtKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0
cywgc3RyZWFtIDw8ICJhcHBseWluZyAiIDw8IGkgPDwgIiAiIDw8IGl0ZW0pOworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImFwcGx5aW5nICIgPDwgaSsr
IDw8ICIgIiA8PCBpdGVtKTsKICAgICAgICAgaWYgKCFtX2RlbGVnYXRlIHx8ICFtX2RlbGVnYXRl
LT5hcHBseShpdGVtLCBtX2NvbnRleHQpKQogICAgICAgICAgICAgaXRlbS5hcHBseShtX2NvbnRl
eHQpOwogCi0gICAgICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKQotICAgICAgICAg
ICAgcmVwbGF5TGlzdC0+YXBwZW5kSXRlbShjb25zdF9jYXN0PEl0ZW0mPihpdGVtKSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSh0cmFja1JlcGxheUxpc3QpKSB7CisgICAgICAgICAgICByZXBsYXlM
aXN0LT5hcHBlbmQoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkp
CisgICAgICAgICAgICAgICAgcmVwbGF5TGlzdC0+YWRkRHJhd2luZ0l0ZW1FeHRlbnQoV1RGTW92
ZShleHRlbnQpKTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiByZXBsYXlM
aXN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAppbmRleCA0MGNk
MGZmMGQ0MTY4MGNmYzczZTUwNGRlY2ZjM2RlZjg3NzUzMjMzLi4wNDVjYWNjZThhMDFjOGQ1ZGNi
NjU4YzQwZDYzZTlhMzU4OWI1YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxh
eWVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkRlbGVnYXRlKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBhcHBseShJdGVtJiwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5kbGUsIEdyYXBoaWNzQ29udGV4dCYp
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4
IGIyNDc4MGNkN2IwNzQ0M2IxNTUwMjZjZjZiMTk4MWM4MjIyYmQ1MGMuLjc4ZTI2NWRiZjU0ZTli
ZDI0YjlkNDFiNzM5MDA5NzAyMTQ5MWZhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0yNywxNCArMjcsMTcg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIkRlY29kZXIuaCIKICNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b25jcmV0ZUltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3RSZXBsYXllci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgQmFja2VuZFR5cGU+Ci1jbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBX
ZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdhdGUgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZm
ZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1
YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50IHsKICAgICB1c2luZyBC
YXNlQ29uY3JldGVJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjb250ZXh0Owog
ICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CkBAIC03MCwxMCAr
NzMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgYXBwbHkoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgb3ZlcnJpZGUKKyAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtSGFuZGxlIGl0ZW0sIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgb3ZlcnJp
ZGUKICAgICB7Ci0gICAgICAgIGlmIChpdGVtLnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSkgewotICAgICAgICAgICAgYXV0byYgcHV0SW1hZ2VE
YXRhSXRlbSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGEm
PihpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dElt
YWdlRGF0YT4oKSkgeworICAgICAgICAgICAgYXV0byYgcHV0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCk7CiAgICAgICAgICAgICBw
dXRJbWFnZURhdGEocHV0SW1hZ2VEYXRhSXRlbS5pbnB1dEZvcm1hdCgpLCBwdXRJbWFnZURhdGFJ
dGVtLmltYWdlRGF0YSgpLCBwdXRJbWFnZURhdGFJdGVtLnNyY1JlY3QoKSwgcHV0SW1hZ2VEYXRh
SXRlbS5kZXN0UG9pbnQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5kZXN0Rm9ybWF0KCkpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTg0LDYgKzg3LDExNSBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmFwcGx5TWVkaWFJdGVt
KGl0ZW0sIGNvbnRleHQpOwogICAgIH0KIAorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50
OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUg
dHlwZSwgdWludDhfdCogaGFuZGxlTG9jYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9u
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRp
b24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdHbHlwaHM6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAg
ICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdJbWFnZT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgICAg
ICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VC
dWZmZXI+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUlt
YWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRl
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVM
b2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFu
ZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PihkYXRhLCBsZW5ndGgs
IGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RX
aXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlv
bik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGRhdGEs
IGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29k
ZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0PihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
cmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0
aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0
YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBh
dGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyNpZiBVU0Uo
Q0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseUZp
bGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0OgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdFbGxpcHNl
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9y
TWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0
b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRl
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmls
bEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIE9wdGlvbmFsPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3Jl
YXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxv
Y2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVj
b2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFu
ZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChX
VEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggZGYwZWQ0N2U1YmVmZDY3OTg0NmE0YzdmNTA2MjAx
MzY2NDYwYjY4MC4uYzUwMDQ2NDE2MWYwM2VlZGQxODU2MjI4ZTEwOGU4OTRhMzA4ODQwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTAgKzcyLDEwIEBAIHVpbnQ2NF90IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAg
ICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1i
b29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKGNvbnN0IERpc3Bs
YXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitib29sIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5UmVzb3VyY2VJdGVtKERpc3BsYXlMaXN0OjpJdGVtSGFu
ZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAoaXRlbS50eXBl
KCkgPT0gRGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpIHsKLSAgICAgICAg
YXV0byYgZHJhd0l0ZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBEaXNwbGF5TGlzdDo6RHJhd0ltYWdl
QnVmZmVyJj4oaXRlbSk7CisgICAgaWYgKGl0ZW0uaXM8RGlzcGxheUxpc3Q6OkRyYXdJbWFnZUJ1
ZmZlcj4oKSkgeworICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0
OjpEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90
ZVJlc291cmNlQ2FjaGUuY2FjaGVkSW1hZ2VCdWZmZXIoZHJhd0l0ZW0ucmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyKCkpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODcsMTMgKzg3LDEyIEBAIGJvb2wgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0oY29uc3QgRGlzcGxheUxpc3Q6Okl0ZW0mIGl0ZW0sIEdy
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFw
cGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVt
KERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1l
ZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVk
aWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0
OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTQwLDE5ICsxMzksNDUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVz
aERpc3BsYXlMaXN0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qs
IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0IGZsdXNoQ29u
dGV4dCkKIHsKLSAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKQotICAgICAg
ICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7CisgICAgYXV0byBk
aXNwbGF5TGlzdCA9IGhhbmRsZS5jcmVhdGVEaXNwbGF5TGlzdChbJl0gKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyKSAtPiB1aW50OF90KiB7Cisg
ICAgICAgIGlmIChhdXRvIHNoYXJlZE1lbW9yeSA9IG1fc2hhcmVkSXRlbUJ1ZmZlcnMudGFrZShp
ZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihzaGFyZWRNZW1vcnktPmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0p
OworCisgICAgaWYgKCFkaXNwbGF5TGlzdCkgeworICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVz
c2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBwcm9jZXNzLgorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5j
YWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGlmICgh
aW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhIG1lc3NhZ2UgY2hlY2sgdG8g
dGVybWluYXRlIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChpbWFnZUJ1ZmZlci0+aXNBY2NlbGVyYXRlZCgpKQorICAgICAgICBkaXNwbGF5TGlzdC0+
c2V0SXRlbUJ1ZmZlckNsaWVudChzdGF0aWNfY2FzdDxBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVm
ZmVyKj4oaW1hZ2VCdWZmZXIpKTsKKyAgICBlbHNlCisgICAgICAgIGRpc3BsYXlMaXN0LT5zZXRJ
dGVtQnVmZmVyQ2xpZW50KHN0YXRpY19jYXN0PFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZl
cio+KGltYWdlQnVmZmVyKSk7CisKKyAgICBpbWFnZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdCgq
ZGlzcGxheUxpc3QpOworCisgICAgaWYgKGZsdXNoQ29udGV4dCA9PSBTaG91bGRGbHVzaENvbnRl
eHQ6OlllcykKKyAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoQ29udGV4dCgpOwogfQogCi12b2lk
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3Qg
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgRGlzcGxheUxpc3RGbHVzaElk
ZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpm
bHVzaERpc3BsYXlMaXN0KGNvbnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiBoYW5kbGUsIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7
Ci0gICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBtX3JlbW90ZVJlc291cmNlQ2FjaGUuY2FjaGVk
SW1hZ2VCdWZmZXIocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSkgewotICAgICAgICBpbWFn
ZUJ1ZmZlci0+Zmx1c2hEaXNwbGF5TGlzdChkaXNwbGF5TGlzdCk7Ci0gICAgICAgIGltYWdlQnVm
ZmVyLT5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgZmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRl
ZChmbHVzaElkZW50aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7Ci0gICAgfQor
ICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIs
IFNob3VsZEZsdXNoQ29udGV4dDo6Tm8pOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUmIGhhbmRsZSwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQor
eworICAgIGFwcGx5RGlzcGxheUxpc3QoaGFuZGxlLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIsIFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKTsKKyAgICBmbHVzaERpc3BsYXlMaXN0V2FzQ29t
bWl0dGVkKGZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0K
IAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVjdCwgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
QEAgLTE2OCw2ICsxOTMsMTIgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNl
UmVtb3RlUmVzb3VyY2UoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHIKICAgICBtX3JlbW90
ZVJlc291cmNlQ2FjaGUucmVsZWFzZVJlbW90ZVJlc291cmNlKHJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiB9CiAKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU2hh
cmVkSXRlbURhdGEoRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIs
IGNvbnN0IFNoYXJlZE1lbW9yeTo6SVBDSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKGF1dG8g
c2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjptYXAoaGFuZGxlLmhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSkpCisgICAgICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMu
c2V0KGlkZW50aWZpZXIsIFdURk1vdmUoc2hhcmVkTWVtb3J5KSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKaW5kZXggMjg1ZTJmNzRiNGQ0ZmQ2ZTZhOGM1ZTkxMDI1YTFjOTI2ZjVmZmIxNS4uMzA1
MjA2YjVmYmYwYzFhYTExYjNlMTAyOTlmM2U1ZGZlODBhZDRlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oCkBAIC0zNSw3ICszNSw5IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1
ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CiAKQEAgLTYzLDggKzY1LDggQEAgcHVibGljOgogICAgIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MqIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSBjb25zdDsKIAogICAgIC8v
IFJlbmRlcmluZyBvcGVyYXRpb25zLgotICAgIGJvb2wgYXBwbHlSZXNvdXJjZUl0ZW0oY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW0mLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKTsK
LSAgICBib29sIGFwcGx5TWVkaWFJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CisgICAgYm9vbCBhcHBseVJlc291cmNlSXRl
bShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Jik7CisgICAgYm9vbCBhcHBseU1lZGlhSXRlbShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUhhbmRsZSwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBNZXNzYWdlcyB0
byBiZSBzZW50LgogICAgIHZvaWQgaW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBi
YWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcik7CkBAIC03Myw2ICs3NSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZChHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOwogCisgICAgZW51bSBjbGFzcyBTaG91bGRGbHVzaENvbnRleHQgOiBib29s
IHsgTm8sIFllcyB9OworICAgIHZvaWQgYXBwbHlEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hv
dWxkRmx1c2hDb250ZXh0KTsKKwogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
QEAgLTgzLDE0ICs4OCwxNiBAQCBwcml2YXRlOgogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgcmVj
ZWl2ZWQuCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cik7Ci0gICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5
TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CisgICAgdm9pZCBmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNv
bnN0IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlJiwgRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CiAgICAgdm9pZCBnZXRJbWFn
ZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNv
cmU6OkludFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlJiYpPiYmKTsK
ICAgICB2b2lkIHJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpOworICAgIHZvaWQgZGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyLCBjb25zdCBTaGFyZWRNZW1vcnk6OklQ
Q0hhbmRsZSYpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSBtX3JlbW90ZVJlc291cmNlQ2Fj
aGU7CiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M7CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcjsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9yeT4+IG1fc2hhcmVkSXRlbUJ1
ZmZlcnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4KaW5kZXggYTg4ZTBmYjYyNjI0OTE4OWQ4ZjViM2EzOWI5YjY2NDI4
NjIyY2FkMy4uYmI5MTVhYjE5NWFkMzc3NzIwYjY5MTUwYTNiZWMwYzk5M2M1YWM4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTIzLDExICsyMywxMiBAQAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCBOb3RSZWZDb3VudGVkIHsKLSAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6
OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3QoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQotICAgIHZvaWQgRmx1c2hEaXNw
bGF5TGlzdEFuZENvbW1pdChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxh
eUxpc3QsIFdlYktpdDo6RGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKQorICAgIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAg
ICBGbHVzaERpc3BsYXlMaXN0KFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgZGlzcGxh
eUxpc3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChXZWJLaXQ6OlNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1
c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKICAgICBHZXRJbWFnZURhdGEo
ZW51bTp1aW50OF90IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpIC0+IChJUEM6OkltYWdlRGF0YVJl
ZmVyZW5jZSBpbWFnZURhdGEpIFN5bmNocm9ub3VzCi0gICAgdm9pZCBSZWxlYXNlUmVtb3RlUmVz
b3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKKyAgICBEaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OklQQ0hhbmRsZSBoYW5kbGUpCisgICAgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA3MjY4NzJkNjhkOTU3ZjA4OWI3NzFhM2Q1NTU5
YTIzMTFkYjMwNWU2Li5jZGY2N2IyZjY4M2NjMjczYTFkMmQ1NTc4MzBiMDFiNGZmODEyZjJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTIwOCw2ICsyMDgs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAg
ICAnU3RyaW5nJywKICAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3BhY2UnLAogICAgICAgICAnV2Vi
Q29yZTo6RGljdGF0aW9uQ29udGV4dCcsCisgICAgICAgICdXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RHJhZ0FwcGxpY2F0aW9u
RmxhZ3MnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OkRvY3VtZW50T3JXb3JrZXJJZGVudGlmaWVyJywKQEAgLTU4Nyw2ICs1ODgsNyBA
QCBkZWYgaGVhZGVyc19mb3JfdHlwZSh0eXBlKToKICAgICAgICAgJ0pTQzo6TWVzc2FnZVNvdXJj
ZSc6IFsnPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPiddLAogICAgICAgICAnSW5zcGVj
dG9yOjpJbnNwZWN0b3JUYXJnZXRUeXBlJzogWyc8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVGFy
Z2V0Lmg+J10sCiAgICAgICAgICdJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbDo6Q29ubmVjdGlv
blR5cGUnOiBbJzxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nXSwK
KyAgICAgICAgJ1dlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcic6IFsn
PFdlYkNvcmUvRGlzcGxheUxpc3QuaD4nXSwKICAgICAgICAgJ01lZGlhVGltZSc6IFsnPHd0Zi9N
ZWRpYVRpbWUuaD4nXSwKICAgICAgICAgJ01vbm90b25pY1RpbWUnOiBbJzx3dGYvTW9ub3Rvbmlj
VGltZS5oPiddLAogICAgICAgICAnU2Vjb25kcyc6IFsnPHd0Zi9TZWNvbmRzLmg+J10sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWFhNzRkNjE1YWJkM2Y0YTMxODYyNTJmZjBmZGNiODcxZTcwZmE1MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNw
cApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZShjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIGRpc3BsYXlMaXN0LmZvckVhY2hJdGVtQnVmZmVyKFsmXSAoYXV0byYg
aGFuZGxlKSB7CisgICAgICAgIG1fYnVmZmVycy5hcHBlbmQoeyBoYW5kbGUuaWRlbnRpZmllciwg
aGFuZGxlLmNhcGFjaXR5IH0pOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0PiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6Y3JlYXRlRGlzcGxh
eUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYgYnVmZmVyUHJvdmlkZXIpIGNvbnN0Cit7CisgICAg
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGVzIGhhbmRsZXM7CisgICAgaGFuZGxlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fYnVmZmVycy5zaXplKCkpOworICAgIGZvciAoYXV0byYgW2lk
ZW50aWZpZXIsIGNhcGFjaXR5XSA6IG1fYnVmZmVycykgeworICAgICAgICBhdXRvKiBkYXRhID0g
YnVmZmVyUHJvdmlkZXIoaWRlbnRpZmllcik7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGhhbmRsZXMudW5jaGVja2VkQXBwZW5kKHsg
aWRlbnRpZmllciwgZGF0YSwgY2FwYWNpdHkgfSk7CisgICAgfQorICAgIHJldHVybiBtYWtlVW5p
cXVlPERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4oV1RGTW92ZShoYW5kbGVzKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3Bs
YXlMaXN0SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE3NWUxMTRmMjNiYzhmYjhlNTdjZDkwZjY0YTMz
YmUyNjJlMWYzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUgeworcHVibGljOgorICAg
IHVzaW5nIEl0ZW1CdWZmZXJQcm92aWRlciA9IEZ1bmN0aW9uPHVpbnQ4X3QqKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcik+OworCisgICAgU2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdD4gY3JlYXRl
RGlzcGxheUxpc3QoSXRlbUJ1ZmZlclByb3ZpZGVyJiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4g
ZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZShWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRp
Zmllciwgc2l6ZV90Pj4mJiBidWZmZXJzKQorICAgICAgICA6IG1fYnVmZmVycyhXVEZNb3ZlKGJ1
ZmZlcnMpKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgc2l6ZV90Pj4gbV9idWZmZXJzOworfTsK
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2J1ZmZl
cnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+IE9wdGlvbmFsPFNoYXJlZERpc3BsYXlM
aXN0SGFuZGxlPiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+PiBidWZmZXJzOworICAgIGRlY29kZXIg
Pj4gYnVmZmVyczsKKyAgICBpZiAoIWJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqYnVmZmVycykgfX07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggZDUyNzlmZTYyMjk2M2YwNzQ3MzhhYzFlZTU0
YzM3NGRjYmU3YjUyNy4uMzQ5OTc1Y2VjMTAwYWEzMjVmODJmYzYxNTBhNjc2OTFlYTEyZWMwYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CkBAIC0xNzMsNiArMTczLDcgQEAgU2hhcmVkL1NlcnZpY2VXb3JrZXJJbml0
aWFsaXphdGlvbkRhdGEuY3BwCiBTaGFyZWQvU2Vzc2lvblN0YXRlLmNwcAogU2hhcmVkL1NoYXJl
YWJsZUJpdG1hcC5jcHAgQG5vLXVuaWZ5CiBTaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCitT
aGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCiBTaGFyZWQvU2hhcmVkU3RyaW5nSGFz
aFN0b3JlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRPbmx5LmNwcAogU2hh
cmVkL1NoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFkNjNjMmIzZTI5ODc4NzdiYWYyZjU1ODhl
NjdjMDA3NjM1YjE0ZTQuLmQwYTM4YjljNzdlM2M0YTZhZmI1NzVmNzg5ZWYyODAyYjYwZGFjODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTg4Myw2ICsxODgzLDcgQEAKIAkJRjQ0REZFQjIxRTlFNzUyRjAwMzhEMTk2IC8qIFdlYklj
b25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0NERGRUIwMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmggKi87IH07
CiAJCUY0OEQyQTg1MjE1ODNBN0UwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0OEQyQTg0MjE1ODNBMDIwMEM2NzUy
QiAvKiBBcHBLaXRTUEkuaCAqLzsgfTsKIAkJRjQ5NkE0MzExRjU4QTI3MjAwNEMxNzU3IC8qIERy
YWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ5NkE0MkYxRjU4QTI3MjAwNEMxNzU3IC8qIERyYWdEcm9wSW50ZXJh
Y3Rpb25TdGF0ZS5oICovOyB9OworCQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0QTZENkJCMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oICovOyB9OwogCQlGNENCMDlFNTIyNUQ1QTA5MDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlh
U291cmNlUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNENCMDlFNDIyNUQ1QTAzMDA4OTE0ODcgLyogV2Vic2l0ZU1lZGlhU291cmNlUG9saWN5
LmggKi87IH07CiAJCUY0RDVGNTFEMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RW
aWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjRENUY1MTkyMDYwODdBMDAwMzhCQkE4IC8qIFdLVGV4dElucHV0TGlzdFZpZXdDb250
cm9sbGVyLmggKi87IH07CiAJCUY0RDVGNTFGMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9h
cmRMaXN0Vmlld0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0RDVGNTFCMjA2MDg3QTEwMDM4QkJBOCAvKiBXS1F1aWNrYm9hcmRMaXN0
Vmlld0NvbnRyb2xsZXIuaCAqLzsgfTsKQEAgLTU0ODYsNiArNTQ4Nyw4IEBACiAJCUY0OEQyQTg0
MjE1ODNBMDIwMEM2NzUyQiAvKiBBcHBLaXRTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwS2l0U1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1
NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmg7IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0OTZBNDMwMUY1OEEyNzIwMDRDMTc1NyAv
KiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEcmFn
RHJvcEludGVyYWN0aW9uU3RhdGUubW07IHBhdGggPSBpb3MvRHJhZ0Ryb3BJbnRlcmFjdGlvblN0
YXRlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNEE2RDZCQjI1NENBM0U5MDBC
NjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVk
RGlzcGxheUxpc3RIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2
QkQyNTRDQTUyMjAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjRBQzY1NUUyMkEzMTQwRTAwQTA1NjA3IC8qIFdlYlByZWZlcmVuY2Vz
RGVmYXVsdFZhbHVlc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5tbTsgcGF0aCA9IGlvcy9XZWJQcmVm
ZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0QjM3OEQwMjFEREJCQUIwMDk1QTM3OCAvKiBXZWJVbmRvU3RlcElELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlVuZG9TdGVwSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjRDQjA5
RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYxOTMsNiArNjE5Niw4IEBACiAJCQkJMUE2NDIwRTMxMkRDRTJGRjAwQ0FBRTJD
IC8qIFNoYXJlYWJsZUJpdG1hcC5oICovLAogCQkJCTUxMjE3NDVFMTY0QzIwRTMwMDM3QTVDMSAv
KiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgKi8sCiAJCQkJNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMx
IC8qIFNoYXJlYWJsZVJlc291cmNlLmggKi8sCisJCQkJRjRBNkQ2QkQyNTRDQTUyMjAwQjY1RkFB
IC8qIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcCAqLywKKwkJCQlGNEE2RDZCQjI1NENBM0U5
MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLywKIAkJCQk4MzEzRjdFQTFG
N0RBRTA0MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmNwcCAqLywKIAkJCQk4MzEz
RjdFOTFGN0RBRTAzMDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggKi8sCiAJCQkJ
ODMxM0Y3RTgxRjdEQUUwMzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZS5jcHAgKi8s
CkBAIC0xMTM2MCw2ICsxMTM2NSw3IEBACiAJCQkJNTEyMTc0NjExNjRDMjBFMzAwMzdBNUMxIC8q
IFNoYXJlYWJsZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgzNDk0MjI0RUY0Njc4
MDBCREM5QTggLyogU2hhcmVkQnVmZmVyQ29weS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRDMThG
RjZFRjJBMzEzMEMxMzAxNzY3IC8qIFNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUY0QTZENkJDMjU0Q0EzRTkwMEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8q
IFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Q0QjREOUQxRTc2NUUwMDAwRDI3
MDkyIC8qIFNoYXJlZFJpbmdCdWZmZXJTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEz
RjdFQzFGN0RBRTA4MDBCOTQ0RUIgLyogU2hhcmVkU3RyaW5nSGFzaFN0b3JlLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggYzBlYzFiYjEzMjllODk2ZjJj
ZjYxM2YzN2YzY2FlNDI1NjcxODcwZC4uNjk1MDBkNzgwMmUyNjM1MWQ3ZTk1ODUxMWI5MTE0ZjY5
YjE2ZWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTI3LDYgKzI3LDEwIEBA
CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVt
b3J5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZWNvcmRlci5oPgpAQCAt
MzYsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZSB7CitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVjb3JkZXI6OkRlbGVnYXRlLCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50IHsKICAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47
CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKICAgICB1
c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsKQEAgLTc3
LDYgKzgxLDggQEAgcHJvdGVjdGVkOgogICAgICAgICAsIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgICAgICBt
X2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCkuc2V0SXRlbUJ1ZmZlckNsaWVudCh0aGlzKTsK
KyAgICAgICAgbV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLnNldFRyYWNrc0RyYXdpbmdJ
dGVtRXh0ZW50cyhmYWxzZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyOyB9CkBAIC0xODYsNiArMTkyLDExMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGRpc3Bs
YXlMaXN0LmNsZWFyKCk7CiAgICAgfQogCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QgY2FwYWNpdHkpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpCisgICAgICAg
ICAgICByZXR1cm4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPmNyZWF0ZUl0ZW1CdWZm
ZXIoY2FwYWNpdHkpOworCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGVu
Y29kZUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUgaXRlbSkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkNsaXBQYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2Rl
U2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwUGF0aD4oaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1
c1JpbmdQYXRoPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Jl
Y3RzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzPigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdHbHlw
aHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPihpdGVt
LmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKKyAgICAgICAg
ICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNv
ZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0Zv
clRleHQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0Pigp
KTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdOYXRp
dmVJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihpdGVtLmdldDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3UGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoPigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXR0ZXJuOgor
ICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdQYXR0ZXJuPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rl
cjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFn
ZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPigpKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxl
ZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2Jq
ZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDoK
KyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PihpdGVtLmdldDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxs
UGF0aD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxQYXRoPigpKTsKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9y
OgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICAg
ICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAgICAg
cmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKKyAgICAgICAgICAgIHJldHVy
biBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5k
ZWRSZWN0PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNp
bmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPihpdGVtLmdldDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigpKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVEYXNoOgorICAgICAgICAgICAgcmV0
dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lRGFzaD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNo
PigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0
YXRlOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0YXRlPigpKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoPigpKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Cisj
aWYgVVNFKENHKQorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
QXBwbHlGaWxsUGF0dGVybjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyUmVjdDoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyU2hhZG93OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcDoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
RWxsaXBzZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRy
YXdMaW5lOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJh
d1JlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpFbmRU
cmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxFbGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6Cisj
ZW5kaWYKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxS
ZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRG
cmFtZUZvck1lZGlhOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6UmVzdG9yZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlJvdGF0ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNh
dmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2FsZToK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTToKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVKb2luOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CisjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VSZWN0OgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6VHJhbnNsYXRlOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgZGlk
QXBwZW5kSXRlbU9mVHlwZShXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGUgdHlwZSkgb3Zl
cnJpZGUKICAgICB7CiAgICAgICAgIGlmICh0eXBlID09IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCmluZGV4IGQ1NTc4Yzk4MjAzOWU2YmFkNGQ1MWI4ZDdiMTM4MGE3YTVhNWM4NGIu
Ljk0ZGJkYTRhNDE5ODJkNzYyMWEyZGQwNTU0NGU1NzFiMTUzYmNiZGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmgiCisj
aW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKQEAgLTExNSwxMyArMTE3LDE1IEBAIFJlZlB0cjxJbWFnZURhdGE+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpCiAKIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0
KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7Ci0gICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Rmx1c2hEaXNwbGF5TGlzdChkaXNw
bGF5TGlzdCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Rmx1c2hEaXNwbGF5TGlzdCh7IGRpc3BsYXlMaXN0IH0sIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVkSXRlbUJ1
ZmZlcnMuY2xlYXIoKTsKIH0KIAogRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGNvbnN0IERpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiB7CiAgICAgRGlzcGxheUxpc3RGbHVz
aElkZW50aWZpZXIgc2VudEZsdXNoSWRlbnRpZmllciA9IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpOwotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoZGlzcGxheUxpc3QsIHNlbnRGbHVzaElkZW50
aWZpZXIsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZs
dXNoRGlzcGxheUxpc3RBbmRDb21taXQoeyBkaXNwbGF5TGlzdCB9LCBzZW50Rmx1c2hJZGVudGlm
aWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKyAgICBtX3NoYXJlZEl0ZW1CdWZmZXJzLmNsZWFyKCk7CiAgICAgcmV0dXJuIHNl
bnRGbHVzaElkZW50aWZpZXI7CiB9CiAKQEAgLTE1NCw2ICsxNTgsMjMgQEAgdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoRGlzcGxh
eUxpc3RGbHVzaEkKICAgICAgICAgZG93bmNhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVm
ZmVyUHJveHk+KCppbWFnZUJ1ZmZlcikuY29tbWl0Rmx1c2hEaXNwbGF5TGlzdChmbHVzaElkZW50
aWZpZXIpOwogfQogCitEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSA9IDEg
PDwgMTY7CisKKyAgICBhdXRvIHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6YWxsb2NhdGUo
c3RkOjptYXgoZGVmYXVsdFNoYXJlZEl0ZW1CdWZmZXJTaXplLCBjYXBhY2l0eSkpOworICAgIGlm
ICghc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBpZGVudGlm
aWVyID0gRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAg
IFNoYXJlZE1lbW9yeTo6SGFuZGxlIHNoYXJlZE1lbW9yeUhhbmRsZTsKKyAgICBzaGFyZWRNZW1v
cnktPmNyZWF0ZUhhbmRsZShzaGFyZWRNZW1vcnlIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVj
dGlvbjo6UmVhZE9ubHkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OkRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKGlkZW50aWZpZXIsIHsgV1RGTW92ZShzaGFyZWRN
ZW1vcnlIYW5kbGUpLCBzaGFyZWRNZW1vcnktPnNpemUoKSB9KSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5zZXQoaWRlbnRpZmllciwgc2hh
cmVkTWVtb3J5LmNvcHlSZWYoKSk7CisKKyAgICByZXR1cm4geyBpZGVudGlmaWVyLCByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihzaGFyZWRNZW1vcnktPmRhdGEoKSksIHNoYXJlZE1lbW9yeS0+
c2l6ZSgpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKaW5kZXgg
ZTk5ZTNkNzFjYTkyNjI2YTY5NjJjYzk0ODc3YTdjMTFiODVlZGJhNy4uMjMyM2Y4NzE3YmY0MmNl
NTE0MTFkOGJhZTIyYzM0OGU3ZGFjMDVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgog
I2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5oIgogI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLmg+CiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgflJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOwogCiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5
JiByZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkoKSB7IHJldHVybiBtX3JlbW90ZVJlc291cmNlQ2Fj
aGVQcm94eTsgfQorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNy
ZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90KTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KICAg
ICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CkBAIC04NSw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbWFnZUJ1ZmZlckJhY2tl
bmRXYXNDcmVhdGVkKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKICAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3RXYXND
b21taXR0ZWQoRGlzcGxheUxpc3RGbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllcik7CiAKKyAgICBIYXNoTWFwPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9yeT4+IG1fc2hhcmVkSXRlbUJ1
ZmZlcnM7CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5IG1fcmVtb3RlUmVzb3VyY2VDYWNo
ZVByb3h5IHsgKnRoaXMgfTsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVy
YXRlKCkgfTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCmluZGV4IDhmMjQ1ODU2MzVmNDcwODNkMWRiMjdhNWIzOTY2NjVmMzE1ZWJj
YjAuLjlmMjZhMjMwY2Y2OGIwYmY4ODA5MjhiN2NlZmJiZDg3Zjg1MzQ0ZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMyw4
ICsyMyw4IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhh
bmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoV2Vi
S2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9hdFNpemUgbG9n
aWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5TGlzdFdhc0Nv
bW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
ciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VD
YWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCAzZjVhNzNiZWMzYmYyODZlNTI5ODFkZTQ4
YjkwYzMxZDAxOWQ4YzNkLi4wZjlhNmU4ZjE5ZTFkOTg1NjlmZWQxYmJjNDFkMDc2ODNlYWNmMWFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDEzM2E1NDM1NDkz
NWI3OWI4YmMwMTllZDRkMTMwYjUzYWRjMTE0NDcuLmFkNTJmYzE0M2U3YjMzOTUxYTAxY2M3ZmIw
ZGUwZWJlODI4ZDBlODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0xMC0zMCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVudCBk
aXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8gc2hh
cmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBS
ZWJhc2VsaW5lIHNldmVyYWwgZXhpc3RpbmcgKG5vbi1HUFUtcHJvY2VzcykgZGlzcGxheSBsaXN0
IHRlc3RzIHRvIGFjY291bnQgZm9yIGEgc2xpZ2h0IHR3ZWFrIGluIHRoZSBmb3JtYXQgaW4KKyAg
ICAgICAgd2hpY2ggZGlzcGxheSBsaXN0cyBhcmUgZHVtcGVkIGFzIHRleHQuIE1vcmUgc3BlY2lm
aWNhbGx5LCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgbm93IGR1bXBlZCBhZnRlciBlYWNoCisg
ICAgICAgIGRyYXdpbmcgaXRlbSwgcmF0aGVyIHRoYW4gYmVmb3JlLgorCisgICAgICAgICogZGlz
cGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50
eHQ6CisKIDIwMjAtMTEtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICA8aW5wdXQgZGlzYWJsZWQ+IGRvZXMgbm90IGZpcmUgY2xpY2sgZXZlbnRzIGFmdGVyIGRp
c3BhdGNoRXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52
YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAzMjg4NDgwNjI3MDE5ZDU0MDJkOTQy
NWZjNGExMzEzNzcwZWNiMzFhLi4xNDUxYjE5MjUzYzMyMzg5MjhiYmQ5ZjVlNWRlYmI5Mjc0YzUw
ZDU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1k
aXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC02LDEwICs2LDggQEAKICAgKGZpbGwtY29sb3Ig
I0M4MDAwMCkKICAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0Ci0g
IChleHRlbnQgYXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKLSAgKHJlY3QgYXQgKDEwLDEwKSBzaXpl
IDU1eDUwKSkKKyAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSBleHRlbnQgYXQgKDEwLDE0
MCkgc2l6ZSA1NXg1MCkKIChzZXQtaW5saW5lLWZpbGwtY29sb3IKICAgKGNvbG9yICMwMDAwQzg4
MCkpCiAoZmlsbC1yZWN0Ci0gIChleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKLSAgKHJl
Y3QgYXQgKDMwLDMwKSBzaXplIDU1eDUwKSkKKyAgKHJlY3QgYXQgKDMwLDMwKSBzaXplIDU1eDUw
KSBleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dApp
bmRleCBlOWY1NDA0MTdiZDZlNWRjNzc4NjE1ZTVmMzc5NDk3NmU0MTk1ZjhkLi41OTBiOTNmNWM4
OTJjYWUzN2Y0MjQ2MDlhOGZlNDgwMzNlNjY4MzY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0
CkBAIC05LDkgKzksOCBAQAogICAoc2hhZG93LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAg
IChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0g
IChleHRlbnQgYXQgKDQzLDUwKSBzaXplIDEzNHgxMzcpCiAgIChyZWN0IGF0ICg1MCw1MCkgc2l6
ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291
cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkg
ZXh0ZW50IGF0ICg0Myw1MCkgc2l6ZSAxMzR4MTM3KQogKHJlc3RvcmUpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zv
cm1zLWV4cGVjdGVkLnR4dAppbmRleCBlMDQ1MmExNzNhMWFmZTIzN2Y3MjhkMzBiYzI3ZWM2MGVl
Yzk2MjNkLi4yOGNjZjRjMDE4NTlkZTE5MGIwYTlhMjdmYTJmZWMwMDYzZWQ4ZTFjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVk
ZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKQEAgLTExLDExICsxMSwxMCBAQAogICAoc2hhZG93
LW9mZnNldCB3aWR0aD0xMCBoZWlnaHQ9MjApCiAgIChzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVz
IDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDcuMTQsMC4yMCkgc2l6
ZSAxODQuNTV4MTg1LjY1KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwMHgxMDApCiAgIChjb2xv
ciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJsZW5k
LW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDcuMTQsMC4y
MCkgc2l6ZSAxODQuNTV4MTg1LjY1KQogKHJlc3RvcmUpCiAoc2V0LWN0bQogICAoc2V0LWN0bSB7
bT0oKDEuMDAsMC4wMCkoMC4wMCwxLjAwKSkgdD0oMC4wMCwyMi4wMCl9KSkKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0
CmluZGV4IGJkODc2ZGY0MDNhNGFkZDBiYzM5MWY3YzYyYWMyYjRjM2JjZjdkYTAuLmJjMTdiNTEx
NDk5ZjgyNTZjOTkyOTBkYWU4NjE0ZDQ4OTRjYWY5Y2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMywy
OSArMywyNCBAQAogICAoeCAwLjAwKQogICAoeSAwLjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVj
dAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6
ZSAxMDR4MTA0KQogICAoY29sb3IgIzAwODAwMCkKICAgKGNvbXBvc2l0ZS1vcGVyYXRpb24gc291
cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVuZC1tb2RlIG5vcm1hbCkg
ZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDEwNCkKIChzZXQtc3RhdGUKICAgKGNoYW5nZS1mbGFn
cyAzMjk2MCkKICAgKGZpbGwtY29sb3IgIzAwMDBGRikKICAgKHN0cm9rZS1zdHlsZSAwKQogICAo
c2hvdWxkLWFudGlhbGlhcyAwKSkKIChkcmF3LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwwKSBzaXpl
IDEwNHgyKQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgyKQotICAoYm9yZGVyLXRoaWNrbmVz
cyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgwLDApIHNpemUg
MTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQogICAo
cmVjdCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQor
ICAoYm9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMTAyKSBzaXplIDEwNHgyKQog
KGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgw
LDApIHNpemUgMngxMDQpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9yZGVyLXRo
aWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKIChkcmF3LXJlY3QKLSAg
KGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCiAgIChyZWN0IGF0ICgxMDIsMCkgc2l6ZSAy
eDEwNCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEu
MDApIGV4dGVudCBhdCAoMTAyLDApIHNpemUgMngxMDQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvcmVwbGF5LXNraXAtY2xpcHBlZC1yZWN0LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQu
dHh0CmluZGV4IGFkZGQyY2E0MjUwYzI0YTBjOWVlMjI1NWQ0Mjc1YTc2ZjYwNDNlZWQuLmJiNTkz
ZDIwZjZkYTY0ODYyOTJkMzZjMDIyMGUyYTlkODcyZjgyYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhw
ZWN0ZWQudHh0CkBAIC0zLDExICszLDEwIEBAIHJlY29yZGVkOgogICAoeCAwLjAwKQogICAoeSAw
LjAwKSkKIChmaWxsLWNvbXBvc2l0ZWQtcmVjdAotICAoZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAx
MDB4MTAwKQogICAocmVjdCBhdCAoNDEyLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAw
RkYpCiAgIChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBu
b3JtYWwpKQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNDEyLDApIHNpemUgMTAw
eDEwMCkKIAogcmVwbGF5ZWQ6CiAoCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413436</attachid>
            <date>2020-11-06 09:12:16 -0800</date>
            <delta_ts>2020-11-06 09:39:57 -0800</delta_ts>
            <desc>Rebase on trunk (after r269503)</desc>
            <filename>bug-218406-20201106091215.patch</filename>
            <type>text/plain</type>
            <size>380940</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNkM2M4YTE3NTNhMzc2
N2Q1MDA5ZGM0ZjIyMzQwMWU0NzNkYTM2My4uNjlhOTk5MDQyMGNhMDg1Y2MwYzM5ODMwYmRhOTk3
N2MxYmEwMjM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxMyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAg
ICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBkaXNwbGF5IGxpc3RzIChhbmQgZGlzcGxheSBsaXN0IGl0
ZW1zKSBpbiBwcmVwYXJhdGlvbiBmb3IgdXBjb21pbmcgY2hhbmdlcyB0byBhbGxvdyB0aGUKKyAg
ICAgICAgR1BVIGFuZCB3ZWIgcHJvY2Vzc2VzIHRvIGNvbmN1cnJlbnRseSByZWFkIGFuZCB3cml0
ZSBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCB3aGljaCBhbGxvd3MgdXMgdG8gYWNoaWV2ZQorICAg
ICAgICBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMgaW4gcGVyZm9ybWFuY2Ugb24gbWFueSBncmFw
aGljcyBiZW5jaG1hcmtzIGluIE1vdGlvbk1hcmsgYnkgcmVtb3Zpbmcgb3ZlcmhlYWQgaW52b2x2
ZWQKKyAgICAgICAgaW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgZGlzcGxheSBsaXN0
IGl0ZW1zIG92ZXIgSVBDLiBUbyBpbXBsZW1lbnQgdGhpcywgcmF0aGVyIHRoYW4gdXNpbmcgSVBD
IHRvIGVuY29kZQorICAgICAgICBhbmQgZGVjb2RlIGVhY2ggaXRlbSwgd2Ugd2lsbCBpbnN0ZWFk
IHN0b3JlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbiBtZW1vcnkgc2hhcmVkIGJldHdl
ZW4gdGhlIHdlYiBhbmQgR1BVCisgICAgICAgIHByb2Nlc3Nlcy4KKworICAgICAgICBUaGlzIHN0
cmF0ZWd5LCBvZiBjb3Vyc2UsIHdpbGwgbm90IHdvcmsgZm9yIGRpc3BsYXkgbGlzdCBpdGVtcyB0
aGF0IGNvbnRhaW4gcG9pbnRlcnMuIFVuZm9ydHVuYXRlbHksIHRoaXMKKyAgICAgICAgYWZmZWN0
cyBhbGwgZGlzcGxheSBsaXN0IGl0ZW1zIGF0IHRoZSBtb21lbnQsIHNpbmNlIGFsbCBpdGVtcyBh
cmUgc3ViY2xhc3NlcyBvZiBgRGlzcGxheUxpc3Q6Okl0ZW1gLCBhbmQKKyAgICAgICAgdGhlcmVm
b3JlIGNvbnRhaW4gdnRhYmxlIHBvaW50ZXJzLCBldmVuIGlmIGFsbCBtZW1iZXJzIGFyZSBwbGFp
biBkYXRhIHR5cGVzLiBUaHVzLCB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGJlaW5nCisgICAgICAg
IGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgaXRlbXMgZGlyZWN0bHkgaW4gc2hhcmVkIG1lbW9yeSBp
cyB0byByZW1vdmUgdGhpcyB2dGFibGUgcG9pbnRlciBieSBtYWtpbmcgZGlzcGxheSBsaXN0Cisg
ICAgICAgIGl0ZW1zIG5vIGxvbmdlciBpbmhlcml0IGZyb20gYERyYXdpbmdJdGVtYCBvciBgSXRl
bWAuCisKKyAgICAgICAgQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFyZSBiYWNrZWQgYnkgYFZl
Y3RvcjxSZWY8SXRlbT4+YDsgaG93ZXZlciwgdGhpcyBubyBsb25nZXIgd29ya3Mgb25jZSBub25l
IG9mIHRoZQorICAgICAgICBkaXNwbGF5IGxpc3QgaXRlbXMgYXJlIGRlc2NlbmRlZCBmcm9tIGEg
Y29tbW9uIGJhc2UgY2xhc3MuIFRvIGFkZHJlc3MgdGhpcywgd2UgaW50cm9kdWNlCisgICAgICAg
IGBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcmAsIHdoaWNoIGVuY2Fwc3VsYXRlcyBsb2dpYyB0byBt
YW5hZ2Ugb25lIG9yIG1vcmUgZGF0YSBzZWdtZW50cyB0aGF0IGNvbnRhaW4gZGlzcGxheQorICAg
ICAgICBsaXN0IGl0ZW0gZGF0YSAoaS5lLiBkaXNwbGF5IGxpc3QgaXRlbXMgc3RhY2tlZCBhZGph
Y2VudCB0byBlYWNoIG90aGVyIGluIG1lbW9yeSkuIERpc3BsYXkgbGlzdHMgbm93IGFwcGVuZAor
ICAgICAgICBpbmxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIGJ5IGNvbnN0cnVjdGluZyB0aGVzZSBp
dGVtcyBkaXJlY3RseSBpbnNpZGUgdGhlIGl0ZW0gYnVmZmVyIHVzaW5nIHBsYWNlbWVudC1uZXcu
CisKKyAgICAgICAgSG93ZXZlciwgbWFueSB0eXBlcyBvZiBkaXNwbGF5IGxpc3QgaXRlbXMgZG8g
bm90IGNvbnNpc3QgZW50aXJlbHkgb2YgaW5saW5lIGRhdGE7IHNvbWUgb2YgdGhlc2UgYXJlIG9i
dmlvdXMsCisgICAgICAgIHN1Y2ggYXMgYERyYXdJbWFnZWAsIGBEcmF3R2x5cGhzYCwgb3IgYFN0
cm9rZVBhdGhgIChzaW5jZSBhIGBQYXRoYCBtYXkgYmUgYXJiaXRyYXJpbHkgY29tcGxleCkuIE90
aGVyIG91dC1vZi0KKyAgICAgICAgbGluZSBpdGVtIHR5cGVzIGFyZSBsZXNzIG9idmlvdXM6IGZv
ciBpbnN0YW5jZSwgYEZpbGxSb3VuZGVkUmVjdGAgaXMgYW4gb3V0LW9mLWxpbmUgaXRlbSBkdWUg
dG8gdGhlIGZhY3QgdGhhdAorICAgICAgICB0aGUgY29sb3Igb2YgdGhlIHJlY3QgKGBGaWxsUm91
bmRlZFJlY3Q6Om1fY29sb3JgKSBtYXkgYmUgYW4gZXh0ZW5kZWQgY29sb3IsIHdoaWNoIHRoZW4g
Y29udGFpbnMgYSBwb2ludGVyLiBJbgorICAgICAgICB0aGVzZSBjYXNlcywgd2UgY2FuJ3Qgc2lt
cGx5IGVuY29kZSB0aGUgaXRlbSBpbiBzaGFyZWQgbWVtb3J5IGFuZCByZWFkIGl0IGluIHRoZSBH
UFUgcHJvY2Vzcywgc2luY2UgdGhlIHBvaW50ZXIKKyAgICAgICAgKGlmIGl0IHBvaW50ZWQgdG8g
YW55dGhpbmcgb3RoZXIgdGhhbiBudWxsIGluIHRoZSB3ZWIgcHJvY2Vzcykgd2lsbCBwb2ludCB0
byBhcmJpdHJhcnkgbWVtb3J5IGluIHRoZSBHUFUKKyAgICAgICAgcHJvY2Vzcy4gSW5zdGVhZCwg
d2UgY2FuIGxldmVyYWdlIG91ciBleGlzdGluZyBJUEMgaW5mcmFzdHJ1Y3R1cmUgaGVyZSBieSBl
bmNvZGluZyBlYWNoIG9mIHRoZXNlIG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFzIGRhdGEg
YW5kIGRlY29kaW5nIHRoZW0gZnJvbSB0aGlzIGRhdGEgaW4gdGhlIEdQVSBwcm9jZXNzLiBUbyBk
byB0aGlzLCB3ZSBkZWxlZ2F0ZSBvdXQgdG8gV2ViS2l0MiB0bworICAgICAgICBlbmNvZGUgb3V0
LW9mLWxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIHVzaW5nIFdlYktpdCdzIGBJUEM6OkVuY29kZXJg
LCBhbmQgcGFzcyBiYWNrIGEgYFNoYXJlZEJ1ZmZlcmAgd2hpY2ggd2UKKyAgICAgICAgdGhlbiBj
b3B5IGludG8gdGhlIGl0ZW0gYnVmZmVyLiBUaGlzIGRlbGVnYXRpb24gaGFwcGVucyB0aHJvdWdo
IHRoZSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgIGNsYXNzLCB3aGljaCBoYXMKKyAgICAgICAg
YW4gaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0Mi4gT24gdGhlIGRlY29kaW5nIHNpZGUgaW4gdGhl
IEdQVSBwcm9jZXNzLCB3ZSB0aGVuIGFzayBgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnRgIChpZgor
ICAgICAgICBzZXQpIHRvIGNvbnZlcnQgdGhpcyBlbmNvZGVkIGRhdGEgYmFjayBpbnRvIGEgZGlz
cGxheSBsaXN0IGl0ZW0uIEluIFdlYktpdDIsIHdlIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBh
bmQgdXNlCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGBJUEM6OkRlY29kZXJgIHRvIGRlY29k
ZSB0aGUgZGF0YSB3ZSBzZXJpYWxpemVkIGVhcmxpZXIuCisKKyAgICAgICAgSWYgbm8gY2xpZW50
IGlzIHNwZWNpZmllZCBvciB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVpcmUgY3VzdG9tIGVuY29k
aW5nL2RlY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0eXBlLCB3ZQorICAgICAgICBmYWxsIGJh
Y2sgdG8gY29uc3RydWN0aW5nIHRoZSBpdGVtIGRpcmVjdGx5IGluc2lkZSB0aGUgd3JpdGFibGUg
aXRlbSBidWZmZXIgZGF0YS4KKworICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byByZWFzb24g
YWJvdXQgdGhlc2UgbmV3IChpbmhlcml0YW5jZS1mcmVlKSBkaXNwbGF5IGxpc3QgaXRlbXMsIHdl
IGFkZGl0aW9uYWxseSBpbnRyb2R1Y2UKKyAgICAgICAgYEl0ZW1IYW5kbGVgLCB3aGljaCB3cmFw
cyBhIHBvaW50ZXIgdG8gYSBkaXNwbGF5IGxpc3QgaXRlbSBhbmQgcHJvdmlkZXMgc2V2ZXJhbCBo
ZWxwZXIgbWV0aG9kcy4gVGhlIGZpcnN0IGJ5dGUKKyAgICAgICAgb2YgZWFjaCBpdGVtIGhhbmRs
ZSBhbHdheXMgcG9pbnRzIHRvIGFuIGBJdGVtVHlwZWAsIGFuZCB0aGUgZm9sbG93aW5nIGBOYCBi
eXRlcyBjb250YWluIHRoZSBpdGVtIGl0c2VsZiwgd2hlcmUKKyAgICAgICAgYE5gIGlzIHRoZSBz
aXplIG9mIHRoZSBpdGVtIGNsYXNzLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1
c2UgYW4gYEl0ZW1IYW5kbGVgOgorCisgICAgICAgICAgICAgICAgYERpc3BsYXlMaXN0OjpJdGVt
VHlwZSB0eXBlID0gaXRlbUhhbmRsZS50eXBlKCk7YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50
IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAgICAgICAgICAgYGlmIChpdGVtSGFuZGxlLmlz
PFN0cm9rZVBhdGg+KCkpIHsuLi5gIChSZXBsYWNlcyBpczw+IGluIHRoZSBjdXJyZW50IG1vZGVs
KQorCisgICAgICAgICAgICAgICAgYGF1dG8mIHNldFN0YXRlSXRlbSA9IGl0ZW1IYW5kbGUuZ2V0
PFNldFN0YXRlPigpO2AgKFJlcGxhY2VzIGRvd25jYXN0PD4gaW4gdGhlIGN1cnJlbnQgbW9kZWwp
CisKKyAgICAgICAgICAgICAgICBgaXRlbUhhbmRsZS5hcHBseShteUdyYXBoaWNzQ29udGV4dCk7
YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAg
ICAgICAgICAgYGJvb2wgaXNEcmF3aW5nSXRlbSA9IGl0ZW1IYW5kbGUuaXNEcmF3aW5nSXRlbSgp
O2AgKFJlcGxhY2VzIGNoZWNrcyBmb3IgYGlzPERyYXdpbmdJdGVtPihpdGVtKWApCisKKyAgICAg
ICAgV2hlbiB3cml0aW5nIGRpc3BsYXkgbGlzdHMgZm9yIHRoZSBHUFUgcHJvY2VzcywgdGhlIHdy
aXRpbmcgY2xpZW50IChhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGApIHdpbGwgYmUgYXNrZWQK
KyAgICAgICAgdG8gcHJvdmlkZSBgSXRlbUJ1ZmZlckhhbmRsZWBzIHdoZXJlIHRoZSBpdGVtIGJ1
ZmZlciB3aWxsIHBsYWNlIGl0ZW0gZGF0YSAod2hldGhlciBlbmNvZGVkLCBvciBhcyBhbiBpbmxp
bmUKKyAgICAgICAgb2JqZWN0KS4gSG93ZXZlciwgd2hlbiB1c2luZyBkaXNwbGF5IGxpc3RzIG91
dHNpZGUgb2YgdGhpcyBjb250ZXh0IChlLmcuIGluIG90aGVyIHBhcnRzIG9mIFdlYkNvcmUsIHN1
Y2ggYXMgdGhlCisgICAgICAgIGdseXBoIGRyYXdpbmcgY2FjaGUpLCB3ZSBkb24ndCBoYXZlIGEg
YEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YC4gVG8gaGFuZGxlIHRoaXMsIHRoZSBpdGVtIGJ1ZmZl
ciBpbnN0ZWFkCisgICAgICAgIGFsbG9jYXRlcyBpdHMgb3duIChub24tc2hhcmVkLW1lbW9yeSkg
YnVmZmVycywgd2hpY2ggaXQgbWFuYWdlcyBhbmQgZGVsZXRlcyB3aGVuIGl0IGlzIGRvbmUuIElm
IGFueSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIHRo
ZXNlIGJ1ZmZlcnMsIGBJdGVtQnVmZmVyYCB3aWxsIGFkZGl0aW9uYWxseSBjYWxsIHRoZWlyIGRl
c3RydWN0b3JzIHByaW9yIHRvCisgICAgICAgIGRlbGV0aW5nIHRoZXNlIGJ1ZmZlcnMuCisKKyAg
ICAgICAgU2VlIHBlci1jaGFuZ2UgY29tbWVudHMgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I9KToKKworICAgICAgICBJbXBsZW1lbnQgdGhl
IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvciBhbmQgbW92ZSBjb25zdHJ1Y3RvciBieSBleGNoYW5n
aW5nIG93bmVyc2hpcCBvZiB0aGUgaXRlbSBidWZmZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojphc1RleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wIGNvbnN0KToKKworICAgICAgICBB
ZGp1c3QgdGhlIGZvcm1hdCB3aGVuIHByaW50aW5nIGRpc3BsYXkgbGlzdHMgdG8gYFRleHRTdHJl
YW1gLiBOb3cgdGhhdCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgdHJhY2tlZCBvbiB0aGUKKyAg
ICAgICAgZGlzcGxheSBsaXN0IHJhdGhlciB0aGFuIGJlaW5nIG9uIGVhY2ggZHJhd2luZyBpdGVt
LCB3ZSBwcmludCB0aGVtIG91dCBhZnRlciBlYWNoIGl0ZW0gKGFzIG9wcG9zZWQgdG8gYmVpbmcg
aW4KKyAgICAgICAgdGhlIG1pZGRsZSBvZiBlYWNoIGl0ZW0pLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzIGNvbnN0KToKKworICAgICAg
ICBUYWxseSB1cCB0aGUgc2l6ZSBvZiB0aGUgZGlzcGxheSBsaXN0IGJ5IHRha2luZyB0aGUgc3Vt
IG9mIHRoZSBzaXplcyBvZiBlYWNoIHJlYWRvbmx5IHNlZ21lbnQsIGFzIHdlbGwgYXMgdGhlCisg
ICAgICAgIHdyaXRhYmxlIGJ1ZmZlciBzaXplLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmlzRW1wdHkgY29uc3QpOgorCisgICAgICAgIEEgRGlzcGxheUxp
c3QgaXMgZW1wdHkgaWYgaXQgY29udGFpbnMgbm8gaXRlbSBkYXRhOiBpbiBvdGhlciB3b3Jkcywg
dGhlcmUgYXJlIG5vIHJlYWRvbmx5IGJ1ZmZlciBzZWdtZW50cywgYW5kCisgICAgICAgIHRoZXJl
IGlzIGFsc28gbm90aGluZyB3cml0dGVuIHRvIHRoZSB3cml0YWJsZSBidWZmZXIgc2VnbWVudC4K
KworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1
ZmZlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgdG8gaXRl
cmF0ZSBvdmVyIGVhY2ggSXRlbUJ1ZmZlckhhbmRsZSBpbiB0aGUgZGlzcGxheSBsaXN0LiBUaGlz
IGluY2x1ZGVzIGFsbCByZWFkb25seSBoYW5kbGVzLCBhbmQKKyAgICAgICAgdGhlbiB0aGUgd3Jp
dGFibGUgaGFuZGxlIChpZiBpdCBleGlzdHMpLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk6CisKKyAgICAg
ICAgQWRkIGFuIG9wdGlvbiB0byBhbGxvdyB0aGUgZGlzcGxheSBsaXN0IHRvIHRyYWNrIGRyYXdp
bmcgaXRlbSBleHRlbnRzLiBDdXJyZW50bHksIGRpc3BsYXkgbGlzdHMgYWx3YXlzIHRyYWNrCisg
ICAgICAgIGV4dGVudHMgZm9yIGRyYXdpbmcgaXRlbXM7IGhvd2V2ZXIsIHdoZW4gcHJvcGFnYXRp
bmcgZGlzcGxheSBsaXN0cyB0byB0aGUgR1BVIHByb2Nlc3MgZm9yIHBsYXliYWNrLCB0aGVzZQor
ICAgICAgICBleHRlbnRzIHdlcmUgbmV2ZXIgc2VudCBhbG9uZyB3aXRoIElQQywgYW5kIHNvIHRo
aXMgZW5kZWQgdXAganVzdCBiZWluZyB1bm5lY2Vzc2FyeSB3b3JrLiBBZGRpdGlvbmFsbHksIHRo
ZQorICAgICAgICBpbml0aWFsIGNsaXAgaW4gdGhlIEdQVSBwcm9jZXNzIGlzIGFsc28gbmV2ZXIg
c2V0LCBzbyBjb21wdXRpbmcgdGhlc2UgZXh0ZW50cyBuZXZlciBoZWxwZWQuCisKKyAgICAgICAg
VGhhdCBzYWlkLCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgc3RpbGwgcHJpbnRlZCBvdXQgZm9y
IHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhpcworICAgICAg
ICBsb2dpYyBpbnRhY3Q7IHRoaXMgcmVmYWN0b3Jpbmcgb25seSBkaXNhYmxlcyBleHRlbnQgY29t
cHV0YXRpb24gZm9yIGRpc3BsYXkgbGlzdHMgYmVpbmcgc2VudCB0byB0aGUgR1BVIHByb2Nlc3MK
KyAgICAgICAgdmlhIHJlbW90ZSBpbWFnZSBidWZmZXJzLiBJbiBhIGZ1dHVyZSBwYXRjaCwgd2Ug
Y291bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0IGRyYXdpbmcgaXRlbXMgY29udGFpbiBleHRlbnQg
cmVjdHMKKyAgICAgICAgYXMgaW5saW5lIGRhdGEgdGhhdCBjYW4gYmUgY29uc3VsdGVkIGluIHRo
ZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjphcHBlbmQpOgorCisgICAgICAgIERpc3BsYXkgbGlzdCBpdGVtcyBhcmUgbm8gbG9uZ2Vy
IGNvbnN0cnVjdGVkIGFoZWFkIG9mIHRpbWUsIGFuZCB0aGVuIGFwcGVuZGVkIHRvIHRoZSBkaXNw
bGF5IGxpc3QuIEluc3RlYWQsCisgICAgICAgIGBhcHBlbmRgIG5vdyB0YWtlcyB0aGUgdHlwZSBv
ZiB0aGUgaXRlbSB0byBhcHBlbmQgYXMgYSB0ZW1wbGF0ZSB0eXBlbmFtZSBhcmd1bWVudCwgYXMg
d2VsbCBhcyB0aGUgYXJndW1lbnRzIHRoYXQKKyAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGNvbnN0
cnVjdCB0aGUgaXRlbS4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVh
ckN1cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om1vdmVUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcik6
CisKKyAgICAgICAgSW1wbGVtZW50IGEgQysrIGl0ZXJhdG9yIGZvciBEaXNwbGF5TGlzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBjb2RlIGxpa2UgdGhpczoKKyAgICAgICAgYGBg
CisgICAgICAgIC8vIFN1cHBvc2UgZGlzcGxheUxpc3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0LgorICAgICAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBk
aXNwbGF5TGlzdCkgeworICAgICAgICAgICAgICAgIC8vIERvIHRoaW5ncyB3aXRoIGl0ZW0sIHdo
aWNoIGlzIGEgRGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUuCisgICAgICAgICAgICAgICAgLy8gTWF5
YmUgZG8gdGhpbmdzIHdpdGggZXh0ZW50LCB3aGljaCBpcyBhbiBPcHRpb25hbDxGbG9hdFJlY3Q+
LgorICAgICAgICB9CisgICAgICAgIGBgYAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp+
aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjplbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVm
ZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Omxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAg
IFJlbW92ZSB0aGUgYWJpbGl0eSB0byBgZW5jb2RlYCBhbmQgYGRlY29kZWAgZGlzcGxheSBsaXN0
cywgZm9yIHRoZSB0aW1lIGJlaW5nLiBGb3IgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUK
KyAgICAgICAgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzLCB3ZSBub3cgdXNlIGBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZWAuCisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dCB0aGUgZXh0YW50IGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIGRpc3BsYXkgbGlzdCBpdGVtIHdp
bGwgYmUgYnJva2VuIGZvciB0aGUKKyAgICAgICAgdGltZSBiZWluZy4gSW4gYSBmb2xsb3d1cCBw
YXRjaCwgSSBwbGFuIHRvIHJlaW1wbGVtZW50IGBEaXNwbGF5TGlzdDo6ZW5jb2RlYCBhbmQgYGRl
Y29kZWAgaW4gdGhlIG5ldyBpbmxpbmUgaXRlbQorICAgICAgICBtb2RlbCBieSBlbmNvZGluZyBl
YWNoIGl0ZW0gKGVpdGhlciBhcyBpbmxpbmUgZGF0YSBvciB2aWEgYElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0YCkuIEhvd2V2ZXIsIHRoaXMgaXMKKyAgICAgICAgY29udGluZ2VudCBv
biBhbGwgZGlzcGxheSBsaXN0IGl0ZW0gdHlwZXMgKGUuZy4gYERyYXdJbWFnZWAgYW5kIGBEcmF3
R2x5cGhgKSBub3QgcmVseWluZyBvbiBgSVBDOjpBdHRhY2htZW50YAorICAgICAgICBmb3IgZW5j
b2RpbmcsIHNvIHN1cHBvcnQgZm9yIGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIHdpbGwgbmVlZCB0
byB3YWl0IHVudGlsIGFmdGVyIGZvbnRzIGFuZCBpbWFnZXMgYXJlIHdvcmtpbmcuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorCisgICAgICAgIENoYW5nZSB0aGVzZSB0byB1c2UgdGhlIG5ldyB0ZW1wbGF0ZWQgYERpc3Bs
YXlMaXN0OjphcHBlbmRgIG1ldGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnRha2VEaXNwbGF5TGlzdCk6CisKKyAgICAg
ICAgVXNlIGBzdGQ6OmV4Y2hhbmdlYCBpbnN0ZWFkIG9mIGBXVEZNb3ZlYC4gVGhpcyBpcyBhY3R1
YWxseSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIChpLmUuIG5vCisg
ICAgICAgIGxlYWtzIG9yIGRvdWJsZS1mcmVlaW5nKSwgc2luY2UgdGhlIGBEaXNwbGF5TGlzdGAg
aW5zdGFuY2UgdGhhdCBpcyBiZWluZyBtb3ZlZCBmcm9tIG5lZWRzIHRvIGJlIGVtcHR5IHNvIHRo
YXQgaXQKKyAgICAgICAgZG9lcyBub3QgdHJ5IHRvIGNhbGwgZGVzdHJ1Y3RvcnMgb24gdGhlIGl0
ZW1zIGZvcm1lcmx5IGluc2lkZSBvZiBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisKKyAgICAgICAgQWRkIGhl
bHBlciBtZXRob2RzIHRvIGFwcGx5IGEgZGlzcGxheSBsaXN0IGl0ZW0gdG8gYSBgR3JhcGhpY3ND
b250ZXh0YCBhbmQgY2FsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW0ncworICAgICAgICBkZXN0cnVj
dG9yLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
SGFuZGxlOjpjb3B5VG8gY29uc3QpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBtZXRob2QgdG8g
Y29weSB0aGUgaXRlbSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBoYW5kbGUgKGNhbGxpbmcgdGhlIGNv
cHkgY29uc3RydWN0b3Igb2YgdGhlIGl0ZW0gdHlwZQorICAgICAgICBpbiB0aGUgcHJvY2Vzcyku
IFRoaXMgaXMgdXNlZCB3aGVuIGNvcHlpbmcgYSB2YWxpZGF0ZWQgZGlzcGxheSBsaXN0IGl0ZW0g
aW50byB0aGUgdGVtcG9yYXJ5IGl0ZW0gYnVmZmVyIGluCisgICAgICAgIGBEaXNwbGF5TGlzdDo6
aXRlcmF0b3JgLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fYWxsb2NhdGVk
QnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gYG1fd3Jp
dGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2luZyBpbi1wcm9jZXNzIGBEaXNwbGF5
TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFpbnRpbmcpLCB0aGUgZGlzcGxheSBs
aXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcg
ZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBuZWVkcyB0byByZW1lbWJlciB0byBm
cmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdoZW4gYXBwZW5kaW5nLCBhbmQgbXVz
dCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAgICAgIGRpc3BsYXkgbGlzdCBpdGVt
cyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1Y3RvcnMpIHdoZW4gaXQgaXMgZmlu
aXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3JlYWRPbmx5QnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0YWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0dGVuTnVtYmVyT2ZCeXRlcyk6CisK
KyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFib3ZlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1C
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmZvckVh
Y2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0
b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlcldyaXRpbmdD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlCdWZmZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp1bmNoZWNrZWRBcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlzIGZpbGUgbWFrZSB1cCBtb3N0IG9m
IHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5
IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRoaXMgcGF0Y2g6CisgICAgICAgIC0g
QWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1UeXBlYCBvZiBlYWNoIGRpc3BsYXkg
bGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MKKyAg
ICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MgaXMg
YSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBlbmNvZGVgIGFuZCBgZGVjb2RlYCBt
ZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAgICAgICAgLSBSZW1vdmUgYWxsIG92
ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1wbGVtZW50cyBpbmRpdmlkdWFsIG1l
dGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAgIGBnbG9iYWxCb3VuZHNgIChpZiBh
cHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRzYCAoYWdhaW4sIGlmIGFwcGxpY2Fi
bGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBkdW1waW5nIGhlbHBlcnMsIHNvIHRo
YXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5nSXRlbWAgYmVmb3JlIGR1bXBpbmcg
ZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpE
cmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpJdGVtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OkRyYXdpbmdJ
dGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpTYXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpSZXN0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6
OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVk
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpEcmF3UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRy
YXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpEcmF3
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRp
YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJv
a2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxs
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRy
YW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRl
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2Nh
bGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6
U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5h
dGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
b25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpjb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENv
bG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6bG9j
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OnRoaWNrbmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVK
b2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNs
aXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlw
aHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpE
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvblJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Bh
dGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpyZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5l
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElu
bGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJv
a2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06
OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpn
bG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVu
dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Sm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRv
dzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdl
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Vs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBh
dGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0
cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5Rmls
bFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0ZWQuCisKKyAgICAg
ICAgRGVsZXRlIHRoZSBnZW5lcmljIGBJdGVtOjplbmNvZGVgIGFuZCBgSXRlbTo6ZGVjb2RlYCBt
ZXRob2RzLCBzaW5jZSBvbmx5IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBoYXZlCisg
ICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGZ1bmN0aW9ucyBub3cuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFj
dG9yKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgbWV0aG9kcyB0aGF0IGFwcGVuZCBkaXNwbGF5
IGxpc3QgaXRlbXMgZW4gbWFzc2UsIHN1Y2ggdGhhdCB0aGV5IGdvIGZyb20gdGhpczoKKworICAg
ICAgICAgICAgICAgIGBtX2Rpc3BsYXlMaXN0LmFwcGVuZChGb286OmNyZWF0ZShhcmcxLCBhcmcy
LCBhcmczKSk7YAorCisgICAgICAgIC4uLnRvIHRoaXM6CisKKyAgICAgICAgICAgICAgICBgbV9k
aXNwbGF5TGlzdC5hcHBlbmQ8Rm9vPihhcmcxLCBhcmcyLCBhcmczKTtgCisKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICBFeHRlbnRzIGFyZSBub3cgYXV0b21hdGljYWxseSB1cGRhdGVkICh1bmxlc3Mgb3RoZXJ3
aXNlIHNwZWNpZmllZCkgZm9yIGFueSBkcmF3aW5nIGl0ZW1zIHRoYXQgYXJlIGFwcGVuZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5k
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OnJl
cGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6
RGVsZWdhdGU6OmFwcGx5KToKKwogMjAyMC0xMS0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIGxvY2FsQ2FyZXRPZmZzZXQg
c2hvdWxkIHVzZSBpdGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmOTYzYzA4YTVmYThhYmY0ZTA5YTA4MzE1
NzcyNTg3YjI2Y2M4OWIzLi5hYTk2MzdhZDZmZGRkZGQ1MjJiMTc2NzM2Y2FmN2RmMzVkZGE2NDA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIwLTExLTAzICBXZW5zb24gSHNpZWggIDx3
ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3BsYXkgbGlz
dHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYK
KworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkanVzdCBmb3Ig
Y2hhbmdlcyB0byBkaXNwbGF5IGxpc3RzIGFuZCBkaXNwbGF5IGxpc3QgaXRlbXMgaW4gV2ViQ29y
ZSAoc2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZQorICAgICAgICBpbmZvcm1h
dGlvbikuIEluIHBhcnRpY3VsYXIsIHdlIGltcGxlbWVudCB0aGUgcmVhZGluZyBhbmQgd3JpdGlu
ZyBjbGllbnQgaG9va3MgY29uc3VsdGVkIGJ5IEl0ZW1CdWZmZXIsIGFuZCB3ZQorICAgICAgICBh
bHNvIGFkZCBhIHRlbXBvcmFyeSBtZWNoYW5pc20gdGhhdCBhbGxvd3MgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IChpbiB0aGUgd2ViIHByb2Nlc3MpIHRvIHNlbmQgZGlzcGxheSBsaXN0Cisg
ICAgICAgIGl0ZW0gZGF0YSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgdG8gdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgKGluIHRoZSBHUFUgcHJvY2VzcykuIFRoaXMgdGVtcG9yYXJ5IG1lY2hhbmlz
bQorICAgICAgICBkb2VzIG5vdCBhdHRlbXB0IHRvIG1ha2UgYW55IHJlYWRpbmcgb3Igd3JpdGlu
ZyBpbiBzaGFyZWQgbWVtb3J5IGNvbmN1cnJlbnQgYmV0d2VlbiB0aGUgR1BVIGFuZCB3ZWIgcHJv
Y2Vzc2VzLAorICAgICAgICBhbmQgZXhpc3RzIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgcmVuZGVy
aW5nIHdpdGggdGhlIEdQVSBwcm9jZXNzIHN0aWxsIHdvcmtzIHVzaW5nIHRoZXNlIG5ldyBkaXNw
bGF5IGxpc3QgaXRlbXMuCisKKyAgICAgICAgSW4gdGhlIG5leHQgcGF0Y2gsIEkgd2lsbCBhZGQg
YSBzaW1wbGUgY29uY3VycmVudCByZWFkZXIvd3JpdGVyIG1vZGVsIGZvciBkaXNwbGF5IGxpc3Qg
cHJvY2Vzc2luZyBiZXR3ZWVuIHRoZQorICAgICAgICB3ZWIgYW5kIEdQVSBwcm9jZXNzZXMsIGFu
ZCAoaW4gZG9pbmcgc28pIHJldmVydCBtb3N0IG9mIHRoZSBjaGFuZ2VzIGluIGBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kYCBhbmQKKyAgICAgICAgYFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eWAg
YmVsb3cuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBtb3JlIGRldGFpbC4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENyZWF0ZSk6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbSk6
CisKKyAgICAgICAgUmVmYWN0b3IgdGhlc2UgdG8gdGFrZSBgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1IYW5kbGVgLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVk
L1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNwbGF5TGlzdCBjb25z
dCk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg6IEFkZGVkLgor
CisgICAgICAgIEFkZCBhIFdlYktpdDIgaGVscGVyIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBkaXNw
bGF5IGxpc3QgZGF0YSBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgcHJvcGFnYXRlZCBmcm9tIHRo
ZSB3ZWIKKyAgICAgICAgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuIEluIHRoZSBuZXh0IHBh
dGNoLCB0aGlzIGNsYXNzIHdpbGwgYmUgcmV3cml0dGVuIHRvIHN1cHBvcnQgY29uY3VycmVudCBk
aXNwbGF5IGxpc3QKKyAgICAgICAgcmVhZGluZyBhbmQgd3JpdGluZywgd2l0aCBzcGVjaWFsaXpl
ZCBzdWJjbGFzc2VzIGluIHNlcnZpY2Ugb2YgYm90aCB0aGUgcmVhZGVyIChpLmUuIHRoZSBHUFUg
cHJvY2VzcykgYW5kIHRoZQorICAgICAgICB3cml0ZXIgKGkuZS4gdGhlIHdlYiBwcm9jZXNzKS4K
KworICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OmRlY29kZSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxh
eUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
Y3BwOgorCiAyMDIwLTExLTA1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEVuY29kaW5nIFB1dEltYWdlRGF0YSBzaG91bGQgbm90IHNlcmlhbGl6ZSBz
ZXBhcmF0ZSBJUEMgYXR0YWNobWVudHMgZm9yIHRoZSBpbWFnZSBkYXRhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCBiMzUxNWQzZDViN2Y3M2Y3OTYxMzk2MGJlMDRiMzdiNDU3OTIyOTgxLi5hNDNjMjA1
ODE2NWU4NDU5M2Y4OTRjNmFjYmU2ODQyZTJiY2E1ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTEyNTMsNiArMTI1Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0ZTczMTdiMzMwOTYw
MmRmYTliNTU3MGQzNTZjOGJiYjMzYjg0NDMuLmY3NDNkZGE1Yjc5MGRlZWY1ZmE1NGViYTVlNTE4
YzMwZGFjZjdlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYzLDYgKzE5NjMsNyBAQCBwbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4NWQ2MmUyMjEzMWIyY2Qw
ZDk3MTk0YjVkOWI0ZDBiNmQ3YTc3YmE3Li4xN2I5YzNkMmNmYmQzNTE0YWUxOWI5OGFiYWUwMjBm
ZWEzYjcwODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01MjAyLDYgKzUyMDIsNyBAQAogCQlGNEM1RjIwNzI0NzlFODgyMDBF
OUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QzVGMjA1MjQ3OUU3RUUwMEU5QjRGNSAvKiBDbGlwYm9h
cmRJbWFnZVJlYWRlci5oICovOyB9OwogCQlGNEQwNzU1ODIzNEQ4MjJEMDA4ODFFNzMgLyogQ2xp
cGJvYXJkSXRlbURhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NkM0NDdBMjM0NjUzNUUwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtRGF0
YVNvdXJjZS5oICovOyB9OwogCQlGNEQwNzU1OTIzNEQ4MjMzMDA4ODFFNzMgLyogQ2xpcGJvYXJk
SXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRl
bVBhc3RlYm9hcmREYXRhU291cmNlLmggKi87IH07CisJCUY0RDQwQkM5MjU1NDYzQkYwMDcyMTM0
OSAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGNEQ0M0Q2NjIxODgwMzhCMDBFQ0VDQUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnRE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0
M0Q2NDIxODgwMkU2MDBFQ0VDQUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRFNTdFREMyMTNG
M0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEU1N0VEQTIxM0YzRjVGMDA0RUE5OEUgLyog
Rm9udEF0dHJpYnV0ZUNoYW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGNEU1N0VFMTIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9u
dE1hbmFnZXJFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0RTU3RURGMjEzRjQzNEEwMDRFQTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4
dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xNjMzOCw2ICsxNjMzOSw4IEBACiAJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vy
cm9ySGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9ySGFu
ZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NTIzNjNCNThDMDAw
NDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudGVyS2V5SGludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NjIzNjNCNThDMDAwNDQ1NTAgLyog
RW50ZXJLZXlIaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVudGVyS2V5SGludC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBE
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI2MjUzRjcwNjUwMDRF
NzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQy
OTI2MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVBsYXllcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQg
LyogU3RhdGljUGFzdGVib2FyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dGF0aWNQYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzY0Nyw2
ICsxNzY1MCw4IEBACiAJCQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuY3BwICovLAogCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUw
NEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKKwkJCQlGNDIyQjhCNjI1M0Y3MDY1
MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLywKKwkJCQlGNDIyQjhCNTI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8sCiAJCQkJMEZFNUZC
Q0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVG
QkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJRjQzNzdE
NTYyNTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwICovLApAQCAtMzUw
ODQsNiArMzUwODksNyBAQAogCQkJCUUxRUU4Qjk3MjQxMzE5NTAwMEU3OTRENiAvKiBYUkV5ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRThCOEYyNDEzMTk1MDAwRTc5NEQ2IC8qIFhSRnJhbWVS
ZXF1ZXN0Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUU4QjkyMjQxMzE5NTAwMEU3
OTRENiAvKiBYUkhhbmRlZG5lc3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUY0RDQwQkM5MjU1NDYz
QkYwMDcyMTM0OSAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxRUU4QjlGMjQxMzE5NTAwMEU3OTRENiAvKiBYUklucHV0U291cmNlRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUxRUU4Qjk5MjQxMzE5NTAwMEU3OTRENiAvKiBYUklucHV0U291cmNlc0No
YW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTJBOUY0QTI0OEE5OUUyMDAzRjA2Qzgg
LyogWFJJbnRlcmFjdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA5NjM1M2FkZWRm
ZjExZWQ1ZDQxNWFkNTdmZGZkYjRiMjgwZDUwNGRkLi4wYjM1YWM2NGZhOGI5ZmZlMGM5NDQ4NWU5
NzNmMjRjMmFhMGYzNDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTYzLDEwICsxNjMsMTAgQEAgc3RydWN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlIHsKICAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUoR3JhcGhpY3NDb250ZXh0
U3RhdGUmJik7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSYgb3BlcmF0b3I9KGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9y
PShHcmFwaGljc0NvbnRleHRTdGF0ZSYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgb3BlcmF0b3I9KEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgZW51
bSBDaGFuZ2UgOiB1aW50MzJfdCB7CiAgICAgICAgIFN0cm9rZUdyYWRpZW50Q2hhbmdlICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCmluZGV4IDQy
NGQ5YTA0YzE2MzQyZDkwNjk2NjM4YTIyY2YzNzI3NGUyOGUwZTIuLjQwNjFmOGMyOGFlNThhMjVl
OWEyNThkYjAwYjM2MGE2MGFlNmNkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmNwcApAQCAt
MjYsOCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlz
dC5oIgogCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgiCiAjaW5jbHVkZSAiRGlz
cGxheUxpc3RJdGVtcy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTQ4LDE4ICs1MCw0MyBAQCB2b2lkIERpc3BsYXlMaXN0
OjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCitEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoRGlz
cGxheUxpc3QmJiBvdGhlcikKKyAgICA6IG1faW1hZ2VCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9pbWFnZUJ1ZmZlcnMsIHsgfSkpCisgICAgLCBtX2l0ZW1zKHN0ZDo6ZXhjaGFuZ2Uob3Ro
ZXIubV9pdGVtcywgbnVsbHB0cikpCisgICAgLCBtX2RyYXdpbmdJdGVtRXh0ZW50cyhzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fZHJhd2luZ0l0ZW1FeHRlbnRzLCB7IH0pKQoreworfQorCitEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVzKQorICAgIDogbV9p
dGVtcyhtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KFdURk1vdmUoaGFuZGxlcykpKQoreworfQorCitE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QoKSA9IGRlZmF1bHQ7CitEaXNwbGF5TGlzdDo6fkRpc3Bs
YXlMaXN0KCkgPSBkZWZhdWx0OworCitEaXNwbGF5TGlzdCYgRGlzcGxheUxpc3Q6Om9wZXJhdG9y
PShEaXNwbGF5TGlzdCYmIG90aGVyKQoreworICAgIG1faW1hZ2VCdWZmZXJzID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX2ltYWdlQnVmZmVycywgeyB9KTsKKyAgICBtX2l0ZW1zID0gc3RkOjpleGNo
YW5nZShvdGhlci5tX2l0ZW1zLCBudWxscHRyKTsKKyAgICBtX2RyYXdpbmdJdGVtRXh0ZW50cyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9kcmF3aW5nSXRlbUV4dGVudHMsIHsgfSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCiB2b2lkIERpc3BsYXlMaXN0OjpjbGVhcigpCiB7Ci0gICAgbV9saXN0
LmNsZWFyKCk7CisgICAgaWYgKG1faXRlbXMpCisgICAgICAgIG1faXRlbXMtPmNsZWFyKCk7Cisg
ICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuY2xlYXIoKTsKICAgICBtX2ltYWdlQnVmZmVycy5jbGVh
cigpOwogfQogCi1ib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0Rmxh
Z3MgZmxhZ3MsIGNvbnN0IEl0ZW0mIGl0ZW0pCitib29sIERpc3BsYXlMaXN0OjpzaG91bGREdW1w
Rm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKICAgICBzd2l0
Y2ggKGl0ZW0udHlwZSgpKSB7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAg
IGlmICghKGZsYWdzICYgQXNUZXh0RmxhZzo6SW5jbHVkZXNQbGF0Zm9ybU9wZXJhdGlvbnMpKSB7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBkb3duY2FzdDxTZXRTdGF0ZT4o
aXRlbSk7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzdGF0ZUl0ZW0gPSBpdGVtLmdldDxTZXRT
dGF0ZT4oKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBmb3Igbm93LCBvbmx5IGRyb3AgdGhlIGl0
ZW0gaWYgdGhlIG9ubHkgc3RhdGUtY2hhbmdlIGZsYWdzIGFyZSBwbGF0Zm9ybS1zcGVjaWZpYy4K
ICAgICAgICAgICAgIGlmIChzdGF0ZUl0ZW0uc3RhdGUoKS5tX2NoYW5nZUZsYWdzID09IEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODQsMTAgKzExMSwxNCBAQCBib29sIERpc3Bs
YXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MgZmxhZ3MsIGNvbnN0IEl0ZW0m
IGl0ZW0pCiBTdHJpbmcgRGlzcGxheUxpc3Q6OmFzVGV4dChBc1RleHRGbGFncyBmbGFncykgY29u
c3QKIHsKICAgICBUZXh0U3RyZWFtIHN0cmVhbShUZXh0U3RyZWFtOjpMaW5lTW9kZTo6TXVsdGlw
bGVMaW5lLCBUZXh0U3RyZWFtOjpGb3JtYXR0aW5nOjpTVkdTdHlsZVJlY3QpOwotICAgIGZvciAo
YXV0byYgaXRlbSA6IG1fbGlzdCkgeworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0
aGlzKSB7CiAgICAgICAgIGlmICghc2hvdWxkRHVtcEZvckZsYWdzKGZsYWdzLCBpdGVtKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3Jv
dXAoc3RyZWFtKTsKICAgICAgICAgc3RyZWFtIDw8IGl0ZW07CisgICAgICAgIGlmIChpdGVtLmlz
RHJhd2luZ0l0ZW0oKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIGV4dGVudCAiIDw8IGV4dGVu
dDsKICAgICB9CiAgICAgcmV0dXJuIHN0cmVhbS5yZWxlYXNlKCk7CiB9CkBAIC05NywxMCArMTI4
LDExIEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAg
VGV4dFN0cmVhbTo6R3JvdXBTY29wZSBncm91cCh0cyk7CiAgICAgdHMgPDwgImRpc3BsYXkgbGlz
dCI7CiAKLSAgICBzaXplX3QgbnVtSXRlbXMgPSBtX2xpc3Quc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtSXRlbXM7ICsraSkgewotICAgICAgICBUZXh0U3RyZWFtOjpHcm91
cFNjb3BlIHNjb3BlKHRzKTsKLSAgICAgICAgdHMgPDwgaSA8PCAiICIgPDwgbV9saXN0W2ldLmdl
dCgpOworICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6ICp0aGlzKSB7CisgICAgICAgIFRl
eHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXAodHMpOworICAgICAgICB0cyA8PCBpdGVtOworICAg
ICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAgICB0cyA8PCAiIGV4dGVu
dCAiIDw8IGV4dGVudDsKICAgICB9CiAgICAgdHMuc3RhcnRHcm91cCgpOwogICAgIHRzIDw8ICJz
aXplIGluIGJ5dGVzOiAiIDw8IHNpemVJbkJ5dGVzKCk7CkBAIC0xMDksMTMgKzE0MSwyNzUgQEAg
dm9pZCBEaXNwbGF5TGlzdDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKIAogc2l6ZV90IERp
c3BsYXlMaXN0OjpzaXplSW5CeXRlcygpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHJlc3VsdCA9IDA7
Ci0gICAgZm9yIChhdXRvJiByZWYgOiBtX2xpc3QpCi0gICAgICAgIHJlc3VsdCArPSBJdGVtOjpz
aXplSW5CeXRlcyhyZWYpOworICAgIHJldHVybiBtX2l0ZW1zID8gbV9pdGVtcy0+c2l6ZUluQnl0
ZXMoKSA6IDA7Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6OmlzRW1wdHkoKSBjb25zdAoreworICAg
IHJldHVybiAhbV9pdGVtcyB8fCBtX2l0ZW1zLT5pc0VtcHR5KCk7Cit9CisKK0l0ZW1CdWZmZXIm
IERpc3BsYXlMaXN0OjppdGVtQnVmZmVyKCkKK3sKKyAgICBpZiAoIW1faXRlbXMpCisgICAgICAg
IG1faXRlbXMgPSBtYWtlVW5pcXVlPEl0ZW1CdWZmZXI+KCk7CisgICAgcmV0dXJuICptX2l0ZW1z
OworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChjbGll
bnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0OjpzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZm
ZXJXcml0aW5nQ2xpZW50KiBjbGllbnQpCit7CisgICAgaXRlbUJ1ZmZlcigpLnNldENsaWVudChj
bGllbnQpOworfQorCit2b2lkIERpc3BsYXlMaXN0Ojpmb3JFYWNoSXRlbUJ1ZmZlcihGdW5jdGlv
bjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJiBtYXBGdW5jdGlvbikgY29uc3QKK3sK
KyAgICBpZiAobV9pdGVtcykKKyAgICAgICAgbV9pdGVtcy0+Zm9yRWFjaEl0ZW1CdWZmZXIoV1RG
TW92ZShtYXBGdW5jdGlvbikpOworfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKK3ZvaWQgRGlzcGxh
eUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhib29sIHZhbHVlKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2l0ZW1zIHx8IG1faXRlbXMtPmlzRW1wdHkoKSk7CisgICAgbV90cmFj
a3NEcmF3aW5nSXRlbUV4dGVudHMgPSB2YWx1ZTsKIH0KIAordm9pZCBEaXNwbGF5TGlzdDo6YXBw
ZW5kKEl0ZW1IYW5kbGUgaXRlbSkKK3sKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAg
Y2FzZSBJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTYXZlPihpdGVtLmdl
dDxTYXZlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFJlc3RvcmU+KGl0ZW0uZ2V0PFJlc3RvcmU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OlRyYW5zbGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxUcmFuc2xhdGU+KGl0ZW0uZ2V0PFRy
YW5zbGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFJvdGF0ZT4oaXRlbS5nZXQ8Um90YXRlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
Y2FsZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTY2FsZT4oaXRlbS5nZXQ8U2NhbGU+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgorICAgICAgICByZXR1cm4gYXBwZW5k
PENvbmNhdGVuYXRlQ1RNPihpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldENUTT4oaXRlbS5nZXQ8
U2V0Q1RNPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtLmdldDxTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0uZ2V0
PFNldElubGluZUZpbGxDb2xvcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0
ZW0uZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0U3Ryb2tlVGhpY2tuZXNz
PihpdGVtLmdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0YXRlOgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldFN0YXRlPihpdGVtLmdldDxTZXRTdGF0
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRMaW5lQ2FwPihpdGVtLmdldDxTZXRMaW5lQ2FwPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRMaW5lRGFzaD4oaXRl
bS5nZXQ8U2V0TGluZURhc2g+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFNldExpbmVKb2luPihpdGVtLmdldDxTZXRMaW5lSm9pbj4o
KSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRNaXRlckxpbWl0PihpdGVtLmdldDxTZXRNaXRlckxpbWl0PigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGVhclNoYWRv
dz4oaXRlbS5nZXQ8Q2xlYXJTaGFkb3c+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8Q2xpcD4oaXRlbS5nZXQ8Q2xpcD4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0PihpdGVtLmdl
dDxDbGlwT3V0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPENsaXBPdXRUb1BhdGg+KGl0ZW0uZ2V0PENsaXBPdXRUb1BhdGg+KCkp
OworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPENs
aXBQYXRoPihpdGVtLmdldDxDbGlwUGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47IC8vIEZJWE1FOiBTdXBwb3J0IHRoZSBhYmlsaXR5IHRvIGNsb25lIGRpc3BsYXkg
bGlzdHMgKHRoaXMgaXMgY3VycmVudGx5IG9ubHkgdXNlZCBmb3IgZGlzcGxheSBsaXN0IHRyYWNr
aW5nKS4KKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxEcmF3R2x5cGhzPihpdGVtLmdldDxEcmF3R2x5cGhzPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3SW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlPihp
dGVtLmdldDxEcmF3SW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdl
OgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdUaWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGls
ZWRJbWFnZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0ZW0uZ2V0PERyYXdU
aWxlZFNjYWxlZEltYWdlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpdGVtLmdldDxEcmF3SW1h
Z2VCdWZmZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0uZ2V0PERyYXdOYXRpdmVJbWFn
ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgIHJldHVybiBh
cHBlbmQ8RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PERyYXdQYXR0ZXJuPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3UmVjdD4oaXRlbS5n
ZXQ8RHJhd1JlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPERyYXdMaW5lPihpdGVtLmdldDxEcmF3TGluZT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGlu
ZXNGb3JUZXh0PihpdGVtLmdldDxEcmF3TGluZXNGb3JUZXh0PigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0uZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICByZXR1cm4g
YXBwZW5kPERyYXdFbGxpcHNlPihpdGVtLmdldDxEcmF3RWxsaXBzZT4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd1BhdGg+KGl0ZW0u
Z2V0PERyYXdQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUGF0aD4oaXRlbS5nZXQ8RHJhd0Zv
Y3VzUmluZ1BhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoK
KyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KGl0ZW0uZ2V0PERyYXdG
b2N1c1JpbmdSZWN0cz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RmlsbFJlY3Q+KGl0ZW0uZ2V0PEZpbGxSZWN0PigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxs
UmVjdFdpdGhDb2xvcj4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoQ29sb3I+KCkpOworICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZp
bGxSZWN0V2l0aEdyYWRpZW50PihpdGVtLmdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBw
ZW5kPEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8RmlsbFJvdW5kZWRSZWN0PihpdGVtLmdldDxGaWxsUm91bmRlZFJlY3Q+KCkpOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICByZXR1cm4gYXBw
ZW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihpdGVtLmdldDxGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZT4oKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbElubGluZVBhdGg+
KGl0ZW0uZ2V0PEZpbGxJbmxpbmVQYXRoPigpKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxQYXRoPihpdGVtLmdldDxGaWxs
UGF0aD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8RmlsbEVsbGlwc2U+KGl0ZW0uZ2V0PEZpbGxFbGxpcHNlPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBhcHBlbmQ8UHV0SW1hZ2VE
YXRhPihpdGVtLmdldDxQdXRJbWFnZURhdGE+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50
RnJhbWVGb3JNZWRpYToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+
KGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VSZWN0PihpdGVtLmdldDxTdHJv
a2VSZWN0PigpKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZUlubGlu
ZVBhdGg+KGl0ZW0uZ2V0PFN0cm9rZUlubGluZVBhdGg+KCkpOworI2VuZGlmCisgICAgY2FzZSBJ
dGVtVHlwZTo6U3Ryb2tlUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VQYXRoPihp
dGVtLmdldDxTdHJva2VQYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNl
OgorICAgICAgICByZXR1cm4gYXBwZW5kPFN0cm9rZUVsbGlwc2U+KGl0ZW0uZ2V0PFN0cm9rZUVs
bGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxDbGVhclJlY3Q+KGl0ZW0uZ2V0PENsZWFyUmVjdD4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPihpdGVtLmdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigpKTsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5nZXQ8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+KCkpOworI2lmIFVTRShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRl
cm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtLmdldDxB
cHBseVN0cm9rZVBhdHRlcm4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46CisgICAgICAgIHJldHVybiBhcHBlbmQ8QXBwbHlGaWxsUGF0dGVybj4oaXRlbS5nZXQ8QXBw
bHlGaWxsUGF0dGVybj4oKSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmlj
ZVNjYWxlRmFjdG9yOgorICAgICAgICByZXR1cm4gYXBwZW5kPEFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I+KGl0ZW0uZ2V0PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkpOworICAgIH0KK30KKworYm9v
bCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmF0RW5kKCkgY29uc3QKK3sKKyAgICBpZiAobV9kaXNw
bGF5TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYgaXRl
bXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGF1dG8gZW5kQ3Vyc29yID0gaXRlbXMu
bV93cml0YWJsZUJ1ZmZlci5kYXRhICsgaXRlbXMubV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAg
ICByZXR1cm4gbV9jdXJzb3IgPT0gZW5kQ3Vyc29yOworfQorCit2b2lkIERpc3BsYXlMaXN0Ojpp
dGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0oKQoreworICAgIGNsZWFyQ3VycmVudEl0ZW0oKTsK
KworICAgIGlmIChhdEVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBpdGVtcyA9
ICptX2Rpc3BsYXlMaXN0Lm1faXRlbXM7CisgICAgYXV0byBpdGVtVHlwZSA9IHN0YXRpY19jYXN0
PEl0ZW1UeXBlPihtX2N1cnNvclswXSk7CisgICAgaWYgKGlzRHJhd2luZ0l0ZW0oaXRlbVR5cGUp
ICYmICFtX2Rpc3BsYXlMaXN0Lm1fZHJhd2luZ0l0ZW1FeHRlbnRzLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX2N1cnJlbnRFeHRlbnQgPSBtX2Rpc3BsYXlMaXN0Lm1fZHJhd2luZ0l0ZW1FeHRlbnRz
W21fZHJhd2luZ0l0ZW1JbmRleF07CisgICAgICAgIG1fZHJhd2luZ0l0ZW1JbmRleCsrOworICAg
IH0gZWxzZQorICAgICAgICBtX2N1cnJlbnRFeHRlbnQgPSBXVEY6Om51bGxvcHQ7CisKKyAgICBh
dXRvKiBjbGllbnQgPSBpdGVtcy5tX3JlYWRpbmdDbGllbnQ7CisgICAgYXV0byBzaXplT2ZUeXBl
QW5kSXRlbSA9IHNpemVPZkl0ZW1JbkJ5dGVzKGl0ZW1UeXBlKSArIHNpemVvZihJdGVtVHlwZSk7
CisgICAgbV9jdXJyZW50QnVmZmVyRm9ySXRlbSA9IHNpemVPZlR5cGVBbmRJdGVtIDw9IHNpemVP
ZkZpeGVkQnVmZmVyRm9yQ3VycmVudEl0ZW0gPyBtX2ZpeGVkQnVmZmVyRm9yQ3VycmVudEl0ZW0g
OiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihmYXN0TWFsbG9jKHNpemVPZlR5cGVBbmRJdGVt
KSk7CisgICAgaWYgKCFpc0lubGluZUl0ZW0oaXRlbVR5cGUpICYmIGNsaWVudCkgeworICAgICAg
ICBhdXRvIHNpemVPZkRhdGEgPSByZWludGVycHJldF9jYXN0PHNpemVfdCo+KG1fY3Vyc29yICsg
c2l6ZW9mKEl0ZW1UeXBlKSlbMF07CisgICAgICAgIGF1dG8qIHN0YXJ0T2ZQYWRkaW5nID0gbV9j
dXJzb3IgKyBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCk7CisgICAgICAgIHNpemVf
dCBwYWRkaW5nID0gKGFsaWdub2YodWludDY0X3QpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHN0YXJ0T2ZQYWRkaW5nKSAlIGFsaWdub2YodWludDY0X3QpKSAlIGFsaWdub2YodWludDY0
X3QpOworICAgICAgICBhdXRvIGRlY29kZWRJdGVtSGFuZGxlID0gY2xpZW50LT5kZWNvZGVJdGVt
KHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZywgc2l6ZU9mRGF0YSwgaXRlbVR5cGUsIG1fY3VycmVu
dEJ1ZmZlckZvckl0ZW0pOworICAgICAgICBpZiAoIWRlY29kZWRJdGVtSGFuZGxlKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBjcmFzaGluZywgdGhpcyBuZWVkcyB0byBmYWls
IGdyYWNlZnVsbHkgYW5kIGluZm9ybSB0aGUgY2FsbGVyLgorICAgICAgICAgICAgLy8gRm9yIHRo
ZSB0aW1lIGJlaW5nLCB0aGlzIGFzc2VydGlvbiBtYWtlcyBidWdzIGluIGl0ZW0gYnVmZmVyIGVu
Y29kaW5nIGxvZ2ljIGVhc2llcgorICAgICAgICAgICAgLy8gdG8gY2F0Y2ggYnkgYXZvaWRpbmcg
bXlzdGVyaW91cyBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmNvcnJlY3RseSBhbGlnbmVkIGl0
ZW1zCisgICAgICAgICAgICAvLyBkb3duIHRoZSBsaW5lLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBtX2N1cnJlbnRCdWZmZXJG
b3JJdGVtWzBdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oaXRlbVR5cGUpOworICAgICAgICBtX2N1
cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihzaXplX3Qp
ICsgcGFkZGluZyArIHNpemVPZkRhdGE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSXRlbUhhbmRs
ZSB7IG1fY3Vyc29yIH0uY29weVRvKHsgbV9jdXJyZW50QnVmZmVyRm9ySXRlbSB9KTsKKyAgICAg
ICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IHNpemVPZlR5cGVBbmRJdGVtOworICAgIH0K
K30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OmFkdmFuY2UoKQoreworICAgIGlmIChh
dEVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnNvciArPSBtX2N1cnJlbnRJdGVt
U2l6ZUluQnVmZmVyOworCisgICAgaWYgKG1fY3Vyc29yID09IG1fY3VycmVudEVuZE9mQnVmZmVy
ICYmIG1fcmVhZE9ubHlCdWZmZXJJbmRleCA8IG1fZGlzcGxheUxpc3QubV9pdGVtcy0+bV9yZWFk
T25seUJ1ZmZlcnMuc2l6ZSgpKSB7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJbmRleCsrOwor
ICAgICAgICBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgIH0KKworICAg
IHVwZGF0ZUN1cnJlbnRJdGVtKCk7Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpj
bGVhckN1cnJlbnRJdGVtKCkKK3sKKyAgICBpZiAobV9jdXJyZW50QnVmZmVyRm9ySXRlbSkgewor
ICAgICAgICBJdGVtSGFuZGxlIHsgbV9jdXJyZW50QnVmZmVyRm9ySXRlbSB9LmRlc3Ryb3koKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJ1ZmZlckZvckl0ZW0gIT0gbV9maXhlZEJ1
ZmZlckZvckN1cnJlbnRJdGVtKSkKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fY3VycmVudEJ1ZmZl
ckZvckl0ZW0pOworICAgIH0KKworICAgIG1fY3VycmVudEl0ZW1TaXplSW5CdWZmZXIgPSAwOwor
ICAgIG1fY3VycmVudEJ1ZmZlckZvckl0ZW0gPSBudWxscHRyOworfQorCit2b2lkIERpc3BsYXlM
aXN0OjppdGVyYXRvcjo6bW92ZVRvRW5kKCkKK3sKKyAgICBpZiAoYXV0byYgaXRlbXMgPSBtX2Rp
c3BsYXlMaXN0Lm1faXRlbXMpIHsKKyAgICAgICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJs
ZUJ1ZmZlci5kYXRhICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgICAgIG1f
Y3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3I7CisgICAgICAgIG1fcmVhZE9ubHlCdWZmZXJJ
bmRleCA9IGl0ZW1zLT5tX3JlYWRPbmx5QnVmZmVycy5zaXplKCk7CisgICAgfQorfQorCit2b2lk
IERpc3BsYXlMaXN0OjppdGVyYXRvcjo6bW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRCdWZmZXIo
KQoreworICAgIGF1dG8mIGl0ZW1zID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOworICAgIGlmICgh
aXRlbXMpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbnVtYmVyT2ZSZWFkT25seUJ1ZmZl
cnMgPSBpdGVtcy0+bV9yZWFkT25seUJ1ZmZlcnMuc2l6ZSgpOworICAgIGlmIChtX3JlYWRPbmx5
QnVmZmVySW5kZXggPCBudW1iZXJPZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBhdXRvJiBu
ZXh0QnVmZmVySGFuZGxlID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzW21fcmVhZE9ubHlCdWZm
ZXJJbmRleF07CisgICAgICAgIG1fY3Vyc29yID0gbmV4dEJ1ZmZlckhhbmRsZS5kYXRhOworICAg
ICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yICsgbmV4dEJ1ZmZlckhhbmRsZS5j
YXBhY2l0eTsKKyAgICB9IGVsc2UgaWYgKG1fcmVhZE9ubHlCdWZmZXJJbmRleCA9PSBudW1iZXJP
ZlJlYWRPbmx5QnVmZmVycykgeworICAgICAgICBtX2N1cnNvciA9IGl0ZW1zLT5tX3dyaXRhYmxl
QnVmZmVyLmRhdGE7CisgICAgICAgIG1fY3VycmVudEVuZE9mQnVmZmVyID0gbV9jdXJzb3IgKyBp
dGVtcy0+bV93cml0dGVuTnVtYmVyT2ZCeXRlczsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QKIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKaW5kZXggODVkMDEyYTQ3NTBiMmFiZWIwYjhiMzViODNmMDI5MDM4MDI3NzNkOS4u
NDc0ZWJmMjc5N2Q4ZGUwZDU1ZGM1MTQ2MzY4M2RkNDM4MzM4NTAwZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1UeXBlLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBA
IC0zMiw2ICszMyw4IEBACiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTQyLDM0ICs0NSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xh
c3MgSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEl0ZW0+IHsKLXB1YmxpYzoKLSAgICBJdGVtKCkg
PSBkZWxldGU7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBJdGVtKEl0ZW1UeXBlKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5JdGVtKCk7Ci0KLSAgICBJdGVtVHlwZSB0eXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBp
c0RyYXdpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotI2lmICFkZWZpbmVkKE5E
RUJVRykgfHwgIUxPR19ESVNBQkxFRAotICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OwotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBzaXplSW5CeXRlcyhjb25zdCBJdGVtJik7
Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxJdGVt
Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBJdGVtVHlwZSBtX3R5cGU7Ci19
OwotCiBlbnVtIEFzVGV4dEZsYWcgewogICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAwLAogICAgIEluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zICAgICAgPSAxIDw8IDAsCkBA
IC04Miw0OCArNTcsOTcgQEAgY2xhc3MgRGlzcGxheUxpc3QgewogICAgIGZyaWVuZCBjbGFzcyBS
ZWNvcmRlcjsKICAgICBmcmllbmQgY2xhc3MgUmVwbGF5ZXI7CiBwdWJsaWM6Ci0gICAgRGlzcGxh
eUxpc3QoKSA9IGRlZmF1bHQ7Ci0gICAgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJikgPSBkZWZh
dWx0OworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRGlzcGxheUxpc3QoRGlzcGxheUxpc3QmJik7CisgICAgV0VCQ09SRV9FWFBPUlQgRGlzcGxh
eUxpc3QoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CiAKLSAgICBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9
KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB+RGlzcGxheUxp
c3QoKTsKIAotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBEaXNwbGF5TGlzdCYgb3BlcmF0b3I9KERpc3BsYXlMaXN0JiYpOwogCi0gICAg
Y29uc3QgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0K
LSAgICBJdGVtJiBpdGVtQXQoc2l6ZV90IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgbV9saXN0LnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgp
OwotICAgIH0KKyAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Q7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29u
c3Q7CiAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2xpc3QuaXNFbXB0eSgp
OyB9Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0gICAgCiAgICAgU3RyaW5nIGFz
VGV4dChBc1RleHRGbGFncykgY29uc3Q7CiAKICAgICBjb25zdCBJbWFnZUJ1ZmZlckhhc2hNYXAm
IGltYWdlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJzOyB9CiAKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRlbUJ1ZmZlclJlYWRpbmdD
bGllbnQqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEl0ZW1CdWZmZXJDbGllbnQoSXRl
bUJ1ZmZlcldyaXRpbmdDbGllbnQqKTsKKwogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxPR19E
SVNBQkxFRAogICAgIFdURjo6Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9p
ZChjb25zdCBJdGVtQnVmZmVySGFuZGxlJik+JiYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgY2xhc3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpOworICAg
IHZvaWQgYXBwZW5kKEl0ZW1IYW5kbGUpOworCisgICAgYm9vbCB0cmFja3NEcmF3aW5nSXRlbUV4
dGVudHMoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0ZW50czsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKGJvb2wpOwor
CisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBjbGFzcyBJ
bW1lZGlhdGVseU1vdmVUb0VuZCB7IE5vLCBZZXMgfTsKKyAgICAgICAgaXRlcmF0b3IoY29uc3Qg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbW1lZGlhdGVseU1vdmVUb0VuZCBpbW1lZGlhdGVs
eU1vdmVUb0VuZCA9IEltbWVkaWF0ZWx5TW92ZVRvRW5kOjpObykKKyAgICAgICAgICAgIDogbV9k
aXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGltbWVk
aWF0ZWx5TW92ZVRvRW5kID09IEltbWVkaWF0ZWx5TW92ZVRvRW5kOjpZZXMpCisgICAgICAgICAg
ICAgICAgbW92ZVRvRW5kKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
b3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcigpOworICAgICAgICAgICAgICAgIHVwZGF0
ZUN1cnJlbnRJdGVtKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB+aXRl
cmF0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSB7
IHJldHVybiAmbV9kaXNwbGF5TGlzdCA9PSAmb3RoZXIubV9kaXNwbGF5TGlzdCAmJiBtX2N1cnNv
ciA9PSBvdGhlci5tX2N1cnNvcjsgfQorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorICAgICAgICB2b2lk
IG9wZXJhdG9yKysoKSB7IGFkdmFuY2UoKTsgfQorICAgICAgICBzdGQ6OnBhaXI8SXRlbUhhbmRs
ZSwgT3B0aW9uYWw8RmxvYXRSZWN0Pj4gb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4geyBJdGVt
SGFuZGxlIHsgbV9jdXJyZW50QnVmZmVyRm9ySXRlbSB9LCBtX2N1cnJlbnRFeHRlbnQgfTsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZU9mRml4
ZWRCdWZmZXJGb3JDdXJyZW50SXRlbSA9IDI1NjsKKworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG1vdmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCk7CisgICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgbW92ZVRvRW5kKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUN1cnJl
bnRJdGVtKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWR2YW5jZSgpOworICAgICAg
ICBib29sIGF0RW5kKCkgY29uc3Q7CisKKyAgICAgICAgY29uc3QgRGlzcGxheUxpc3QmIG1fZGlz
cGxheUxpc3Q7CisgICAgICAgIHVpbnQ4X3QqIG1fY3Vyc29yIHsgbnVsbHB0ciB9OworICAgICAg
ICBzaXplX3QgbV9yZWFkT25seUJ1ZmZlckluZGV4IHsgMCB9OworICAgICAgICBzaXplX3QgbV9k
cmF3aW5nSXRlbUluZGV4IHsgMCB9OworICAgICAgICB1aW50OF90KiBtX2N1cnJlbnRFbmRPZkJ1
ZmZlciB7IG51bGxwdHIgfTsKKworICAgICAgICB1aW50OF90IG1fZml4ZWRCdWZmZXJGb3JDdXJy
ZW50SXRlbVtzaXplT2ZGaXhlZEJ1ZmZlckZvckN1cnJlbnRJdGVtXSB7IDAgfTsKKyAgICAgICAg
dWludDhfdCogbV9jdXJyZW50QnVmZmVyRm9ySXRlbSB7IG51bGxwdHIgfTsKKyAgICAgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBtX2N1cnJlbnRFeHRlbnQ7CisgICAgICAgIHNpemVfdCBtX2N1cnJl
bnRJdGVtU2l6ZUluQnVmZmVyIHsgMCB9OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIHsgKnRoaXMgfTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIHsgKnRoaXMsIGl0ZXJhdG9yOjpJbW1lZGlhdGVseU1vdmVUb0VuZDo6WWVzIH07IH0K
IAogcHJpdmF0ZToKLSAgICBJdGVtJiBhcHBlbmQoUmVmPEl0ZW0+JiYgaXRlbSkKLSAgICB7Ci0g
ICAgICAgIG1fbGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7Ci0gICAgICAgIHJldHVybiBtX2xp
c3QubGFzdCgpLmdldCgpOwotICAgIH0KKyAgICBJdGVtQnVmZmVyKiBpdGVtQnVmZmVySWZFeGlz
dHMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zLmdldCgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
SXRlbUJ1ZmZlciYgaXRlbUJ1ZmZlcigpOwogCi0gICAgLy8gTGVzcyBlZmZpY2llbnQgYXBwZW5k
LCBvbmx5IHVzZWQgZm9yIHRyYWNraW5nIHJlcGxheS4KLSAgICB2b2lkIGFwcGVuZEl0ZW0oSXRl
bSYgaXRlbSkKKyAgICB2b2lkIGFkZERyYXdpbmdJdGVtRXh0ZW50KE9wdGlvbmFsPEZsb2F0UmVj
dD4mJiBleHRlbnQpCiAgICAgewotICAgICAgICBtX2xpc3QuYXBwZW5kKGl0ZW0pOworICAgICAg
ICBBU1NFUlQobV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMpOworICAgICAgICBtX2RyYXdpbmdJ
dGVtRXh0ZW50cy5hcHBlbmQoV1RGTW92ZShleHRlbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNh
Y2hlSW1hZ2VCdWZmZXIoUmVmPFdlYkNvcmU6OkltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVyKQpA
QCAtMTMxLDQ0ICsxNTUsMTggQEAgcHJpdmF0ZToKICAgICAgICAgbV9pbWFnZUJ1ZmZlcnMuYWRk
KGltYWdlQnVmZmVyLT5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIHNob3VsZER1bXBGb3JGbGFncyhB
c1RleHRGbGFncywgY29uc3QgSXRlbSYpOwotCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4mIGxpc3Qo
KSB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGREdW1wRm9yRmxhZ3Mo
QXNUZXh0RmxhZ3MsIEl0ZW1IYW5kbGUpOwogCi0gICAgVmVjdG9yPFJlZjxJdGVtPj4gbV9saXN0
OwogICAgIEltYWdlQnVmZmVySGFzaE1hcCBtX2ltYWdlQnVmZmVyczsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SXRlbUJ1ZmZlcj4gbV9pdGVtczsKKyAgICBWZWN0b3I8T3B0aW9uYWw8RmxvYXRSZWN0
Pj4gbV9kcmF3aW5nSXRlbUV4dGVudHM7CisgICAgYm9vbCBtX3RyYWNrc0RyYXdpbmdJdGVtRXh0
ZW50cyB7IHRydWUgfTsKIH07CiAKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRGlz
cGxheUxpc3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5h
bWUgVCwgY2xhc3MuLi4gQXJncz4KK3ZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChBcmdzJiYuLi4g
YXJncykKIHsKLSAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX2xpc3Quc2l6
ZSgpKTsKLQotICAgIGZvciAoYXV0byYgaXRlbSA6IG1fbGlzdCkKLSAgICAgICAgZW5jb2RlciA8
PCBpdGVtLmdldCgpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8RGlz
cGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBP
cHRpb25hbDx1aW50NjRfdD4gaXRlbUNvdW50OwotICAgIGRlY29kZXIgPj4gaXRlbUNvdW50Owot
ICAgIGlmICghaXRlbUNvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
RGlzcGxheUxpc3QgZGlzcGxheUxpc3Q7Ci0KLSAgICBmb3IgKHVpbnQ2NF90IGkgPSAwOyBpIDwg
Kml0ZW1Db3VudDsgaSsrKSB7Ci0gICAgICAgIGF1dG8gaXRlbSA9IEl0ZW06OmRlY29kZShkZWNv
ZGVyKTsKLSAgICAgICAgLy8gRklYTUU6IE9uY2Ugd2UgY2FuIGRlY29kZSBhbGwgdHlwZXMsIGZh
aWxpbmcgdG8gZGVjb2RlIGFuIGl0ZW0gc2hvdWxkIHR1cm4gaW50byBhIGRlY29kZSBmYWlsdXJl
LgotICAgICAgICAvLyBGb3Igbm93LCB3ZSBqdXN0IGhhdmUgdG8gaWdub3JlIGl0LgotICAgICAg
ICBpZiAoIWl0ZW0pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZGlzcGxheUxpc3Qu
YXBwZW5kKFdURk1vdmUoKml0ZW0pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlzcGxheUxpc3Q7
CisgICAgaXRlbUJ1ZmZlcigpLmFwcGVuZDxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OwogfQogCiB9IC8vIERpc3BsYXlMaXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggZDVmZWM4
N2ZlMGZlMDE2MWIzMzM1NmI1NjNmZWI1ZDc4YWNkZDVhYi4uNGNkMDJhOGU2YThkMzdhMTllNDAz
MDE4NDUzMDhiOWRlMmQ0NmUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAtMzM0LDcgKzMz
NCw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgdXBkYXRlU3Ryb2tlQ29sb3IoQ0dH
U3RhdGVHZXRTdHJva2VDb2xvcihnc3RhdGUpKTsKICAgICB1cGRhdGVTaGFkb3coQ0dHU3RhdGVH
ZXRTdHlsZShnc3RhdGUpKTsKIAotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChEcmF3R2x5cGhzOjpjcmVhdGUoKm1fb3JpZ2luYWxGb250LCBnbHlwaHMsIGNvbXB1dGVBZHZh
bmNlc0Zyb21Qb3NpdGlvbnMocG9zaXRpb25zLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgpLmRh
dGEoKSwgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4Lm1hcFBvaW50KHBvc2l0aW9uc1swXSksIG1f
c21vb3RoaW5nTW9kZSkpOworICAgIG1fb3duZXIuYXBwZW5kPERyYXdHbHlwaHM+KCptX29yaWdp
bmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9ucywg
Y291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCBjdXJyZW50VGV4dE1hdHJp
eC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpOwogCiAgICAgbV9vd25l
ci5jb25jYXRDVE0oaW52ZXJzZUNUTUZpeHVwKTsKIH0KQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdlKENHUmVuZGVyaW5nU3RhdGVSZWYs
IENHR1N0YXRlUmVmIGdzdGF0ZQogICAgIG1fb3duZXIuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CiAKICAgICBhdXRvIGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKTsKLSAgICBt
X293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ltYWdlOjpjcmVhdGUoaW1hZ2Us
IHJlY3QsIHt7IH0sIGltYWdlLT5zaXplKCl9LCB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRv
cExlZnQgfSkpOworICAgIG1fb3duZXIuYXBwZW5kPERyYXdJbWFnZT4oaW1hZ2UsIEZsb2F0UmVj
dChyZWN0KSwgRmxvYXRSZWN0IHt7IH0sIGltYWdlLT5zaXplKCl9LCBJbWFnZVBhaW50aW5nT3B0
aW9ucyB7IEltYWdlT3JpZW50YXRpb246Ok9yaWdpblRvcExlZnQgfSk7CiAKICAgICAvLyBVbmRv
IHRoZSBhYm92ZSB5LWZsaXAgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KICAgICBtX293bmVyLnNj
YWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpyZWNvcmREcmF3SW1hZ2UoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYgZ3N0YXRlCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250
JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBpZiAobV9kcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb24gPT0gRHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpIHsKLSAg
ICAgICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0
ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpKTsKKyAgICAgICAgbV9v
d25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhp
bmdNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVySGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCmlu
ZGV4IDBiYjg3NDQzMmI0ZTY4ZmJiNDRhODcyNDkyOWFhMGU3ZWY5ZmI1YmMuLmIxZGQzZTA5MDJj
MmFjOTQ1YTgwNmNiNzcwMzNkNzk0ZmVhMWYwOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlckhhcmZCdXp6LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKQEAg
LTQzLDcgKzQzLDcgQEAgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVj
b3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24KIAogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
Ci0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdHbHlwaHM6OmNyZWF0
ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01vZGUpKTsKKyAgICBtX293bmVy
LmFwcGVuZDxEcmF3R2x5cGhzPihmb250LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBo
QnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIHN0YXJ0UG9pbnQsIHNtb290aGluZ01v
ZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKaW5kZXggMGJi
ODc0NDMyYjRlNjhmYmI0NGE4NzI0OTI5YWEwZTdlZjlmYjViYy4uYjFkZDNlMDkwMmMyYWM5NDVh
ODA2Y2I3NzAzM2Q3OTRmZWExZjA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJXaW4uY3BwCkBAIC00Myw3ICs0Myw3IEBAIERy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJh
d0dseXBoc0RlY29uc3RydWN0aW9uCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBv
aW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBz
dGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBo
cz4oZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgRGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oCmluZGV4IDIyZWQyNTZlODBhZDI5M2EwNTIwNjliNzQzMDg4YTEzNTFmNDdj
YzAuLjk2ZTRiMWVmZjk4MWU0MjI3OWQ3NDZkYzZiYjM5YzhhYTUyOGUxNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQogICAgIFdF
QkNPUkVfRVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOwotICAgIERpc3BsYXlMaXN0IHRha2VE
aXNwbGF5TGlzdCgpIHsgcmV0dXJuIFdURk1vdmUobV9kaXNwbGF5TGlzdCk7IH0KKyAgICBEaXNw
bGF5TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxh
eUxpc3QsIHsgfSk7IH0KICAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBt
X2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBs
YXllZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXllZERpc3BsYXlMaXN0Lmdl
dCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQyMTRiYzFlNjZmMWI1ZjAxMWU5YWI2NDRjNzhlNDIwYzRlYmM0M2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCIK
KworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCisj
aWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECitDU3RyaW5nIEl0ZW1IYW5kbGU6
OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBUZXh0U3RyZWFtIHRzOworICAgIHRzIDw8ICp0
aGlzOworICAgIHJldHVybiB0cy5yZWxlYXNlKCkudXRmOCgpOworfQorI2VuZGlmCisKK3ZvaWQg
SXRlbUhhbmRsZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN3aXRj
aCAodHlwZSgpKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTogeworICAgICAgICBnZXQ8U2F2
ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIGdldDxSZXN0b3JlPigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTog
eworICAgICAgICBnZXQ8VHJhbnNsYXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAgICBnZXQ8Um90
YXRlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNjYWxlOiB7CisgICAgICAgIGdldDxTY2FsZT4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNU
TTogeworICAgICAgICBnZXQ8Q29uY2F0ZW5hdGVDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAg
IGdldDxTZXRDVE0+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OiB7CisgICAgICAgIGdldDxT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAg
IGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAg
ICAgICAgZ2V0PFNldElubGluZVN0cm9rZUNvbG9yPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczog
eworICAgICAgICBnZXQ8U2V0U3Ryb2tlVGhpY2tuZXNzPigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAg
ICAgIGdldDxTZXRTdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lQ2FwOiB7CisgICAgICAgIGdldDxTZXRMaW5l
Q2FwPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVEYXNoOiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lSm9pbjogeworICAgICAgICBnZXQ8U2V0TGluZUpvaW4+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1p
dDogeworICAgICAgICBnZXQ8U2V0TWl0ZXJMaW1pdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAg
ICAgICBnZXQ8Q2xlYXJTaGFkb3c+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBnZXQ8Q2xpcD4oKS5h
cHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpDbGlwT3V0OiB7CisgICAgICAgIGdldDxDbGlwT3V0PigpLmFwcGx5KGNvbnRleHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6IHsK
KyAgICAgICAgZ2V0PENsaXBPdXRUb1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsKKyAgICAgICAgZ2V0
PENsaXBQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAgICBnZXQ8Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdH
bHlwaHM+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdUaWxlZEltYWdlPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3SW1hZ2VCdWZmZXI6IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0
dGVybjogeworICAgICAgICBnZXQ8RHJhd1BhdHRlcm4+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6IHsKKyAgICAg
ICAgZ2V0PERyYXdSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAgICAgIGdldDxEcmF3TGluZT4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3TGluZXNGb3JUZXh0OiB7CisgICAgICAgIGdldDxEcmF3TGluZXNGb3JUZXh0Pigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6IHsKKyAgICAgICAgZ2V0PERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgZ2V0PERyYXdFbGxp
cHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXRoOiB7CisgICAgICAgIGdldDxEcmF3UGF0aD4oKS5hcHBseShjb250
ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUGF0aDogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkuYXBwbHkoY29u
dGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7
CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVu
dDogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsQ29tcG9zaXRlZFJlY3Q+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5k
ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxsUm91bmRlZFJlY3Q+KCkuYXBwbHkoY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAg
IGdldDxGaWxsSW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdl
dDxGaWxsUGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogeworICAgICAgICBnZXQ8RmlsbEVsbGlwc2U+
KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6UHV0SW1hZ2VEYXRhOiB7CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOiB7CisgICAgICAgIGdldDxQYWludEZyYW1lRm9yTWVkaWE+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlUmVjdDogeworICAgICAgICBnZXQ8U3Ryb2tlUmVjdD4oKS5hcHBseShjb250ZXh0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAgICAgIGdldDxTdHJva2VJ
bmxpbmVQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2Vu
ZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tl
UGF0aD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB7CisgICAgICAgIGdldDxTdHJva2VFbGxpcHNlPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDogeworICAgICAgICBnZXQ8Q2xlYXJSZWN0PigpLmFwcGx5KGNvbnRleHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgZ2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6IHsKKyAgICAgICAgZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVy
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVTRShDRykK
KyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgZ2V0PEFw
cGx5U3Ryb2tlUGF0dGVybj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIGdldDxB
cHBseUZpbGxQYXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjogewor
ICAgICAgICBnZXQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRsZTo6ZGVzdHJv
eSgpCit7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0
VG9QYXRoOiB7CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRoPigpLn5DbGlwT3V0VG9QYXRoKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6IHsK
KyAgICAgICAgZ2V0PENsaXBQYXRoPigpLn5DbGlwUGF0aCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAg
ICBnZXQ8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigpLn5DbGlwVG9EcmF3aW5nQ29tbWFuZHMoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5n
UGF0aDogeworICAgICAgICBnZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCkufkRyYXdGb2N1c1JpbmdQ
YXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOiB7CisgICAgICAgIGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkufkRyYXdG
b2N1c1JpbmdSZWN0cygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgZ2V0PERyYXdHbHlwaHM+KCkufkRyYXdHbHlwaHMo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6
IHsKKyAgICAgICAgZ2V0PERyYXdJbWFnZT4oKS5+RHJhd0ltYWdlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAg
ICBnZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKS5+RHJhd0xpbmVzRm9yVGV4dCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZTogeworICAg
ICAgICBnZXQ8RHJhd05hdGl2ZUltYWdlPigpLn5EcmF3TmF0aXZlSW1hZ2UoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBn
ZXQ8RHJhd1BhdGg+KCkufkRyYXdQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQYXR0ZXJuPigp
Ln5EcmF3UGF0dGVybigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIGdldDxEcmF3VGlsZWRJbWFnZT4oKS5+RHJh
d1RpbGVkSW1hZ2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBnZXQ8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KCkufkRyYXdUaWxlZFNjYWxlZEltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIGdldDxGaWxs
Q29tcG9zaXRlZFJlY3Q+KCkufkZpbGxDb21wb3NpdGVkUmVjdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOiB7CisgICAgICAgIGdldDxGaWxs
UGF0aD4oKS5+RmlsbFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRoQ29s
b3I+KCkufkZpbGxSZWN0V2l0aENvbG9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxS
ZWN0V2l0aEdyYWRpZW50PigpLn5GaWxsUmVjdFdpdGhHcmFkaWVudCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB7
CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKS5+RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6IHsKKyAgICAgICAgZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKS5+RmlsbFJv
dW5kZWRSZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhOiB7CisgICAgICAgIGdldDxQdXRJbWFnZURhdGE+KCkuflB1dEltYWdlRGF0
YSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVE
YXNoOiB7CisgICAgICAgIGdldDxTZXRMaW5lRGFzaD4oKS5+U2V0TGluZURhc2goKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogeworICAgICAg
ICBnZXQ8U2V0U3RhdGU+KCkuflNldFN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlUGF0aD4o
KS5+U3Ryb2tlUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlw
ZTo6QXBwbHlGaWxsUGF0dGVybjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBseUZpbGxQYXR0ZXJuPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxBcHBs
eVN0cm9rZVBhdHRlcm4+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6Q2xlYXJSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPENsZWFyUmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclNoYWRvdz46OnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENsaXA+Ojp2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91
dDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxDbGlwT3V0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPENvbmNhdGVuYXRlQ1RNPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RWxsaXBzZTogeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxEcmF3RWxsaXBzZT46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2VC
dWZmZXI6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8RHJhd0ltYWdlQnVmZmVyPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdMaW5lPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdSZWN0Pjo6dmFs
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5z
cGFyZW5jeUxheWVyOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPEVuZFRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxFbGxpcHNlPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxJbmxpbmVQYXRoPjo6
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8RmlsbFJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFBhaW50RnJhbWVGb3JNZWRpYT46
OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0
b3JlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFJlc3RvcmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFJvdGF0ZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNhdmU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2NhbGU+Ojp2YWx1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldENUTT46OnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVG
aWxsQ29sb3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8U2V0SW5saW5lRmlsbENvbG9yPjo6dmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRJbmxpbmVG
aWxsR3JhZGllbnQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lU3Ryb2tlQ29sb3I+Ojp2YWx1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxTZXRMaW5lQ2FwPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldExpbmVKb2luOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldExpbmVKb2luPjo6dmFsdWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TWl0ZXJMaW1p
dD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRTdHJva2VUaGlja25lc3M6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8U2V0U3Ryb2tlVGhpY2tuZXNzPjo6dmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U3Ryb2tlRWxs
aXBzZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUlu
bGluZVBhdGg+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZVJlY3Q+Ojp2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFRyYW5zbGF0ZT46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSXRlbUhhbmRs
ZTo6Y29weVRvKEl0ZW1IYW5kbGUgZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgYXV0byBpdGVt
VHlwZSA9IHR5cGUoKTsKKyAgICBkZXN0aW5hdGlvbi5kYXRhWzBdID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oaXRlbVR5cGUpOworICAgIHN3aXRjaCAoaXRlbVR5cGUpIHsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIENsaXBPdXRUb1BhdGgoZ2V0PENsaXBPdXRUb1BhdGg+KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIENsaXBQYXRoKGdl
dDxDbGlwUGF0aD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlw
ZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0
YSArIHNpemVvZihJdGVtVHlwZSkpIENsaXBUb0RyYXdpbmdDb21tYW5kcyhnZXQ8Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEg
KyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3Rm9jdXNSaW5nUGF0aChnZXQ8RHJhd0ZvY3VzUmluZ1Bh
dGg+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdG
b2N1c1JpbmdSZWN0czogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2Yo
SXRlbVR5cGUpKSBEcmF3Rm9jdXNSaW5nUmVjdHMoZ2V0PERyYXdGb2N1c1JpbmdSZWN0cz4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0dseXBoczog
eworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3
R2x5cGhzKGdldDxEcmF3R2x5cGhzPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0ltYWdlKGdldDxEcmF3SW1hZ2U+KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjogewor
ICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3SW1h
Z2VCdWZmZXIoZ2V0PERyYXdJbWFnZUJ1ZmZlcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogeworICAgICAgICBuZXcgKGRl
c3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3TGluZXNGb3JUZXh0KGdldDxE
cmF3TGluZXNGb3JUZXh0PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd05hdGl2ZUltYWdlKGdldDxEcmF3TmF0aXZlSW1hZ2U+
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRo
OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERy
YXdQYXRoKGdldDxEcmF3UGF0aD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd1BhdHRlcm4oZ2V0PERyYXdQYXR0ZXJuPigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTog
eworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3
VGlsZWRJbWFnZShnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOiB7CisgICAgICAgIG5l
dyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdUaWxlZFNjYWxlZElt
YWdlKGdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB7CisgICAgICAgIG5ldyAo
ZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxDb21wb3NpdGVkUmVjdChn
ZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEg
KyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUGF0aChnZXQ8RmlsbFBhdGg+KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOiB7Cisg
ICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxSZWN0
V2l0aENvbG9yKGdldDxGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFJlY3RXaXRoR3Jh
ZGllbnQoZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAg
ICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShnZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogeworICAgICAg
ICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUm91bmRlZFJl
Y3QoZ2V0PEZpbGxSb3VuZGVkUmVjdD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24u
ZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFB1dEltYWdlRGF0YShnZXQ8UHV0SW1hZ2VEYXRhPigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFz
aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBT
ZXRMaW5lRGFzaChnZXQ8U2V0TGluZURhc2g+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24u
ZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldFN0YXRlKGdldDxTZXRTdGF0ZT4oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogeworICAg
ICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBTdHJva2VQYXRo
KGdldDxTdHJva2VQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRp
b24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZ2V0PEFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2lmIFVT
RShDRykKKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOiB7CisgICAgICAgIG5l
dyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEFwcGx5RmlsbFBhdHRlcm4o
Z2V0PEFwcGx5RmlsbFBhdHRlcm4+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5U3Ryb2tlUGF0dGVybjogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBBcHBseVN0cm9rZVBhdHRlcm4oZ2V0PEFwcGx5
U3Ryb2tlUGF0dGVybj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBj
YXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIG5ldyAoZGVz
dGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
Z2V0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9u
LmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDbGVhclJlY3QoZ2V0PENsZWFyUmVjdD4oKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHsK
KyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQ2xlYXJT
aGFkb3coZ2V0PENsZWFyU2hhZG93PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIENsaXAoZ2V0PENsaXA+KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlv
bi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQ2xpcE91dChnZXQ8Q2xpcE91dD4oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHsK
KyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgQ29uY2F0
ZW5hdGVDVE0oZ2V0PENvbmNhdGVuYXRlQ1RNPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAg
IG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoZ2V0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOiB7CisgICAgICAg
IG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdFbGxpcHNlKGdl
dDxEcmF3RWxsaXBzZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0xpbmU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgRHJhd0xpbmUoZ2V0PERyYXdMaW5lPigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UmVjdDogeworICAgICAgICBuZXcgKGRlc3Rp
bmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3UmVjdChnZXQ8RHJhd1JlY3Q+KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFy
ZW5jeUxheWVyOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVt
VHlwZSkpIEVuZFRyYW5zcGFyZW5jeUxheWVyKGdldDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6
IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmls
bEVsbGlwc2UoZ2V0PEZpbGxFbGxpcHNlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5l
UGF0aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBGaWxsSW5saW5lUGF0aChnZXQ8RmlsbElubGluZVBhdGg+KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFJlY3QoZ2V0PEZp
bGxSZWN0PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWE6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6
ZW9mKEl0ZW1UeXBlKSkgUGFpbnRGcmFtZUZvck1lZGlhKGdldDxQYWludEZyYW1lRm9yTWVkaWE+
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJlc3RvcmU6
IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgUmVz
dG9yZShnZXQ8UmVzdG9yZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVv
ZihJdGVtVHlwZSkpIFJvdGF0ZShnZXQ8Um90YXRlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTYXZlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24u
ZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNhdmUoZ2V0PFNhdmU+KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOiB7CisgICAgICAgIG5ldyAoZGVz
dGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNjYWxlKGdldDxTY2FsZT4oKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldENUTShnZXQ8
U2V0Q1RNPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6
ZW9mKEl0ZW1UeXBlKSkgU2V0SW5saW5lRmlsbENvbG9yKGdldDxTZXRJbmxpbmVGaWxsQ29sb3I+
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxHcmFkaWVudDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2Yo
SXRlbVR5cGUpKSBTZXRJbmxpbmVGaWxsR3JhZGllbnQoZ2V0PFNldElubGluZUZpbGxHcmFkaWVu
dD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9m
KEl0ZW1UeXBlKSkgU2V0SW5saW5lU3Ryb2tlQ29sb3IoZ2V0PFNldElubGluZVN0cm9rZUNvbG9y
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkp
IFNldExpbmVDYXAoZ2V0PFNldExpbmVDYXA+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRp
b24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldExpbmVKb2luKGdldDxTZXRMaW5lSm9pbj4o
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJM
aW1pdDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBTZXRNaXRlckxpbWl0KGdldDxTZXRNaXRlckxpbWl0PigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0U3Ryb2tlVGhpY2tu
ZXNzKGdldDxTZXRTdHJva2VUaGlja25lc3M+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5h
dGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU3Ryb2tlRWxsaXBzZShnZXQ8U3Ryb2tlRWxs
aXBzZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBu
ZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBTdHJva2VJbmxpbmVQYXRo
KGdldDxTdHJva2VJbmxpbmVQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRp
ZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgbmV3IChkZXN0aW5h
dGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU3Ryb2tlUmVjdChnZXQ8U3Ryb2tlUmVjdD4o
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRl
OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFRy
YW5zbGF0ZShnZXQ8VHJhbnNsYXRlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB9
Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJiBoYW5kbGVz
KQorICAgIDogbV9yZWFkT25seUJ1ZmZlcnMoV1RGTW92ZShoYW5kbGVzKSkKK3sKK30KKworSXRl
bUJ1ZmZlcjo6SXRlbUJ1ZmZlcigpID0gZGVmYXVsdDsKKworSXRlbUJ1ZmZlcjo6fkl0ZW1CdWZm
ZXIoKQoreworICAgIGNsZWFyKCk7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoSXRlbUJ1
ZmZlciYmIG90aGVyKQorICAgIDogbV9yZWFkaW5nQ2xpZW50KHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9yZWFkaW5nQ2xpZW50LCBudWxscHRyKSkKKyAgICAsIG1fd3JpdGluZ0NsaWVudChzdGQ6OmV4
Y2hhbmdlKG90aGVyLm1fd3JpdGluZ0NsaWVudCwgbnVsbHB0cikpCisgICAgLCBtX2l0ZW1zVG9E
ZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtc1RvRGVz
dHJveUluQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fYWxsb2NhdGVkQnVmZmVycyhz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAsIG1fcmVh
ZE9ubHlCdWZmZXJzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9yZWFkT25seUJ1ZmZlcnMsIHsgfSkp
CisgICAgLCBtX3dyaXRhYmxlQnVmZmVyKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0YWJsZUJ1
ZmZlciwgeyB9KSkKKyAgICAsIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMoc3RkOjpleGNoYW5nZShv
dGhlci5tX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzLCAwKSkKK3sKK30KKworSXRlbUJ1ZmZlciYgSXRl
bUJ1ZmZlcjo6b3BlcmF0b3I9KEl0ZW1CdWZmZXImJiBvdGhlcikKK3sKKyAgICBtX3JlYWRpbmdD
bGllbnQgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0cik7Cisg
ICAgbV93cml0aW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdDbGllbnQs
IG51bGxwdHIpOworICAgIG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMsIHsgfSk7
CisgICAgbV9hbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2FsbG9jYXRl
ZEJ1ZmZlcnMsIHsgfSk7CisgICAgbV9yZWFkT25seUJ1ZmZlcnMgPSBzdGQ6OmV4Y2hhbmdlKG90
aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pOworICAgIG1fd3JpdGFibGVCdWZmZXIgPSBzdGQ6
OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgbV93cml0dGVuTnVt
YmVyT2ZCeXRlcyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZCeXRlcywg
MCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitJdGVtQnVmZmVySGFuZGxlIEl0ZW1CdWZmZXI6
OmNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQoreworICAgIGlmIChtX3dyaXRpbmdD
bGllbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gaGFuZGxlID0gbV93cml0aW5nQ2xpZW50LT5jcmVh
dGVJdGVtQnVmZmVyKGNhcGFjaXR5KSkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAg
fQorCisgICAgY29uc3RleHByIHNpemVfdCBkZWZhdWx0SXRlbUJ1ZmZlckNhcGFjaXR5ID0gMSA8
PCAxMDsKKworICAgIGF1dG8gbmV3QnVmZmVyQ2FwYWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwg
ZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSk7CisgICAgYXV0byogYnVmZmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhuZXdCdWZmZXJDYXBhY2l0eSkpOworICAgIG1f
YWxsb2NhdGVkQnVmZmVycy5hcHBlbmQoYnVmZmVyKTsKKyAgICByZXR1cm4geyBJdGVtQnVmZmVy
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSwgYnVmZmVyLCBuZXdCdWZmZXJDYXBhY2l0eSB9OworfQor
Cit2b2lkIEl0ZW1CdWZmZXI6OmZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3Qg
SXRlbUJ1ZmZlckhhbmRsZSYpPiYmIG1hcEZ1bmN0aW9uKSBjb25zdAoreworICAgIGZvciAoYXV0
byYgaGFuZGxlIDogbV9yZWFkT25seUJ1ZmZlcnMpCisgICAgICAgIG1hcEZ1bmN0aW9uKGhhbmRs
ZSk7CisKKyAgICBpZiAobV93cml0YWJsZUJ1ZmZlciAmJiBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVz
KQorICAgICAgICBtYXBGdW5jdGlvbih7IG1fd3JpdGFibGVCdWZmZXIuaWRlbnRpZmllciwgbV93
cml0YWJsZUJ1ZmZlci5kYXRhLCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIH0pOworfQorCit2b2lk
IEl0ZW1CdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBmb3IgKGF1dG8gaXRlbSA6IHN0ZDo6ZXhjaGFu
Z2UobV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAgICAgICAgaXRl
bS5kZXN0cm95KCk7CisKKyAgICBmb3IgKGF1dG8qIGJ1ZmZlciA6IHN0ZDo6ZXhjaGFuZ2UobV9h
bGxvY2F0ZWRCdWZmZXJzLCB7IH0pKQorICAgICAgICBmYXN0RnJlZShidWZmZXIpOworCisgICAg
bV9yZWFkT25seUJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0geyB9Owor
ICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSAwOworfQorCit2b2lkIEl0ZW1CdWZmZXI6OnN3
YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVfdCBudW1iZXJPZkJ5dGVzKQoreworICAgIGlm
IChtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICsgbnVtYmVyT2ZCeXRlcyA8PSBtX3dyaXRhYmxlQnVm
ZmVyLmNhcGFjaXR5KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5leHRCdWZmZXIgPSBj
cmVhdGVJdGVtQnVmZmVyKG51bWJlck9mQnl0ZXMpOworICAgIGJvb2wgaGFkUHJldmlvdXNCdWZm
ZXIgPSBtX3dyaXRhYmxlQnVmZmVyOworICAgIGF1dG8gcHJldmlvdXNCdWZmZXIgPSBzdGQ6OmV4
Y2hhbmdlKG1fd3JpdGFibGVCdWZmZXIsIHsgfSk7CisgICAgcHJldmlvdXNCdWZmZXIuY2FwYWNp
dHkgPSBzdGQ6OmV4Y2hhbmdlKG1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApOworICAgIGlmICho
YWRQcmV2aW91c0J1ZmZlcikKKyAgICAgICAgbV9yZWFkT25seUJ1ZmZlcnMuYXBwZW5kKFdURk1v
dmUocHJldmlvdXNCdWZmZXIpKTsKKworICAgIG1fd3JpdGFibGVCdWZmZXIgPSBXVEZNb3ZlKG5l
eHRCdWZmZXIpOworfQorCit2b2lkIEl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiBkYXRhLCB1aW50OF90KiBsb2NhdGlvbikKK3sKKyAgICByZWludGVy
cHJldF9jYXN0PHNpemVfdCo+KGxvY2F0aW9uKVswXSA9IGRhdGEtPnNpemUoKTsKKworICAgIGF1
dG8qIHN0YXJ0T2ZQYWRkaW5nID0gbG9jYXRpb24gKyBzaXplb2Yoc2l6ZV90KTsKKyAgICBzaXpl
X3QgcGFkZGluZyA9IChhbGlnbm9mKHVpbnQ2NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihzdGFydE9mUGFkZGluZykgJSBhbGlnbm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2
NF90KTsKKyAgICBhdXRvKiBzdGFydE9mRGF0YSA9IHN0YXJ0T2ZQYWRkaW5nICsgcGFkZGluZzsK
KyAgICBtZW1jcHkoc3RhcnRPZkRhdGEsIGRhdGEtPmRhdGFBc1VJbnQ4UHRyKCksIGRhdGEtPnNp
emUoKSk7CisKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzICs9IHNpemVvZihJdGVtVHlwZSkg
KyBzaXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBkYXRhLT5zaXplKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIERpc3BsYXlMaXN0Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I0ODJlMGU4YjNhNDdlMDVi
MWM4MzZkNjZlM2RjNjcyOGNjZjRkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaApA
QCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
RGlzcGxheUxpc3RJdGVtVHlwZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERpc3BsYXlMaXN0OworCitlbnVtIEl0ZW1CdWZm
ZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJdGVtQnVmZmVySWRlbnRpZmllciA9IE9iamVj
dElkZW50aWZpZXI8SXRlbUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworLy8gQW4gSXRlbUJ1ZmZl
ckhhbmRsZSB3cmFwcyBhIHBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCBjb250YWlucyBkaXNwbGF5
IGxpc3QgaXRlbSBkYXRhLgorc3RydWN0IEl0ZW1CdWZmZXJIYW5kbGUgeworICAgIEl0ZW1CdWZm
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgdWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsK
KyAgICBzaXplX3QgY2FwYWNpdHkgeyAwIH07CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISEoKnRoaXMpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhZGF0YTsgfQorfTsKKwordXNpbmcgSXRlbUJ1ZmZlckhhbmRsZXMgPSBWZWN0b3I8SXRlbUJ1
ZmZlckhhbmRsZSwgMj47CisKKy8vIEFuIEl0ZW1IYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRvIGFu
IEl0ZW1UeXBlLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhbiBpdGVtIG9mIHRoYXQgdHlwZS4K
K3N0cnVjdCBJdGVtSGFuZGxlIHsKKyAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworCisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAg
ICBib29sIGlzRHJhd2luZ0l0ZW0oKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6aXNEcmF3aW5nSXRlbSh0eXBlKCkpOyB9CisKKyAgICBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISEoKnRoaXMpOyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhZGF0YTsgfQorCisjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCAhTE9HX0RJU0FCTEVECisgICAg
Q1N0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworI2VuZGlmCisKKyAgICBJdGVtVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SXRlbVR5cGU+KGRhdGFbMF0pOyB9CisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRl
bUluQnl0ZXModHlwZSgpKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBpcygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUOjppdGVtVHlwZTsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQmIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXM8VD4oKSk7
CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxUKj4oJmRhdGFbc2l6ZW9mKEl0ZW1U
eXBlKV0pOworICAgIH0KKworICAgIHZvaWQgY29weVRvKEl0ZW1IYW5kbGUgZGVzdGluYXRpb24p
IGNvbnN0OworfTsKKworY2xhc3MgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFs
IEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpID0gMDsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGVuY29kZUl0ZW0oSXRlbUhhbmRsZSkgY29uc3QgPSAw
OworfTsKKworY2xhc3MgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgeworcHVibGljOgorICAgIHZp
cnR1YWwgfkl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIE9wdGlv
bmFsPEl0ZW1IYW5kbGU+IFdBUk5fVU5VU0VEX1JFVFVSTiBkZWNvZGVJdGVtKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCBJdGVtVHlwZSwgdWludDhfdCogaGFuZGxlTG9j
YXRpb24pID0gMDsKK307CisKKy8vIEFuIEl0ZW1CdWZmZXIgY29udGFpbnMgZGlzcGxheSBsaXN0
IGl0ZW0gZGF0YSwgYW5kIGNvbnNpc3RzIG9mIGEgcmVhZHdyaXRlIEl0ZW1CdWZmZXJIYW5kbGUg
KHRvIHdoaWNoIGRpc3BsYXkKKy8vIGxpc3QgaXRlbXMgYXJlIGFwcGVuZGVkKSBhcyB3ZWxsIGFz
IGEgbnVtYmVyIG9mIHJlYWRvbmx5IEl0ZW1CdWZmZXJIYW5kbGVzLiBJdGVtcyBhcmUgYXBwZW5k
ZWQgdG8gdGhlIHJlYWR3cml0ZQorLy8gYnVmZmVyIHVudGlsIGFsbCBhdmFpbGFibGUgY2FwYWNp
dHkgaXMgZXhoYXVzdGVkLCBhdCB3aGljaCBwb2ludCB3ZSB3aWxsIG1vdmUgdGhpcyB3cml0YWJs
ZSBoYW5kbGUgdG8gdGhlIGxpc3QKKy8vIG9mIHJlYWRvbmx5IGhhbmRsZXMuCitjbGFzcyBJdGVt
QnVmZmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJdGVtQnVmZmVyKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERpc3BsYXlMaXN0Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIH5J
dGVtQnVmZmVyKCk7CisgICAgSXRlbUJ1ZmZlcihJdGVtQnVmZmVySGFuZGxlcyYmKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXIoSXRlbUJ1ZmZlciYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBJdGVtQnVmZmVyJiBvcGVyYXRvcj0oSXRlbUJ1ZmZlciYmKTsKKworICAgIHNpemVfdCBz
aXplSW5CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yIChhdXRvIGJ1ZmZlciA6IG1fcmVhZE9ubHlCdWZmZXJzKQorICAgICAgICAgICAg
cmVzdWx0ICs9IGJ1ZmZlci5jYXBhY2l0eTsKKyAgICAgICAgcmVzdWx0ICs9IG1fd3JpdHRlbk51
bWJlck9mQnl0ZXM7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBj
bGVhcigpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhbV93cml0dGVuTnVtYmVyT2ZCeXRlcyAmJiBtX3JlYWRPbmx5QnVmZmVycy5pc0VtcHR5KCk7
CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVt
QnVmZmVyKHNpemVfdCk7CisKKyAgICAvLyBJdGVtQnVmZmVyOjphcHBlbmQ8VD4oLi4uKSBhcHBl
bmRzIGEgZGlzcGxheSBsaXN0IGl0ZW0gb2YgdHlwZSBUIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJl
bnQKKyAgICAvLyB3cml0YWJsZSBidWZmZXIgaGFuZGxlOyBpZiByZW1haW5pbmcgYnVmZmVyIGNh
cGFjaXR5IGlzIGluc3VmZmljaWVudCB0byBzdG9yZSB0aGUgaXRlbSwgYQorICAgIC8vIG5ldyBi
dWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgKGVpdGhlciBieSB0aGUgSXRlbUJ1ZmZlcldyaXRpbmdD
bGllbnQsIGlmIHNldCwgb3IgYnkgdGhlIGl0ZW0KKyAgICAvLyBidWZmZXIgaXRzZWxmIGlmIHRo
ZXJlIGlzIG5vIGNsaWVudCkuIEl0ZW1zIGFyZSBwbGFjZWQgYmFjay10by1iYWNrIGluIHRoZXNl
IGl0ZW0gYnVmZmVycywKKyAgICAvLyB3aXRoIGFuIEl0ZW1UeXBlIHNlcGFyYXRpbmcgZWFjaCBp
dGVtLgorICAgIC8vCisgICAgLy8gSWYgYSB3cml0aW5nIGNsaWVudCBpcyBwcmVzZW50IGFuZCBy
ZXF1aXJlcyBjdXN0b20gZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBpdGVtIHR5cGUgVCwgdGhlCisg
ICAgLy8gaXRlbSBidWZmZXIgd2lsbCBhc2sgdGhlIGNsaWVudCBmb3IgYW4gb3BhcXVlIFNoYXJl
ZEJ1ZmZlciBjb250YWluaW5nIGVuY29kZWQgZGF0YSBmb3IgdGhlCisgICAgLy8gaXRlbS4gVGhp
cyBlbmNvZGVkIGRhdGEgaXMgdGhlbiBhcHBlbmRlZCB0byB0aGUgaXRlbSBidWZmZXIsIHdpdGgg
cGFkZGluZyB0byBlbnN1cmUgdGhhdAorICAgIC8vIHRoZSBzdGFydCBvZiB0aGlzIGRhdGEgaXMg
YWxpZ25lZCB0byA4IGJ5dGVzLCBpZiBuZWNlc3NhcnkuIFdoZW4gY29uc3VtaW5nIGVuY29kZWQg
aXRlbQorICAgIC8vIGRhdGEsIGEgY29ycmVzcG9uZGluZyBJdGVtQnVmZmVyUmVhZGluZ0NsaWVu
dCB3aWxsIGJlIHJlcXVpcmVkIHRvIGNvbnZlcnQgdGhpcyBlbmNvZGVkIGRhdGEKKyAgICAvLyBi
YWNrIGludG8gYW4gaXRlbSBvZiB0eXBlIFQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xh
c3MuLi4gQXJncz4gdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUgfHwg
IVQ6OmlzSW5saW5lSXRlbSk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNpemVPZlR5cGVBbmRJ
dGVtID0gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVvZihUKTsKKworICAgICAgICBpZiAoIVQ6Omlz
SW5saW5lSXRlbSAmJiBtX3dyaXRpbmdDbGllbnQpIHsKKyAgICAgICAgICAgIHN0YXRpYyB1aW50
OF90IGl0ZW1CdWZmZXJbc2l6ZU9mVHlwZUFuZEl0ZW1dOworICAgICAgICAgICAgaXRlbUJ1ZmZl
clswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgICAgIG5l
dyAoaXRlbUJ1ZmZlciArIHNpemVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHNoYXJlZEJ1ZmZlciA9IG1fd3JpdGluZ0Ns
aWVudC0+ZW5jb2RlSXRlbSh7IGl0ZW1CdWZmZXIgfSkpIHsKKyAgICAgICAgICAgICAgICBzd2Fw
V3JpdGFibGVCdWZmZXJJZk5lZWRlZChzaGFyZWRCdWZmZXItPnNpemUoKSArIHNpemVvZihJdGVt
VHlwZSkgKyBzaXplb2Yoc2l6ZV90KSArIGFsaWdub2YodWludDY0X3QpKTsKKyAgICAgICAgICAg
ICAgICBtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVyT2ZCeXRlc10gPSBzdGF0
aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7CisgICAgICAgICAgICAgICAgYXBwZW5kRGF0
YUFuZExlbmd0aChzaGFyZWRCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgbV93cml0YWJsZUJ1ZmZl
ci5kYXRhICsgbV93cml0dGVuTnVtYmVyT2ZCeXRlcyArIHNpemVvZihJdGVtVHlwZSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dh
cFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2l6ZU9mVHlwZUFuZEl0ZW0pOworCisgICAgICAgIGlm
ICghc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSkKKyAgICAgICAgICAg
IG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMuYXBwZW5kKHsgJm1fd3JpdGFibGVC
dWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXSB9KTsKKworICAgICAgICB1bmNoZWNr
ZWRBcHBlbmQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldENsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KSB7IG1fd3JpdGlu
Z0NsaWVudCA9IGNsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50KiBjbGllbnQpIHsgbV9yZWFkaW5nQ2xpZW50ID0gY2xpZW50OyB9CisKK3ByaXZhdGU6
CisgICAgY29uc3QgSXRlbUJ1ZmZlckhhbmRsZXMmIHJlYWRPbmx5QnVmZmVycygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZE9ubHlCdWZmZXJzOyB9CisgICAgdm9pZCBmb3JFYWNoSXRlbUJ1ZmZlcihG
dW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJikgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNpemVfdCBudW1i
ZXJPZkJ5dGVzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZERhdGFBbmRMZW5ndGgo
UmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDhfdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IGNsYXNzLi4uIEFyZ3M+IHZvaWQgdW5jaGVja2VkQXBwZW5kKEFyZ3MmJi4uLiBhcmdzKQorICAg
IHsKKyAgICAgICAgYXV0byogc3RhcnRPZkl0ZW0gPSAmbV93cml0YWJsZUJ1ZmZlci5kYXRhW21f
d3JpdHRlbk51bWJlck9mQnl0ZXNdOworICAgICAgICBzdGFydE9mSXRlbVswXSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KFQ6Oml0ZW1UeXBlKTsKKyAgICAgICAgbmV3IChzdGFydE9mSXRlbSArIHNp
emVvZihJdGVtVHlwZSkpIFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAg
bV93cml0dGVuTnVtYmVyT2ZCeXRlcyArPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZU9mSXRlbUlu
Qnl0ZXMoVDo6aXRlbVR5cGUpOworICAgIH0KKworICAgIEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50
KiBtX3JlYWRpbmdDbGllbnQgeyBudWxscHRyIH07CisgICAgSXRlbUJ1ZmZlcldyaXRpbmdDbGll
bnQqIG1fd3JpdGluZ0NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8SXRlbUhhbmRsZT4g
bV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVyczsKKyAgICBWZWN0b3I8dWludDhfdCo+
IG1fYWxsb2NhdGVkQnVmZmVyczsKKyAgICBJdGVtQnVmZmVySGFuZGxlcyBtX3JlYWRPbmx5QnVm
ZmVyczsKKyAgICBJdGVtQnVmZmVySGFuZGxlIG1fd3JpdGFibGVCdWZmZXI7CisgICAgc2l6ZV90
IG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCmluZGV4IDY4NzcwMzYwYWVlNDYwYTU4NWRlYWZjMmE0NTZhNDg1N2JlZDVmODUu
LmVlOWY2OTk2ODk1Mzc2N2U2ZDRmOTgzNGViYjAxMTRiYzc4NzY1ZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTQ0LDIwNCArNDQsMTYgQEAgbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIC8vIFNob3VsZCBtYXRjaCBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpCiBzdGF0aWMgY29uc3QgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCA9IDM7
CiAKLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLVdURjo6Q1N0cmluZyBJ
dGVtOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgVGV4dFN0cmVhbSB0czsKLSAgICB0cyA8
PCAqdGhpczsKLSAgICByZXR1cm4gdHMucmVsZWFzZSgpLnV0ZjgoKTsKLX0KLSNlbmRpZgotCi1J
dGVtOjpJdGVtKEl0ZW1UeXBlIHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0KLQotSXRl
bTo6fkl0ZW0oKSA9IGRlZmF1bHQ7Ci0KLXNpemVfdCBJdGVtOjpzaXplSW5CeXRlcyhjb25zdCBJ
dGVtJiBpdGVtKQotewotICAgIHN3aXRjaCAoaXRlbS50eXBlKCkpIHsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTYXZlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNhdmU+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFJlc3RvcmU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKSk7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Um90YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFJvdGF0ZT4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFNjYWxlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0Q1RNOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldENUTT4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENv
bmNhdGVuYXRlQ1RNPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdy
YWRpZW50OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxHcmFk
aWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTZXRTdHJva2VUaGlja25lc3M+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U2V0TGluZUNhcD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNo
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVEYXNoPihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8U2V0TGluZUpvaW4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRlckxp
bWl0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldE1pdGVyTGltaXQ+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclNoYWRvdzoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxDbGVhclNoYWRvdz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcD4oaXRlbSkpOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91
dD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBQYXRo
PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0dseXBocz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFn
ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3SW1hZ2U+KGl0ZW0pKTsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdU
aWxlZFNjYWxlZEltYWdlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdUaWxl
ZFNjYWxlZEltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVy
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdJbWFnZUJ1ZmZlcj4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxEcmF3TmF0aXZlSW1hZ2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UGF0dGVy
bj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PERyYXdSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0xpbmU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0xpbmU+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3RWxsaXBz
ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PERyYXdQYXRoPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3Vz
UmluZ1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVt
KSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhDb2xv
cj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aEdyYWRpZW50OgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aEdyYWRpZW50PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICByZXR1cm4g
c2l6ZW9mKGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSkpOwotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxG
aWxsUm91bmRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oaXRlbSkpOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PEZpbGxJbmxpbmVQYXRoPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4oaXRlbSkp
OwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PEZpbGxFbGxpcHNlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1h
Z2VEYXRhOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFB1dEltYWdlRGF0YT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0pKTsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0
cm9rZVJlY3Q+KGl0ZW0pKTsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25j
YXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pKTsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUGF0aD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlRWxsaXBzZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsZWFyUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGVhclJlY3Q+
KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOgotICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgcmV0
dXJuIHNpemVvZihkb3duY2FzdDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oaXRlbSkpOwotI2lmIFVT
RShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0ZXJuPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxBcHBseUZpbGxQYXR0ZXJuPihpdGVtKSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+KGl0ZW0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3aW5nSXRlbSYgaXRlbSkKLXsKLSAgICB0cy5zdGFydEdyb3VwKCk7Ci0gICAgdHMgPDwgImV4
dGVudCAiOwotICAgIGlmIChpdGVtLmV4dGVudEtub3duKCkpCi0gICAgICAgIHRzIDw8IGl0ZW0u
ZXh0ZW50KCk7Ci0gICAgZWxzZQotICAgICAgICB0cyA8PCAidW5rbm93biI7Ci0gICAgCi0gICAg
dHMuZW5kR3JvdXAoKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLURyYXdpbmdJdGVtOjpEcmF3aW5n
SXRlbShJdGVtVHlwZSB0eXBlKQotICAgIDogSXRlbSh0eXBlKQotewotfQotCi1EcmF3aW5nSXRl
bTo6fkRyYXdpbmdJdGVtKCkgPSBkZWZhdWx0OwotCi1TYXZlOjpTYXZlKCkKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNhdmUpCi17Ci19Ci0KLVNhdmU6On5TYXZlKCkgPSBkZWZhdWx0OwotCiB2b2lk
IFNhdmU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LnNhdmUoKTsKIH0KIAotUmVzdG9yZTo6UmVzdG9yZSgpCi0gICAgOiBJdGVtKEl0ZW1UeXBl
OjpSZXN0b3JlKQotewotfQotCi1SZXN0b3JlOjp+UmVzdG9yZSgpID0gZGVmYXVsdDsKLQogdm9p
ZCBSZXN0b3JlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLVRyYW5zbGF0ZTo6VHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpUcmFuc2xhdGUpCi0gICAgLCBtX3goeCkKLSAg
ICAsIG1feSh5KQotewotfQotCi1UcmFuc2xhdGU6On5UcmFuc2xhdGUoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgVHJhbnNsYXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC50cmFuc2xhdGUobV94LCBtX3kpOwpAQCAtMjU1LDE0ICs2Nyw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBUcmFuc2xh
dGUmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Sb3RhdGU6OlJvdGF0ZShmbG9hdCBhbmds
ZSkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlJvdGF0ZSkKLSAgICAsIG1fYW5nbGUoYW5nbGUpCi17
Ci19Ci0KLVJvdGF0ZTo6flJvdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBSb3RhdGU6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnJvdGF0ZSht
X2FuZ2xlKTsKQEAgLTI3NSwxNCArNzksNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUm90YXRlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0K
IAotU2NhbGU6OlNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLSAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNjYWxlKQotICAgICwgbV9zaXplKHNpemUpCi17Ci19Ci0KLVNjYWxlOjp+U2NhbGUoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgU2NhbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LnNjYWxlKG1fc2l6ZSk7CkBAIC0yOTUsMTQgKzkxLDYgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNjYWxl
JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0Q1RNOjpTZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRDVE0pCi0gICAg
LCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLVNldENUTTo6flNldENUTSgpID0gZGVm
YXVsdDsKLQogdm9pZCBTZXRDVE06OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LnNldENUTShtX3RyYW5zZm9ybSk7CkBAIC0zMTUsMTQgKzEwMyw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBT
ZXRDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1Db25jYXRlbmF0ZUNUTTo6Q29uY2F0
ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTSkKLSAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKLXsK
LX0KLQotQ29uY2F0ZW5hdGVDVE06On5Db25jYXRlbmF0ZUNUTSgpID0gZGVmYXVsdDsKLQogdm9p
ZCBDb25jYXRlbmF0ZUNUTTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuY29uY2F0Q1RNKG1fdHJhbnNmb3JtKTsKQEAgLTMzNiw4ICsxMTYsNyBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29u
Y2F0ZW5hdGVDVE0mIGl0ZW0pCiB9CiAKIFNldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5l
RmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkKLSAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0YShncmFkaWVudC5kYXRhKCkp
CisgICAgOiBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQogICAgICwgbV9ncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24oZ3JhZGllbnQuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKQogICAgICwgbV9z
cHJlYWRNZXRob2QoZ3JhZGllbnQuc3ByZWFkTWV0aG9kKCkpCiAgICAgLCBtX2NvbG9yU3RvcENv
dW50KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpKSkKQEAgLTM1
OSwxNCArMTM4LDggQEAgUmVmPEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmdyYWRp
ZW50KCkgY29uc3QKICAgICByZXR1cm4gZ3JhZGllbnQ7CiB9CiAKLVJlZjxTZXRJbmxpbmVGaWxs
R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEdyYWRpZW50JiBn
cmFkaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGll
bnQoZ3JhZGllbnQpKTsKLX0KLQogU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxs
R3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBkYXRhLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGll
bnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KQotICAg
IDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQotICAgICwgbV9kYXRhKGRh
dGEpCisgICAgOiBtX2RhdGEoZGF0YSkKICAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uKGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbikKICAgICAsIG1fc3ByZWFkTWV0aG9kKHNw
cmVhZE1ldGhvZCkKICAgICAsIG1fY29sb3JTdG9wQ291bnQoY29sb3JTdG9wQ291bnQpCkBAIC0z
NzgsOCArMTUxLDYgQEAgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3JhZGll
bnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFMKICAgICB9CiB9CiAKLVNldElu
bGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVudCgpID0gZGVmYXVsdDsKLQog
dm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0b3BDb3Vu
dCkKQEAgLTQwNSwxMyArMTc2LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFNldElubGluZUZpbGxHcmFkaWVudCYpCiAgICAgcmV0dXJuIHRz
OwogfQogCi1SZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0
ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0SW5saW5lRmlsbENvbG9yKGNvbG9yRGF0YSkpOwotfQotCi1TZXRJbmxpbmVGaWxsQ29sb3I6
On5TZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lRmlsbENv
bG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoY29sb3IoKSk7CkBAIC00MjMsMTMgKzE4Nyw2IEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsQ29s
b3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldElubGluZVN0cm9rZUNvbG9y
PiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVTdHJva2VDb2xvcihjb2xvckRh
dGEpKTsKLX0KLQotU2V0SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJbmxpbmVTdHJva2VDb2xvcigp
ID0gZGVmYXVsdDsKLQogdm9pZCBTZXRJbmxpbmVTdHJva2VDb2xvcjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoY29s
b3IoKSk7CkBAIC00NDEsMTMgKzE5OCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVTdHJva2VDb2xvciYgc3RhdGUpCiAgICAg
cmV0dXJuIHRzOwogfQogCi1SZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBTZXRTdHJva2VUaGlja25l
c3M6OmNyZWF0ZShmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcykpOwotfQotCi1TZXRTdHJva2VUaGlja25lc3M6
On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0U3Ryb2tlVGhpY2tu
ZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwpAQCAtNDYwLDE5ICsyMTAsMTUgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0
cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB9CiAKIFNldFN0YXRlOjpTZXRTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgLCBtX3N0
YXRlKHN0YXRlLCBmbGFncykKKyAgICA6IG1fc3RhdGUoc3RhdGUsIGZsYWdzKQogewogfQogCiBT
ZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRl
Q2hhbmdlKQotICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3RhdGUpCi0gICAgLCBtX3N0YXRlKHN0
YXRlQ2hhbmdlKQorICAgIDogbV9zdGF0ZShzdGF0ZUNoYW5nZSkKIHsKIH0KIAotU2V0U3RhdGU6
On5TZXRTdGF0ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRTdGF0ZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIG1fc3RhdGUuYXBwbHkoY29udGV4dCk7CkBA
IC00ODQsMTQgKzIzMCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBTZXRTdGF0ZSYgc3RhdGUpCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRM
aW5lQ2FwOjpTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6
OlNldExpbmVDYXApCi0gICAgLCBtX2xpbmVDYXAobGluZUNhcCkKLXsKLX0KLQotU2V0TGluZUNh
cDo6flNldExpbmVDYXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TGluZUNhcDo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGluZUNhcCht
X2xpbmVDYXApOwpAQCAtNTAzLDE1ICsyNDEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZUNhcCYgbGluZUNhcCkKICAgICByZXR1
cm4gdHM7CiB9CiAKLVNldExpbmVEYXNoOjpTZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRh
c2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVE
YXNoKQotICAgICwgbV9kYXNoQXJyYXkoZGFzaEFycmF5KQotICAgICwgbV9kYXNoT2Zmc2V0KGRh
c2hPZmZzZXQpCi17Ci19Ci0KLVNldExpbmVEYXNoOjp+U2V0TGluZURhc2goKSA9IGRlZmF1bHQ7
Ci0KIHZvaWQgU2V0TGluZURhc2g6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LnNldExpbmVEYXNoKG1fZGFzaEFycmF5LCBtX2Rhc2hPZmZzZXQp
OwpAQCAtNTI0LDE0ICsyNTMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU2V0TGluZURhc2gmIGxpbmVEYXNoKQogICAgIHJldHVybiB0czsK
IH0KIAotU2V0TGluZUpvaW46OlNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0TGluZUpvaW4pCi0gICAgLCBtX2xpbmVKb2luKGxpbmVKb2luKQot
ewotfQotCi1TZXRMaW5lSm9pbjo6flNldExpbmVKb2luKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNl
dExpbmVKb2luOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5zZXRMaW5lSm9pbihtX2xpbmVKb2luKTsKQEAgLTU0MywxNCArMjY0LDYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVK
b2luJiBsaW5lSm9pbikKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldE1pdGVyTGltaXQ6OlNldE1p
dGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQpCi0gICAgLCBtX21pdGVyTGltaXQobWl0ZXJMaW1pdCkKLXsKLX0KLQotU2V0TWl0ZXJM
aW1pdDo6flNldE1pdGVyTGltaXQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0TWl0ZXJMaW1pdDo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0
TWl0ZXJMaW1pdChtX21pdGVyTGltaXQpOwpAQCAtNTYyLDI2ICsyNzUsMTEgQEAgc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldE1pdGVyTGltaXQm
IG1pdGVyTGltaXQpCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGVhclNoYWRvdzo6Q2xlYXJTaGFk
b3coKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xlYXJTaGFkb3cpCi17Ci19Ci0KLUNsZWFyU2hh
ZG93Ojp+Q2xlYXJTaGFkb3coKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xlYXJTaGFkb3c6OmFwcGx5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyU2hh
ZG93KCk7CiB9CiAKLUNsaXA6OkNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogSXRl
bShJdGVtVHlwZTo6Q2xpcCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGlwOjp+Q2xp
cCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwKG1fcmVjdCk7CkBAIC01OTMsMTQgKzI5MSw2
IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
bGlwJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91dDo6Q2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0KQotICAgICwgbV9y
ZWN0KHJlY3QpCi17Ci19Ci0KLUNsaXBPdXQ6On5DbGlwT3V0KCkgPSBkZWZhdWx0OwotCiB2b2lk
IENsaXBPdXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmNsaXBPdXQobV9yZWN0KTsKQEAgLTYxMiwxNCArMzAyLDYgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBPdXQmIGl0ZW0pCiAg
ICAgcmV0dXJuIHRzOwogfQogCi1DbGlwT3V0VG9QYXRoOjpDbGlwT3V0VG9QYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoKQotICAgICwgbV9w
YXRoKHBhdGgpCi17Ci19Ci0KLUNsaXBPdXRUb1BhdGg6On5DbGlwT3V0VG9QYXRoKCkgPSBkZWZh
dWx0OwotCiB2b2lkIENsaXBPdXRUb1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBPdXQobV9wYXRoKTsKQEAgLTYzMSwxNSArMzEz
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IENsaXBPdXRUb1BhdGgmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1DbGlwUGF0aDo6Q2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpDbGlwUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotICAgICwgbV93aW5kUnVsZSh3
aW5kUnVsZSkKLXsKLX0KLQotQ2xpcFBhdGg6On5DbGlwUGF0aCgpID0gZGVmYXVsdDsKLQogdm9p
ZCBDbGlwUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuY2xpcFBhdGgobV9wYXRoLCBtX3dpbmRSdWxlKTsKQEAgLTY1MiwxNiArMzI1LDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENs
aXBQYXRoJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcFRvRHJhd2luZ0NvbW1hbmRz
OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKLSAgICA6
IEl0ZW0oSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kcykKLSAgICAsIG1fZGVzdGluYXRp
b24oZGVzdGluYXRpb24pCi0gICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKLSAgICAsIG1f
ZHJhd2luZ0NvbW1hbmRzKFdURk1vdmUoZHJhd2luZ0NvbW1hbmRzKSkKLXsKLX0KLQotQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzOjp+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCkgPSBkZWZhdWx0OwotCiB2
b2lkIENsaXBUb0RyYXdpbmdDb21tYW5kczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGNvbnRleHQuY2xpcFRvRHJhd2luZ0NvbW1hbmRzKG1fZGVzdGluYXRp
b24sIG1fY29sb3JTcGFjZSwgWyZdIChHcmFwaGljc0NvbnRleHQmIGNsaXBwaW5nQ29udGV4dCkg
ewpAQCAtNjc4LDggKzM0MSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIGl0ZW0pCiB9CiAKIERyYXdH
bHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVmZmVyR2x5
cGgsIDEyOD4mJiBnbHlwaHMsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiBhZHZh
bmNlcywgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0dseXBocykKLSAg
ICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250KSkKKyAgICA6IG1fZm9udChtYWtlUmVm
UHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAgICAsIG1fZ2x5cGhzKFdURk1vdmUoZ2x5
cGhzKSkKICAgICAsIG1fYWR2YW5jZXMoV1RGTW92ZShhZHZhbmNlcykpCiAgICAgLCBtX2xvY2Fs
QW5jaG9yKGxvY2FsQW5jaG9yKQpAQCAtNjg5LDggKzM1MSw3IEBAIERyYXdHbHlwaHM6OkRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgVmVjdG9yPEdseXBoQnVmZmVyR2x5cGgsIDEyOD4mJiBn
bHlwaHMsCiB9CiAKIERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZv
bnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6RHJhd0dseXBocykKLSAgICAsIG1fZm9udChjb25zdF9jYXN0PEZvbnQmPihmb250KSkKKyAg
ICA6IG1fZm9udChtYWtlUmVmUHRyKGNvbnN0X2Nhc3Q8Rm9udCY+KGZvbnQpKSkKICAgICAsIG1f
bG9jYWxBbmNob3IobG9jYWxBbmNob3IpCiAgICAgLCBtX3Ntb290aGluZ01vZGUoc21vb3RoaW5n
TW9kZSkKIHsKQEAgLTcwMywxOSArMzY0LDE3IEBAIERyYXdHbHlwaHM6OkRyYXdHbHlwaHMoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHCiAg
ICAgY29tcHV0ZUJvdW5kcygpOwogfQogCi1EcmF3R2x5cGhzOjp+RHJhd0dseXBocygpID0gZGVm
YXVsdDsKLQogaW5saW5lIEdseXBoQnVmZmVyIERyYXdHbHlwaHM6OmdlbmVyYXRlR2x5cGhCdWZm
ZXIoKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIHJlc3VsdDsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRkKG1fZ2x5
cGhzW2ldLCBtX2ZvbnQuZ2V0KCksIG1fYWR2YW5jZXNbaV0sIEdseXBoQnVmZmVyOjpub09mZnNl
dCk7CisgICAgICAgIHJlc3VsdC5hZGQobV9nbHlwaHNbaV0sICptX2ZvbnQsIG1fYWR2YW5jZXNb
aV0sIEdseXBoQnVmZmVyOjpub09mZnNldCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9p
ZCBEcmF3R2x5cGhzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0g
ICAgY29udGV4dC5kcmF3R2x5cGhzKG1fZm9udCwgZ2VuZXJhdGVHbHlwaEJ1ZmZlcigpLCAwLCBt
X2dseXBocy5zaXplKCksIGFuY2hvclBvaW50KCksIG1fc21vb3RoaW5nTW9kZSk7CisgICAgY29u
dGV4dC5kcmF3R2x5cGhzKCptX2ZvbnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9nbHlw
aHMuc2l6ZSgpLCBhbmNob3JQb2ludCgpLCBtX3Ntb290aGluZ01vZGUpOwogfQogCiB2b2lkIERy
YXdHbHlwaHM6OmNvbXB1dGVCb3VuZHMoKQpAQCAtNzM1LDE0ICszOTQsOCBAQCB2b2lkIERyYXdH
bHlwaHM6OmNvbXB1dGVCb3VuZHMoKQogICAgIH0KIH0KIAotT3B0aW9uYWw8RmxvYXRSZWN0PiBE
cmF3R2x5cGhzOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdAotewot
ICAgIHJldHVybiBtX2JvdW5kczsKLX0KLQogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdHbHlwaHMmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3Rh
dGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICAvLyBGSVhNRTogZHVtcCBt
b3JlIHN0dWZmLgogICAgIHRzLmR1bXBQcm9wZXJ0eSgibG9jYWwtYW5jaG9yIiwgaXRlbS5sb2Nh
bEFuY2hvcigpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImFuY2hvci1wb2ludCIsIGl0ZW0uYW5j
aG9yUG9pbnQoKSk7CkBAIC03NTEsMTcgKzQwNCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3R2x5cGhzJiBpdGVtKQogICAgIHJldHVy
biB0czsKIH0KIAotRHJhd0ltYWdlOjpEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkRyYXdJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3Rp
bmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9pbWFn
ZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd0ltYWdl
Ojp+RHJhd0ltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ltYWdlKG1faW1h
Z2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291cmNlLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25z
KTsKQEAgLTc2OSwyNiArNDExLDEyIEBAIHZvaWQgRHJhd0ltYWdlOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3SW1hZ2UmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImlt
YWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInNvdXJjZS1yZWN0Iiwg
aXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0LXJlY3QiLCBpdGVtLmRl
c3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1RpbGVkSW1hZ2U6OkRyYXdU
aWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZSkK
LSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQot
ICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKLSAgICAs
IG1fc3BhY2luZyhzcGFjaW5nKQotICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBh
aW50aW5nT3B0aW9ucykKLXsKLX0KLQotRHJhd1RpbGVkSW1hZ2U6On5EcmF3VGlsZWRJbWFnZSgp
ID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3VGlsZWRJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd1RpbGVkSW1hZ2UobV9pbWFnZS5n
ZXQoKSwgbV9kZXN0aW5hdGlvbiwgbV9zb3VyY2UsIG1fdGlsZVNpemUsIG1fc3BhY2luZywgbV9p
bWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03OTYsNyArNDI0LDYgQEAgdm9pZCBEcmF3VGlsZWRJ
bWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkSW1hZ2Um
IGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVt
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoInNvdXJjZS1wb2ludCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKQEAgLTgwNSwyMCArNDMy
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdUaWxlZEltYWdlJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotRHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6OkRyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6
ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVs
ZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25z
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlKQotICAg
ICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1fZGVzdGluYXRpb24oZGVzdGluYXRpb24pCi0gICAg
LCBtX3NvdXJjZShzb3VyY2UpCi0gICAgLCBtX3RpbGVTY2FsZUZhY3Rvcih0aWxlU2NhbGVGYWN0
b3IpCi0gICAgLCBtX2hSdWxlKGhSdWxlKQotICAgICwgbV92UnVsZSh2UnVsZSkKLSAgICAsIG1f
aW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdU
aWxlZFNjYWxlZEltYWdlOjp+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVz
dGluYXRpb24sIG1fc291cmNlLCBtX3RpbGVTY2FsZUZhY3RvciwgbV9oUnVsZSwgbV92UnVsZSwg
bV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC04MjYsMjUgKzQzOSwxMiBAQCB2b2lkIERyYXdU
aWxlZFNjYWxlZEltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
VGlsZWRTY2FsZWRJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmlt
YWdlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic291cmNlLXJlY3QiLCBpdGVtLnNvdXJjZSgp
KTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0uZGVzdGluYXRpb24oKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1ZmZlcihS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkRyYXdJbWFnZUJ1ZmZlcikKLSAgICAsIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICAsIG1fZGVzdGluYXRpb25SZWN0KGRl
c3RSZWN0KQotICAgICwgbV9zcmNSZWN0KHNyY1JlY3QpCi0gICAgLCBtX29wdGlvbnMob3B0aW9u
cykKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotfQotCi1E
cmF3SW1hZ2VCdWZmZXI6On5EcmF3SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJh
d0ltYWdlQnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwpAQCAtODU3LDE2ICs0NTcsMTQgQEAgdm9pZCBEcmF3SW1hZ2VCdWZm
ZXI6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGltYWcKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdJbWFnZUJ1ZmZlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3RlLXJlc291
cmNlLWlkZW50aWZpZXIiLCBpdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInJlbmRlcmluZy1yZXNvdXJjZS1pZGVudGlmaWVyIiwgaXRlbS5y
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3Vy
Y2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0
IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBEcmF3TmF0
aXZlSW1hZ2U6OkRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZSkKLSAgICAsIG1f
aW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICwgbV9pbWFnZVNpemUoaW1h
Z2VTaXplKQogICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCiAgICAgLCBtX3NyY1Jl
Y3Qoc3JjUmVjdCkKQEAgLTg3NCw4ICs0NzIsNiBAQCBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRp
dmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaQog
ewogfQogCi1EcmF3TmF0aXZlSW1hZ2U6On5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFnZVNpemUs
IG1fZGVzdGluYXRpb25SZWN0LCBtX3NyY1JlY3QsIG1fb3B0aW9ucyk7CkBAIC04ODMsNyArNDc5
LDYgQEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxj
b25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYu
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBA
IC04OTEsOCArNDg2LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIH0KIAogRHJhd1BhdHRlcm46OkRy
YXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3UGF0dGVybikKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdl
KGltYWdlKQogICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCiAgICAg
LCBtX3RpbGVSZWN0KHRpbGVSZWN0KQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKQEAg
LTkwMiw4ICs0OTYsNiBAQCBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlYwogewogfQogCi1EcmF3UGF0
dGVybjo6fkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXR0ZXJuOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UGF0
dGVybihtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5U
cmFuc2Zvcm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcHRpb25zKTsKQEAgLTkxMSw3ICs1MDMs
NiBAQCB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3UGF0dGVybiYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3
aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdl
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRl
cm5UcmFuc2Zvcm0oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRp
bGVSZWN0KCkpOwpAQCAtOTIxLDE1ICs1MTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1EcmF3UmVjdDo6RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3Qp
Ci0gICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNr
bmVzcykKLXsKLX0KLQotRHJhd1JlY3Q6On5EcmF3UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBE
cmF3UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7CkBAIC05MzcsMjEgKzUx
OSwxMSBAQCB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3UmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNr
bmVzcygpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdMaW5lOjpEcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGluZSkKLSAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAs
IG1fcG9pbnQyKHBvaW50MikKLXsKLX0KLQotRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVs
dDsKLQogT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtOTY2LDE1
ICs1MzgsMTMgQEAgdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0xpbmUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBv
aW50MSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsK
ICAgICByZXR1cm4gdHM7CiB9CiAKIERyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFu
Y2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3
TGluZXNGb3JUZXh0KQotICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAg
OiBtX2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKICAgICAsIG1fbG9jYWxBbmNob3IobG9j
YWxBbmNob3IpCiAgICAgLCBtX3dpZHRocyh3aWR0aHMpCiAgICAgLCBtX3RoaWNrbmVzcyh0aGlj
a25lc3MpCkBAIC05ODMsOCArNTUzLDYgQEAgRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFMKIHsKIH0K
IAotRHJhd0xpbmVzRm9yVGV4dDo6fkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywg
bV93aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwpAQCAtMTAwNCw3ICs1NzIsNiBA
QCBPcHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JUZXh0JiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMu
ZHVtcFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7CkBAIC0xMDE2LDE1ICs1ODMsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d0xpbmVzRm9yVGV4dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotICAgICwgbV9yZWN0KHJlY3QpCi0g
ICAgLCBtX3N0eWxlKHN0eWxlKQotewotfQotCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjp+
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgY29udGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcmVjdCwgbV9zdHlsZSk7
CkBAIC0xMDM3LDE5ICs1OTUsMTAgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQKIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJh
d2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3Qo
KSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdFbGxpcHNl
KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLURyYXdFbGxpcHNlOjp+RHJhd0VsbGlwc2Uo
KSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1fcmVjdCk7CkBAIC0x
MDYxLDE0ICs2MTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3
UGF0aDo6RHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3UGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1EcmF3UGF0aDo6fkRy
YXdQYXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAjaWYgVVNFKENHKQpAQCAtMTA3OCwyNCArNjE5LDEyIEBA
IHZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICNl
bmRpZgogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd1BhdGgmIGl0ZW0pCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBp
dGVtLnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgLy8gRklY
TUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdGb2N1
c1JpbmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJ
dGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1f
d2lkdGgod2lkdGgpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgLCBtX2NvbG9yKGNvbG9y
KQotewotfQotCi1EcmF3Rm9jdXNSaW5nUGF0aDo6fkRyYXdGb2N1c1JpbmdQYXRoKCkgPSBkZWZh
dWx0OwotCiB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0
aCwgbV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtMTExMCw3ICs2MzksNiBAQCBPcHRpb25hbDxGbG9h
dFJlY3Q+IERyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKIC8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
aCIsIGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KICAgICB0
cy5kdW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoIm9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOwpAQCAtMTExOSwxNiArNjQ3LDEzIEBAIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNS
aW5nUGF0aCYgaXRlbSkKIH0KIAogRHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVj
dHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJh
d0ZvY3VzUmluZ1JlY3RzKQotICAgICwgbV9yZWN0cyhyZWN0cykKKyAgICA6IG1fcmVjdHMocmVj
dHMpCiAgICAgLCBtX3dpZHRoKHdpZHRoKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwg
bV9jb2xvcihjb2xvcikKIHsKIH0KIAotRHJhd0ZvY3VzUmluZ1JlY3RzOjp+RHJhd0ZvY3VzUmlu
Z1JlY3RzKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3VzUmlu
ZyhtX3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7CkBAIC0xMTQ1LDcgKzY3MCw2
IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zCiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiB7Ci0g
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5k
dW1wUHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
IndpZHRoIiwgaXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0
ZW0ub2Zmc2V0KCkpOwpAQCAtMTE1MywxNCArNjc3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkK
ICAgICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSZWN0OjpGaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAgLCBtX3Jl
Y3QocmVjdCkKLXsKLX0KLQotRmlsbFJlY3Q6On5GaWxsUmVjdCgpID0gZGVmYXVsdDsKLQogdm9p
ZCBGaWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuZmlsbFJlY3QobV9yZWN0KTsKQEAgLTExNjgsMjAgKzY4NCwxMCBAQCB2b2lkIEZp
bGxSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRl
bSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwog
ICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7
CiB9CiAKLUZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpGaWxsUmVjdFdpdGhDb2xvcikKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihj
b2xvcikKLXsKLX0KLQotRmlsbFJlY3RXaXRoQ29sb3I6On5GaWxsUmVjdFdpdGhDb2xvcigpID0g
ZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9y
KTsKQEAgLTExODksMjEgKzY5NSwxNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhDb2xvciYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
ImNvbG9yIiwgaXRlbS5jb2xvcigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIEZpbGxSZWN0V2l0
aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhHcmFkaWVudCkKLSAgICAsIG1fcmVjdChyZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCiAgICAg
LCBtX2dyYWRpZW50KGdyYWRpZW50KQogewogfQogCi1GaWxsUmVjdFdpdGhHcmFkaWVudDo6fkZp
bGxSZWN0V2l0aEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0aEdyYWRp
ZW50OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4
dC5maWxsUmVjdChtX3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOwpAQCAtMTIxMSwyMyArNzEzLDEx
IEBAIHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IEZpbGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGxvZyBncmFk
aWVudC4KICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0
dXJuIHRzOwogfQogCi1GaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6Rmls
bENvbXBvc2l0ZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9y
KQotICAgICwgbV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQot
RmlsbENvbXBvc2l0ZWRSZWN0Ojp+RmlsbENvbXBvc2l0ZWRSZWN0KCkgPSBkZWZhdWx0OwotCiB2
b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2Js
ZW5kTW9kZSk7CkBAIC0xMjM1LDcgKzcyNSw2IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0Ojph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0
ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21w
b3NpdGUtb3BlcmF0aW9uIiwgaXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKQEAgLTEyNDMsMTYg
KzczMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxs
Um91bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAg
LCBtX2NvbG9yKGNvbG9yKQotICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1G
aWxsUm91bmRlZFJlY3Q6On5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmls
bFJvdW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7
CkBAIC0xMjYwLDIzICs3MzksMTIgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKIHsKLSAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQ
cm9wZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5
KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2Rl
IiwgaXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSkKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhv
bGVSZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU6On5GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9yZWN0LCBtX3JvdW5k
ZWRIb2xlUmVjdCwgbV9jb2xvcik7CkBAIC0xMjg0LDcgKzc1Miw2IEBAIHZvaWQgRmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAog
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5y
ZWN0KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJv
dW5kZWRIb2xlUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xv
cigpKTsKQEAgLTEyOTMsMTQgKzc2MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlCiAKICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotRmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQ
YXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKLSAgICA6IERyYXdpbmdJdGVtKEl0
ZW1UeXBlOjpGaWxsSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19
Ci0KLUZpbGxJbmxpbmVQYXRoOjp+RmlsbElubGluZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RmlsbElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgoKSk7CkBAIC0xMzA4LDIxICs3NjcsMTIgQEAgdm9p
ZCBGaWxsSW5saW5lUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmls
bElubGluZVBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CiAKLUZpbGxQYXRoOjpGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0
ZW0oSXRlbVR5cGU6OkZpbGxQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUZpbGxQ
YXRoOjp+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0
aCk7CkBAIC0xMzMwLDE5ICs3ODAsMTAgQEAgdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbFBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGlj
X2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBh
dGgiLCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsRWxsaXBzZTo6Rmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OkZpbGxFbGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxFbGxpcHNl
Ojp+RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxFbGxpcHNl
KG1fcmVjdCk7CkBAIC0xMzUwLDE0ICs3OTEsMTIgQEAgdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB7Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBQdXRJ
bWFnZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3Jj
UmVjdChzcmNSZWN0KQorICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2lu
dChkZXN0UG9pbnQpCiAgICAgLCBtX2ltYWdlRGF0YShpbWFnZURhdGEuZGVlcENsb25lKCkpIC8v
IFRoaXMgY29weSBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNz
IG9mIHB1dEltYWdlRGF0YSgpLgogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAg
LTEzNjYsOCArODA1LDcgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJgogfQogCiBQdXRJbWFnZURh
dGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8
SW1hZ2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAg
IDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3JjUmVjdChz
cmNSZWN0KQorICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0
UG9pbnQpCiAgICAgLCBtX2ltYWdlRGF0YShXVEZNb3ZlKGltYWdlRGF0YSkpCiAgICAgLCBtX2lu
cHV0Rm9ybWF0KGlucHV0Rm9ybWF0KQpAQCAtMTM3NSw5ICs4MTMsNyBAQCBQdXRJbWFnZURhdGE6
OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1h
Z2VEYXRhPiYmCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6flB1dEltYWdlRGF0YSgpID0gZGVmYXVs
dDsKLQotdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdh
dGUuCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzg1LDcgKzgyMSw2IEBAIHZvaWQg
UHV0SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBp
dGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7
CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZURhdGFTaXplIiwgaXRlbS5pbWFnZURhdGEoKS5z
aXplKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgpKTsK
QEAgLTEzOTQsMzMgKzgyOSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0K
IAotUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoTWVk
aWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bikpOwotfQotCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6OmNy
ZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVk
aWEoaWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKLX0KLQogUGFpbnRGcmFtZUZvck1lZGlhOjpQ
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVk
aWEpCi0gICAgLCBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKLSAgICAsIG1fZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJh
bWVGb3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIDogbV9pZGVu
dGlmaWVyKHBsYXllci5pZGVudGlmaWVyKCkpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0
aW9uKQogewogfQogCi1QYWludEZyYW1lRm9yTWVkaWE6On5QYWludEZyYW1lRm9yTWVkaWEoKSA9
IGRlZmF1bHQ7Ci0KLXZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdAorTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBQYWludEZyYW1lRm9yTWVk
aWE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhh
bmRsZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQy
OCwyMCArODQzLDEwIEBAIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgUGFpbnRGcmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0aW5hdGlvbiIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1T
dHJva2VSZWN0OjpTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3Jl
Y3QocmVjdCkKLSAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVj
dDo6flN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tl
UmVjdDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBG
bG9hdFJlY3QgYm91bmRzID0gbV9yZWN0OwpAQCAtMTQ1Niw3ICs4NjEsNiBAQCB2b2lkIFN0cm9r
ZVJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0
ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
ICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpA
QCAtMTQ3OSwxOSArODgzLDEwIEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNf
Y2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0
aCIsIGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRl
bVR5cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tl
RWxsaXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVj
dD4gU3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tl
VGhpY2tuZXNzKCk7CkBAIC0xNTA4LDcgKzkwMyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsK
LSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBA
IC0xNTMyLDM3ICs5MjYsMTIgQEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRz
IDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tl
SW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERh
dGEpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAs
IG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJ
bmxpbmVQYXRoKCkgPSBkZWZhdWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAKLVN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERy
YXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19
Ci0KLVN0cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlw
ZTo6Q2xlYXJSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNs
ZWFyUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpA
QCAtMTU3MCwxOSArOTM5LDEwIEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3Qi
LCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxh
eWVyOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShv
cGFjaXR5KQotewotfQotCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVu
Y3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7CkBAIC0xNTkwLDU3ICs5NTAsMjggQEAgdm9pZCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBCZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0
PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5
IiwgaXRlbS5vcGFjaXR5KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5
TGF5ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpFbmRUcmFuc3BhcmVuY3lMYXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5F
bmRUcmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lM
YXllcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tl
UGF0dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5
U3Ryb2tlUGF0dGVybikKLXsKLX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQ
YXR0ZXJuKCkgPSBkZWZhdWx0OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQ
YXR0ZXJuKCk7CiB9CiAKLUFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAg
IDogSXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0
dGVybjo6fkFwcGx5RmlsbFBhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0
dGVybjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuYXBwbHlGaWxsUGF0dGVybigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVt
KEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3Rvcihz
Y2FsZUZhY3RvcikKLXsKLX0KLQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6
YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NTIsNyArOTgzLDcgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5
RGV2aWNlU2NhbGVGYWN0b3ImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkK
K3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0
eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRz
IDw8ICJzYXZlIjsgYnJlYWs7CkBAIC0xNzIzLDE3MiArMTA1NCwxNzAgQEAgc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQog
ICAgIHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgSXRlbSYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIEl0ZW1IYW5kbGUgaXRlbSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3Vw
KHRzKTsKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFj
cm8gd2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVz
CiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0
ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8VHJhbnNsYXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29u
Y2F0ZW5hdGVDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNU
TT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdy
YWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJv
a2VUaGlja25lc3M+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlj
a25lc3M+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0
ZW0uZ2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExp
bmVEYXNoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFNldExpbmVKb2luPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRN
aXRlckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBP
dXQ+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xp
cE91dFRvUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBh
dGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8Q2xpcFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
R2x5cGhzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERy
YXdUaWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVk
SW1hZ2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFn
ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVy
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd05hdGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2
ZUltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVy
bjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVt
KTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3
TGluZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0
cyA8PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRl
bS5nZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBz
ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
RHJhd0ZvY3VzUmluZ1JlY3RzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZp
bGxSZWN0V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RX
aXRoQ29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVu
dD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50Pigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAg
ICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
Um91bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93
bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxs
SW5saW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAg
ICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxp
cHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8
UHV0SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWlu
dEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRp
YT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAg
dHMgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0
PFN0cm9rZVJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9E
QVRBKQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8
IGRvd25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdl
dDxTdHJva2VJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBk
b3duY2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ry
b2tlRWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxDbGVhclJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdp
blRyYW5zcGFyZW5jeUxheWVyPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpBcHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURl
dmljZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5v
IGFkZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDc5
NzU5OGU3MjFkNTYyMzFkZmYwNjQ5YWE1NzMxNzQzYTJjZWIwMzUuLjJhNTE4YmIyZTAwNGIxM2Rh
M2QxOWU2ZmE2ZDg1ZTkxZjUzOTk2ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aApAQCAtNTEsMzIwICs1MSwxNjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIFNhdmUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERy
YXdpbmdJdGVtKEl0ZW1UeXBlKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OlNhdmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBm
YWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50
KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJv
b2wgZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVu
dCk7IH0KLQotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBp
biBsb2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0
cmFuc2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJ
bWFnZURhdGEpIG9wZXJhdGUgaW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMs
IG92ZXJyaWRlIHRoaXMgbWV0aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4g
dmFsdWUgbmVlZHMgdG8gaW5jbHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywg
ZXRjLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2lu
Z0l0ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93
cyBhbmQgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIFJlc3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflNhdmUoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
U2F2ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2F2ZSgpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNv
bnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+
IFNhdmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19
Ci0KLWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflJlc3RvcmUoKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBSZXN0b3JlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNv
ZGVyJikKLXsKLSAgICByZXR1cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVi
bGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAg
OiBtX3goeCkKKyAgICAgICAgLCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+VHJhbnNsYXRlKCk7Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9
CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29k
ZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94Owot
ICAgIGZsb2F0IG1feTsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0
IG1feSB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0
ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7
Ci0gICAgZW5jb2RlciA8PCBtX3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8VHJhbnNsYXRlPj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICBPcHRpb25hbDxmbG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7
Ci0gICAgZGVjb2RlciA+PiB5OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFz
cyBSb3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmds
ZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+Um90YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5nbGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPFJvdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUm90YXRlKGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CiAKLSAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBm
bG9hdCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KLXZvaWQgUm90YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fYW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8Um90YXRlPj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxmbG9hdD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBp
ZiAoIWFuZ2xlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJv
dGF0ZTo6Y3JlYXRlKCphbmdsZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0gewor
Y2xhc3MgU2NhbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTY2FsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6
ZShzaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBj
b25zdCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAK
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAg
ICBGbG9hdFNpemUgbV9zaXplOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
U2NhbGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9zaXplOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxl
Pj4gU2NhbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0
U2l6ZT4gc2NhbGU7Ci0gICAgZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNj
YWxlKTsKLX0KLQotY2xhc3MgU2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6U2V0Q1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7
CisKKyAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAg
IDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2V0Q1RNKG1hdHJpeCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgflNldENUTSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNl
dENUTTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBt
X3RyYW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxT
ZXRDVE0+PiBTZXRDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFs
PEFmZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwot
ICAgIGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIFNldENUTTo6Y3JlYXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0
ZUNUTSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBtYXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpDb25jYXRlbmF0ZUNUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOworCisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCisgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNh
dGVuYXRlQ1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNm
b3JtOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFu
c2Zvcm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0
ZW5hdGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0
cmFuc2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0KLSAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0K
LQotY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
SW5saW5lRmlsbEdyYWRpZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1U
eXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZp
bGxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJ
bmxpbmUoY29uc3QgR3JhZGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFk
aWVudCgpOwotCi0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdy
YWRpZW50Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNl
dElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291
bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBj
b25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwg
dWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNldElubGluZUZpbGxHcmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbiwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAg
IH0KLQorICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9y
U3RvcENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29u
c3QgR3JhZGllbnQ6OkRhdGEmLAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29s
b3JTdG9wQ291bnQpOwogCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50
Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8
R3JhZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CisKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAg
ICBTUkdCQTx1aW50OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGll
bnQ6OkRhdGEgbV9kYXRhOwpAQCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWlu
dDhfdCBtX2NvbG9yU3RvcENvdW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50
OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIg
PDwgbV9vZmZzZXRzW2ldOwotICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsg
bV9jb2xvcnNbaV0gfS52YWx1ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAg
ZW5jb2RlciA8PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8
IG1fc3ByZWFkTWV0aG9kOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291
bnQ7Ci0gICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENv
dW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BD
b3VudCA+IG1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhf
dD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkg
PCAqY29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0
OwotICAgICAgICBkZWNvZGVyID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90
PiBjb2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikK
LSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0g
YXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tp
XSA9ICpvZmZzZXQ7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7
Ci0gICAgZGVjb2RlciA+PiBkYXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFj
ZVRyYW5zZm9ybWF0aW9uOwotICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0
aW9uOwotICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNw
cmVhZE1ldGhvZDsKLSAgICBkZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVh
ZE1ldGhvZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNl
dElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkg
fTsKLX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3Mg
U2V0SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFNldElubGluZUZpbGxDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxD
b2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4g
ZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JH
QkE8dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDog
bV9jb2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAorcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6
UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7
Ci0gICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFz
U1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxp
bmVTdHJva2VDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9y
IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9r
ZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3Qg
eyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNv
ZGVyJik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IGZhbHNlOwogCi1wcml2YXRlOgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4
X3Q+IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VD
b2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xv
ckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRh
dGE7Ci19OworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9
OyB9CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9y
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tl
ZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFNldElubGluZVN0cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAg
ICBkZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQogCi0gICAgcmV0dXJuIFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNr
ZWRDb2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4
X3Q+IG1fY29sb3JEYXRhOworfTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNr
bmVzcyk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3Mo
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OwogCi0gICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0
cm9rZVRoaWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpT
ZXRTdHJva2VUaGlja25lc3MpCi0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAg
ICAgICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhp
Y2tuZXNzIHsgMCB9OwotfTsKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X3RoaWNrbmVzczsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VU
aGlja25lc3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIg
PDwgbV90aGlja25lc3M7Ci19CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlj
a25lc3M+PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPGZsb2F0PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7
Ci0gICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJu
IFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAg
ICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3Rh
dGU+IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3Rh
dGljIFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
JiBzdGF0ZUNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0
YXRlKHN0YXRlQ2hhbmdlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVf
RVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAg
CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZTsgfQogCkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
IAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0
YXRlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsg
fQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UgbV9zdGF0ZTsKIH07CiAKQEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgT3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+
IGNoYW5nZUZsYWdzOwogICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYy
MCw1NSBAQCBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNl
dFN0YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07
CiB9CiAKLWNsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2Fw
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxp
bmVDYXApCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisK
KyAgICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGlu
ZUNhcCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGlu
ZUNhcCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAo
KTsKLSAgICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNl
dExpbmVDYXA+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIFNldExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitw
cml2YXRlOgogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+
Ci1PcHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+
PiBsaW5lQ2FwOwotICAgIGlmICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFz
cyBTZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBk
YXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
ZGFzaEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hB
cnJheSkKKyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0K
ICAgICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFy
cmF5OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNl
dDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
U2V0TGluZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRl
OgogICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9
OwpAQCAtOTcwLDcgKzY4MSw3IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PFNldExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRh
c2hBcnJheTsKQEAgLTk4MiwyMTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNo
Pj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9m
ZnNldCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5l
RGFzaDo6Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRh
c2hBcnJheSwgKmRhc2hPZmZzZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGlj
IEl0ZW0geworY2xhc3MgU2V0TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
TGluZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBs
aW5lSm9pbikKKyAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVK
b2luIGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNv
ZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2lu
KExpbmVKb2luKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAg
TGluZUpvaW4gbV9saW5lSm9pbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFNldExpbmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fbGluZUpvaW47Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGlu
ZUpvaW47Ci0gICAgaWYgKCFsaW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNz
IFNldE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1p
dGVyTGltaXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAg
IFNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQo
bWl0ZXJMaW1pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVy
TGltaXQobGltaXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRN
aXRlckxpbWl0KCk7Ci0KICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9t
aXRlckxpbWl0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAg
ICBXRUJDT1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpu
dWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1p
dGVyTGltaXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0
PiBtaXRlckxpbWl0OwotICAgIGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVy
TGltaXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0
ZXJMaW1pdDo6Y3JlYXRlKCptaXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxDbGVhclNoYWRvdz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENsZWFyU2hhZG93KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5D
bGVhclNoYWRvdygpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBDbGVhclNoYWRvdygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAK
LXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8
Q2xlYXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVy
biBDbGVhclNoYWRvdzo6Y3JlYXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5n
SXRlbT8KLWNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJh
d2luZyBpdGVtPworY2xhc3MgQ2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBj
cmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlw
KHJlY3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7Cisg
ICAgY29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAg
ICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNv
ZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQg
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PENsaXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENsaXBPdXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkNsaXBPdXQoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBk
ZWNvZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBDbGlwT3V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxDbGlwT3V0Pj4gQ2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBp
ZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xp
cE91dDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJ
dGVtIHsKK2NsYXNzIENsaXBPdXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xp
cE91dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRo
JiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9Q
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAg
IH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRU
b1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRl
OgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToK
KyAgICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAw
LDM3ICs4MzQsNDcgQEAgdm9pZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlw
T3V0VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxDbGlwT3V0VG9QYXRoPiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAg
ICBpZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
Q2xpcE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0
aCkgfX07CiB9CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBh
dGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3
aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdp
bmRSdWxlKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lu
ZFJ1bGUod2luZFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlw
UGF0aChwYXRoLCB3aW5kUnVsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlw
UGF0aCgpOworICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxl
KQorICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUp
CisgICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBt
X3BhdGg7IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1
bGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PENsaXBQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVy
JikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENs
aXBQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2
YXRlOgorICAgIFBhdGggbV9wYXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBA
IC0xMjQyLDcgKzg4Niw3IEBAIHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQ
YXRoPj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBh
dGg+IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQ
YXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCw1MCBAQCBP
cHRpb25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiAgICAgaWYgKCF3aW5kUnVsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBDbGlwUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7
eyBXVEZNb3ZlKCpwYXRoKSwgKndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5n
Q29tbWFuZHMgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5
TGlzdCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3Bs
YXlMaXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGlu
YXRpb24pCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9k
cmF3aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQorICAgIHsKKyAgICB9CisK
KyAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBv
dGhlcikKKyAgICAgICAgOiBtX2Rlc3RpbmF0aW9uKG90aGVyLm1fZGVzdGluYXRpb24pCisgICAg
ICAgICwgbV9jb2xvclNwYWNlKG90aGVyLm1fY29sb3JTcGFjZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0aW5hdGlvbiwgY29s
b3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKSk7CisgICAgICAgIC8vIEZJWE1FOiBD
b3B5IG1fZHJhd2luZ0NvbW1hbmRzLgogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlw
VG9EcmF3aW5nQ29tbWFuZHMoKTsKKyAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIG9wZXJhdG9y
PShjb25zdCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9k
ZXN0aW5hdGlvbiA9IG90aGVyLm1fZGVzdGluYXRpb247CisgICAgICAgIG1fY29sb3JTcGFjZSA9
IG90aGVyLm1fY29sb3JTcGFjZTsKKyAgICAgICAgLy8gRklYTUU6IENvcHkgbV9kcmF3aW5nQ29t
bWFuZHMuCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAKICAgICBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAg
IGNvbnN0IERpc3BsYXlMaXN0JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdpbmdDb21tYW5kczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xv
clNwYWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAg
IENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1h
bmRzOwpAQCAtMTI4OCwxMSArOTUyLDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGlu
YXRpb247CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2Ry
YXdpbmdDb21tYW5kczsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBp
bi1tZW1vcnkgZGlzcGxheSBsaXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRz
PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5h
dGlvbjsKQEAgLTEzMDQsMjcgKzk2OCwxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0Nv
bW1hbmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAg
IGlmICghY29sb3JTcGFjZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9w
dGlvbmFsPERpc3BsYXlMaXN0PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3
aW5nQ29tbWFuZHM7Ci0gICAgaWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUo
KmRlc3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkg
bGlzdHMuCisgICAgRGlzcGxheUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAq
ZGVzdGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9
CiAKLWNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0ds
eXBocyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYg
bG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0
YXRpYyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlw
aEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAx
Mjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0dseXBocyhmb250LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBs
b2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgfkRyYXdHbHlwaHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29u
c3QgeyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5ODYsMjEgQEAgcHVi
bGljOgogICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBj
b25zdCB7IHJldHVybiBtX2dseXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29k
ZShEZWNvZGVyJik7CiAKLXByaXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVk
IGNvdW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUp
OwogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlw
aEJ1ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwg
Y29uc3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAg
IHZvaWQgY29tcHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJv
dW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHM7IH0KIAorcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBH
bHlwaEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4g
bV9mb250OworICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVy
R2x5cGgsIDEyOD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4
PiBtX2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArMTAxMSw3
IEBAIHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBEcmF3R2x5cGhzOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1fZm9udDsK
KyAgICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1fZm9udCk7CiAgICAgZW5jb2RlciA8PCBtX2dseXBo
czsKICAgICBlbmNvZGVyIDw8IG1fYWR2YW5jZXM7CiAgICAgZW5jb2RlciA8PCBtX2xvY2FsQW5j
aG9yOwpAQCAtMTM2Niw3ICsxMDE5LDcgQEAgdm9pZCBEcmF3R2x5cGhzOjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxSZWY8Rm9udD4+IGZvbnQ7CiAgICAgZGVjb2RlciA+PiBmb250OwpA
QCAtMTM5NiwzMiArMTA0OSwzNiBAQCBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdHbHlw
aHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghc21vb3RoaW5nTW9kZSkKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3R2x5cGhzOjpjcmVh
dGUoZm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwgKmxv
Y2FsQW5jaG9yLCAqc21vb3RoaW5nTW9kZSk7CisgICAgcmV0dXJuIHt7IGZvbnQtPmdldCgpLCBX
VEZNb3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hvciwgKnNtb290
aGluZ01vZGUgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBEcmF3SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlPiBj
cmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRp
bmdPcHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6RHJhd0ltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7
CisKKyAgICBEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IGltYWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2Up
CisgICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2UoKTsKLQogICAgIGNvbnN0IEltYWdlJiBp
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9hdFJlY3Qgc291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJlY3QgZGVzdGluYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBkZWNvZGUoRGVjb2Rl
ciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxEcmF3SW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVz
dGluYXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bjsgfQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhN
RTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3Mu
IFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBAIC0xNDQxLDcgKzEwOTgsNyBAQCB2
b2lkIERyYXdJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZT4gRHJhd0ltYWdlOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1h
Z2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE0NjMsMTcgKzExMjAs
MTQgQEAgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5k
bGUtPmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9ucyk7
CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJj
ZSwgKmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRJbWFnZSA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRJbWFnZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRJbWFnZSgpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IElt
YWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9hdFBv
aW50IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC0xNDgyLDE2ICsxMTM2
LDI1IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X3RpbGVTaXplOyB9CiAgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nw
YWNpbmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPERyYXdUaWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBEcmF3VGlsZWRJbWFn
ZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlv
bnMpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3RpbGVT
aXplKHRpbGVTaXplKQorICAgICAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAgICAgICAsIG1f
aW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgIH0K
IAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBkZWNvZGUoRGVj
b2RlciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBG
SVhNRTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jl
c3MuIFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9k
ZXN0aW5hdGlvbjsKICAgICBGbG9hdFBvaW50IG1fc291cmNlOwpAQCAtMTUxNCw3ICsxMTc3LDcg
QEAgdm9pZCBEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1hZ2U+
PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3
VGlsZWRJbWFnZT4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGlt
YWdlSGFuZGxlOwpAQCAtMTU0NiwzMiArMTIwOSwzOSBAQCBPcHRpb25hbDxSZWY8RHJhd1RpbGVk
SW1hZ2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpk
ZXN0aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdlUGFpbnRpbmdP
cHRpb25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9u
LCAqc291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07
CiB9CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERy
YXdUaWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwor
CisgICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZS
dWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisg
ICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0
aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3RpbGVTY2FsZUZh
Y3Rvcih0aWxlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAgICAg
LCBtX3ZSdWxlKHZSdWxlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
VGlsZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFj
dG9yLCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKLQogICAgIGNv
bnN0IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBG
bG9hdFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJl
Y3QgZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2Fs
ZWRJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2Us
IGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUs
IEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1h
Z2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0
byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0
UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE1OTYsNyAr
MTI2Niw3IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERy
YXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IERyYXdUaWxlZFNjYWxl
ZEltYWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhh
bmRsZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE2MzEs
MTggKzEzMDEsMjMgQEAgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1Rp
bGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWltYWdlUGFp
bnRpbmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJu
IERyYXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3Rp
bmF0aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBh
aW50aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0
aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCAqaW1hZ2VQ
YWludGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZUJ1ZmZlciA6IHB1YmxpYyBE
cmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8RHJhd0ltYWdlQnVmZmVyPiBjcmVhdGUoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd0ltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQorICAgICAgICA6IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAg
ICAgICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsK
LQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQog
ICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBG
bG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJl
Y3Q7IH0KQEAgLTE2NTMsNzYgKzEzMjgsMzggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IGRlY29kZShE
ZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ltYWdlQnVmZmVy
KFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7
Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBn
bG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIEZsb2F0
UmVjdCBtX2Rlc3RpbmF0aW9uUmVjdDsKICAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OwogICAgIElt
YWdlUGFpbnRpbmdPcHRpb25zIG1fb3B0aW9uczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Ci12b2lkIERyYXdJbWFnZUJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKLSAgICBl
bmNvZGVyIDw8IG1fZGVzdGluYXRpb25SZWN0OwotICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0Owot
ICAgIGVuY29kZXIgPDwgbV9vcHRpb25zOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgot
T3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyPiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgZGVjb2RlciA+PiByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgaWYgKCFyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFk
ZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gc291cmNlOwotICAgIGRlY29kZXIgPj4gc291cmNlOwotICAgIGlmICghc291
cmNlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8SW1hZ2VQ
YWludGluZ09wdGlvbnM+IG9wdGlvbnM7Ci0gICAgZGVjb2RlciA+PiBvcHRpb25zOwotICAgIGlm
ICghb3B0aW9ucykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK2NsYXNzIERyYXdOYXRp
dmVJbWFnZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdp
bmdJdGVtID0gdHJ1ZTsKIAotICAgIHJldHVybiBEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSgqcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpvcHRpb25z
KTsKLX0KKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CiAKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKSk7Ci0gICAgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zcmNSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Ny
Y1JlY3Q7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9kZXN0aW5hdGlvblJlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvblJlY3Q7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gZGVj
b2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZl
SW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3Rp
bmF0aW9uUmVjdDsgfQotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAgICBGbG9hdFNp
emUgbV9pbWFnZVNpemU7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwpAQCAtMTc0
MSw3ICsxMzc4LDcgQEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERy
YXdOYXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CitPcHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8TmF0aXZlSW1hZ2VQdHI+IGltYWdlOwogICAg
IGRlY29kZXIgPj4gaW1hZ2U7CkBAIC0xNzY4LDE3ICsxNDA1LDE2IEBAIE9wdGlvbmFsPFJlZjxE
cmF3TmF0aXZlSW1hZ2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSgqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0
aW5hdGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZSwg
KmltYWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zIH19OwogfQog
Ci1jbGFzcyBEcmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0
dGVybiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IERyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdHRlcm47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkRyYXdQYXR0ZXJuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBj
b25zdCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9wYXR0ZXJuVHJhbnNmb3JtOyB9CkBAIC0xNzg3LDE2ICsxNDIzLDE1IEBAIHB1YmxpYzoKICAg
ICBGbG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQogICAgIEZsb2F0
U2l6ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IGRlY29k
ZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4o
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8RHJhd1BhdHRlcm4+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAg
bXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4g
Y2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0
byBiZSBtdXRhYmxlLgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAg
ICAgRmxvYXRSZWN0IG1fdGlsZVJlY3Q7CkBAIC0xODIxLDcgKzE0NTYsNyBAQCB2b2lkIERyYXdQ
YXR0ZXJuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXR0ZXJuPiBEcmF3UGF0dGVybjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGlt
YWdlSGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xODU4LDE4MiArMTQ5
MywxMDAgQEAgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+
aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNl
LCAqc3BhY2luZywgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdl
LCAqZGVzdGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNw
YWNpbmcsICpvcHRpb25zIH19OwogfQogCi0vLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBz
aXplIG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3Vu
ZHMuCi1jbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsK
K2NsYXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJh
d2luZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBp
bXBsaWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKKyAgICAgICAgOiBtX29wYWNpdHkob3BhY2l0eSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkp
OwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0
eTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9vcGFjaXR5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXI+PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsKLSAgICBkZWNv
ZGVyID4+IG9wYWNpdHk7Ci0gICAgaWYgKCFvcGFjaXR5KQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotCi0gICAgcmV0dXJuIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3Bh
Y2l0eSk7Ci19Ci0KLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKK2NsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXll
cjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxFbmRUcmFuc3BhcmVuY3lMYXll
cj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2Rl
KEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29k
ZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgp
OwotfQotCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3
UmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1JlY3Q7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3Qs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAg
LCBtX2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UmVjdCgpOwotCiAgICAgRmxvYXRS
ZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBib3JkZXJUaGlj
a25lc3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1JlY3Q+PiBkZWNvZGUo
RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRSZWN0IG1fcmVjdDsKICAgICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1f
Ym9yZGVyVGhpY2tuZXNzOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPERyYXdSZWN0Pj4gRHJhd1JlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYg
KCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8Zmxv
YXQ+IGJvcmRlclRoaWNrbmVzczsKLSAgICBkZWNvZGVyID4+IGJvcmRlclRoaWNrbmVzczsKLSAg
ICBpZiAoIWJvcmRlclRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBEcmF3UmVjdDo6Y3JlYXRlKCpyZWN0LCAqYm9yZGVyVGhpY2tuZXNzKTsKLX0K
LQotY2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmUg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdMaW5lOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9p
bnQxLCBGbG9hdFBvaW50IHBvaW50MikKKyAgICAgICAgOiBtX3BvaW50MShwb2ludDEpCisgICAg
ICAgICwgbV9wb2ludDIocG9pbnQyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgRHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5EcmF3TGluZSgpOwotCiAgICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7
IHJldHVybiBtX3BvaW50MTsgfQogICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1
cm4gbV9wb2ludDI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPERyYXdMaW5lPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQg
bV9wb2ludDE7CiAgICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07CiAKLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIERyYXdMaW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBlbmNvZGVyIDw8IG1fcG9pbnQxOwotICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Ci19
Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3
TGluZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2lu
dD4gcG9pbnQxOwotICAgIGRlY29kZXIgPj4gcG9pbnQxOwotICAgIGlmICghcG9pbnQxKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9p
bnQyOwotICAgIGRlY29kZXIgPj4gcG9pbnQyOwotICAgIGlmICghcG9pbnQyKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAg
ICByZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQxLCAqcG9pbnQyKTsKLX0KLQotY2xhc3Mg
RHJhd0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tM
b2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxv
Y2tMb2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91
YmxlTGluZXMpKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGlu
ZXNGb3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247
IH0KICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQ0LDE2ICsxNTk3LDE1IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBk
b3VibGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAotICAgIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+
PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRT
aXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdM
aW5lc0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2lu
dCBtX2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7CiAgICAgRGFz
aEFycmF5IG1fd2lkdGhzOwpAQCAtMjA3NCw3ICsxNjI2LDcgQEAgdm9pZCBEcmF3TGluZXNGb3JU
ZXh0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBE
cmF3TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxGbG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwogICAgIGRlY29kZXIgPj4gYmxvY2tMb2NhdGlv
bjsKQEAgLTIxMDYsMTE5ICsxNjU4LDgzIEBAIE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0
Pj4gRHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFk
b3VibGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBE
cmF3TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2NrTG9jYXRpb24sICpsb2NhbEFuY2hvciwgKnRo
aWNrbmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMpOworICAgIHJldHVybiB7
eyAqYmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAqcHJp
bnRpbmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAotY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgICAgIDogbV9yZWN0
KHJlY3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAor
cHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIG1fc3R5bGU7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cj4+IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0g
ICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9u
YWw8RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHN0eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7
Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19
Ci0KLWNsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdF
bGxpcHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5
cGUgPSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAg
ICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0VsbGlwc2UocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5EcmF3RWxs
aXBzZSgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdF
bGxpcHNlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBEcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9h
dFJlY3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd0Vs
bGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdF
bGxpcHNlPj4gRHJhd0VsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIERyYXdFbGxp
cHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5n
SXRlbSB7CitjbGFzcyBEcmF3UGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0
aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlw
ZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAg
ICAgOiBtX3BhdGgocGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdQYXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3
UGF0aCgpOworICAgIERyYXdQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZN
b3ZlKHBhdGgpKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUoRGVjb2RlciYp
OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXRoKGNvbnN0IFBhdGgmKTsK
KyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29u
c3QgeyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9Ci0KLSAgICBjb25zdCBQ
YXRoIG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgpAQCAtMjIyOCwyNCArMTc0NCwzNyBAQCB2b2lkIERyYXdQYXRoOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
LU9wdGlvbmFsPFJlZjxEcmF3UGF0aD4+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPERyYXdQYXRoPiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAg
aWYgKCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERy
YXdQYXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsK
IH0KIAotY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRHJhd0ZvY3VzUmluZ1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3Vz
UmluZ1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoUGF0aCYmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1f
cGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdG
b2N1c1JpbmdQYXRoKCk7CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRo
KHBhdGgpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQogCiAgICAgY29uc3Qg
UGF0aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGZsb2F0IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMjI1MywxNiArMTc4MiwxNSBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ZvY3Vz
UmluZ1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBh
dGggbV9wYXRoOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CiAgICAg
Q29sb3IgbV9jb2xvcjsKQEAgLTIyNzgsNyArMTgwNiw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1Bh
dGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1Bh
dGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1BhdGg+
IERyYXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRp
b25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTIzMDAsMzMgKzE4Mjgs
MzEgQEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSgq
cGF0aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpw
YXRoKSwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1c1Jp
bmdSZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
cmF3Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1JlY3RzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwogCiAgICAgY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAg
ZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBkZWNvZGUoRGVjb2RlciYp
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLQotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gZGVjb2RlKERlY29kZXIm
KTsKIAorcHJpdmF0ZToKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwogICAgIGZsb2F0
IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CkBAIC0yMzQzLDcgKzE4NjksNyBAQCB2b2lk
IERyYXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3Rz
Pj4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PERyYXdGb2N1c1JpbmdSZWN0cz4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxWZWN0b3I8RmxvYXRSZWN0Pj4gcmVjdHM7CiAgICAg
ZGVjb2RlciA+PiByZWN0czsKQEAgLTIzNjUsNzEgKzE4OTEsNTUgQEAgT3B0aW9uYWw8UmVmPERy
YXdGb2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9m
ZnNldCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpj
b2xvciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xh
c3MgRmlsbFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IHRydWU7CisKKyAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAg
IDogbV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxs
UmVjdChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJl
Y3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gZGVjb2RlKERlY29kZXIm
KTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAot
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbFJlY3Q6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gRmlsbFJlY3Q6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBk
ZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCi0vLyBGSVhN
RTogTWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJl
Y3RXaXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoQ29s
b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdp
dGhDb2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAg
ICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhDb2xvcigp
OwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBj
b25zdCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xv
cj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhDb2xvcihj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9y
PiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAg
ICAgQ29sb3IgbV9jb2xvcjsKIH07CkBAIC0yNDQyLDcgKzE5NTIsNyBAQCB2b2lkIEZpbGxSZWN0
V2l0aENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0
V2l0aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0
aENvbG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0
NTQsMjkgKzE5NjQsMjkgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJl
Y3RXaXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoQ29s
b3I6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciB9
fTsKIH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
eworY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RmlsbFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxS
ZWN0V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25z
dGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgRmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKIAot
ICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgR3Jh
ZGllbnQmIGdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RX
aXRoR3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RX
aXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
OyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVj
dFdpdGhHcmFkaWVudD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJl
Y3QgbV9yZWN0OwogICAgIG11dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhN
RTogTWFrZSB0aGlzIG5vdCBtdXRhYmxlCiB9OwpAQCAtMjQ4OSw3ICsxOTk5LDcgQEAgdm9pZCBG
aWxsUmVjdFdpdGhHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGll
bnQ+PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBk
ZWNvZGVyID4+IHJlY3Q7CkBAIC0yNTAwLDMyICsyMDEwLDM3IEBAIE9wdGlvbmFsPFJlZjxGaWxs
UmVjdFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlCiAgICAgaWYgKCFncmFkaWVudCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIHJldHVybiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKCpyZWN0LCBncmFkaWVu
dC0+Z2V0KCkpOworICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQog
Ci1jbGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RmlsbENvbXBvc2l0ZWRSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3Np
dGVkUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbENv
bXBvc2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBtX3Jl
Y3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fb3Aob3ApCisg
ICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2Rl
KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbENvbXBvc2l0ZWRS
ZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQog
ICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7
IH0KICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZp
bGxDb21wb3NpdGVkUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxs
Q29tcG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShE
ZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBt
X2NvbG9yOwogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7CkBAIC0yNTQyLDcgKzIwNTcsNyBA
QCB2b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0
ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09w
dGlvbmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVj
b2RlciA+PiByZWN0OwpAQCAtMjU2NCwzMSArMjA3OSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbENv
bXBvc2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqb3As
ICpibGVuZE1vZGUpOworICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1v
ZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJv
dW5kZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3Ip
CisgICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKTsK
LQogICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xvcjsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5k
TW9kZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxS
ZWY8RmlsbFJvdW5kZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2Rl
ciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9y
ZWN0LnJlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29u
c3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmVj
dCgpOyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29s
b3IgbV9jb2xvcjsKICAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CkBAIC0yNjAzLDcgKzIxMjIs
NyBAQCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRS
ZWN0Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFs
PEZpbGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJvdW5kZWRSZWN0PiByZWN0OwogICAgIGRlY29kZXIg
Pj4gcmVjdDsKQEAgLTI2MjAsMzEgKzIxMzksMzUgQEAgT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVk
UmVjdD4+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYg
KCFibGVuZE1vZGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4g
RmlsbFJvdW5kZWRSZWN0OjpjcmVhdGUoKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSk7CisgICAg
cmV0dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBG
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAg
ICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xl
UmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0
LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKCk7Ci0KICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7
IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQogICAgIGNvbnN0IENv
bG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXBy
aXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAK
K3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1f
cm91bmRlZEhvbGVSZWN0OwogICAgIENvbG9yIG1fY29sb3I7CkBAIC0yNjU5LDcgKzIxODIsNyBA
QCB2b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI2NzYsNzQgKzIxOTks
NjMgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJgogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sg
KnJlY3QsICpyb3VuZGVkSG9sZVJlY3QsICpjb2xvciB9fTsKIH0KIAogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxsSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBGaWxsSW5saW5lUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxs
SW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxJbmxpbmVQ
YXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxJ
bmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICAgICAgOiBtX3Bh
dGhEYXRhKHBhdGhEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmls
bElubGluZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5GaWxsSW5saW5lUGF0aCgpOwotCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4g
UGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbElubGluZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwot
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxJbmxpbmVQYXRoKGNvbnN0IElubGlu
ZVBhdGhEYXRhJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAor
cHJpdmF0ZToKICAgICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOwogfTsKIAotdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbElubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IEZpbGxJbmxpbmVQ
YXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxJbmxpbmVQYXRo
RGF0YT4gcGF0aERhdGE7Ci0gICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKLSAgICBpZiAoIXBhdGhE
YXRhKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxJbmxp
bmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBGaWxsUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4g
Y3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpGaWxsUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgRmlsbFBhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9w
YXRoKFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxsUGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+Rmls
bFBhdGgoKTsKKyAgICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0
aChwYXRoKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxGaWxsUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBt
X3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4KQEAgLTI3NTMsOTAgKzIyNjUsNjUgQEAgdm9pZCBGaWxsUGF0aDo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8RmlsbFBhdGg+PiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxGaWxsUGF0aD4gRmlsbFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICgh
cGF0aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUGF0
aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAK
LWNsYXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxFbGxp
cHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOworCisgICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAg
ICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmls
bEVsbGlwc2UocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZp
bGxFbGxpcHNlKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RmlsbEVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVf
RVhQT1JUIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IEZpbGxFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNv
ZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxGaWxsRWxsaXBzZT4+IEZpbGxFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAg
IGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBG
aWxsRWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgUHV0SW1hZ2VEYXRhIDogcHVi
bGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIFB1dEltYWdlRGF0YSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxQdXRJbWFnZURhdGE+IGNyZWF0ZShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
Rm9ybWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRh
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkp
OwotICAgIH0KLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIFdURk1vdmUoaW1hZ2VEYXRhKSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5QdXRJbWFnZURhdGEoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRh
JiBpbWFnZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlRGF0YTsgfQorICAgIEltYWdlRGF0
YSYgaW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CiAgICAgSW50UmVj
dCBzcmNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CiAgICAgSW50UG9pbnQgZGVz
dFBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9pbnQ7IH0KICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RGb3JtYXQ7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFB1dEltYWdl
RGF0YT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJ
bWFnZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7
IG1fZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpIH19OyB9CiAKLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCht
X2Rlc3RQb2ludCwgbV9zcmNSZWN0LnNpemUoKSk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4gc3RhdGljIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKIAor
cHJpdmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsKICAgICBJbnRQb2ludCBtX2Rlc3RQb2lu
dDsKLSAgICBSZWY8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBtX2ltYWdlRGF0YTsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7
CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9OwpAQCAtMjg0NSwx
NCArMjMzMiwxNCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdXRJbWFnZURhdGE6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9pbnB1
dEZvcm1hdDsKLSAgICBlbmNvZGVyIDw8IG1faW1hZ2VEYXRhOworICAgIGVuY29kZXIgPDwgbWFr
ZVJlZigqbV9pbWFnZURhdGEpOwogICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29k
ZXIgPDwgbV9kZXN0UG9pbnQ7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1h
Z2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFB1dEltYWdlRGF0YT4g
UHV0SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxB
bHBoYVByZW11bHRpcGxpY2F0aW9uPiBpbnB1dEZvcm1hdDsKICAgICBPcHRpb25hbDxSZWY8SW1h
Z2VEYXRhPj4gaW1hZ2VEYXRhOwpAQCAtMjg4MCwxNjkgKzIzNjcsMTA5IEBAIE9wdGlvbmFsPFJl
ZjxQdXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghZGVzdEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBQdXRJbWFnZURhdGE6OmNyZWF0ZSgqaW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdl
RGF0YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCk7CisgICAgcmV0dXJuIHt7
ICppbnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQs
ICpkZXN0Rm9ybWF0IH19OwogfQogCi1jbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgOiBwdWJsaWMg
RHJhd2luZ0l0ZW0geworY2xhc3MgUGFpbnRGcmFtZUZvck1lZGlhIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gY3JlYXRlKE1lZGlhUGxheWVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGFp
bnRGcmFtZUZvck1lZGlhKCk7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxh
eWVySWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxQYWlu
dEZyYW1lRm9yTWVkaWE+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAgUGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiB7IG1fZGVzdGluYXRpb24gfTsgfQog
Citwcml2YXRlOgogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAg
RmxvYXRSZWN0IG1fZGVzdGluYXRpb247CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgot
dm9pZCBQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ewotICAgIGVuY29kZXIgPDwgbV9pZGVudGlmaWVyOwotICAgIGVuY29kZXIgPDwgbV9kZXN0aW5h
dGlvbjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQYWludEZy
YW1lRm9yTWVkaWE+PiBQYWludEZyYW1lRm9yTWVkaWE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQotewotICAgIE9wdGlvbmFsPE1lZGlhUGxheWVySWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAg
ICBkZWNvZGVyID4+IGlkZW50aWZpZXI7Ci0gICAgaWYgKCFpZGVudGlmaWVyKQotICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlv
bjsKLSAgICBkZWNvZGVyID4+IGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gUGFpbnRGcmFtZUZvck1l
ZGlhOjpjcmVhdGUoKmlkZW50aWZpZXIsICpkZXN0aW5hdGlvbik7Ci19Ci0KLWNsYXNzIFN0cm9r
ZVJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgU3Ryb2tlUmVjdCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpTdHJva2VSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9saW5lV2lkdGgo
bGluZVdpZHRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVj
dChyZWN0LCBsaW5lV2lkdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5TdHJva2VSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdDsgfQogICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRo
OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxT
dHJva2VSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9Cisg
ICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1f
bGluZVdpZHRoOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlUmVj
dDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3Jl
Y3Q7Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVXaWR0aDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4gU3Ryb2tlUmVjdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29k
ZXIgPj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBPcHRpb25hbDxmbG9hdD4gbGluZVdpZHRoOwotICAgIGRlY29kZXIgPj4gbGluZVdp
ZHRoOwotICAgIGlmICghbGluZVdpZHRoKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIFN0cm9rZVJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmxpbmVXaWR0aCk7Ci19Ci0K
ICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tlSW5saW5lUGF0aCA6
IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VJbmxpbmVQYXRoIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFN0cm9rZUlubGluZVBhdGg+IGNyZWF0ZShjb25zdCBJbmxpbmVQYXRo
RGF0YSYgcGF0aERhdGEpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKKworICAgIFN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEm
IHBhdGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CiAgICAg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlSW5saW5lUGF0aCgpOwotCiAg
ICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQog
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tl
SW5saW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VJbmxp
bmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7
CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VJbmxpbmVQYXRoOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcGF0aERh
dGE7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlSW5s
aW5lUGF0aD4+IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBh
dGhEYXRhOwotICAgIGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4gU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKFdURk1vdmUoKnBhdGhEYXRh
KSk7Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ry
b2tlUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VQYXRoIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tl
UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ry
b2tlUGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAg
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9rZVBhdGgoKTsKKyAgICBTdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgewor
ICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
IAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9r
ZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxTdHJva2VQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGgg
bV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTMwNTIsNzIxICsyNDc5
LDExNSBAQCB2b2lkIFN0cm9rZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
fQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBT
dHJva2VQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFN0cm9rZVBhdGg+
IFN0cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBh
dGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTdHJva2VQYXRoOjpjcmVhdGUoKnBh
dGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgU3Ryb2tl
RWxsaXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VFbGxpcHNlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1U
eXBlOjpTdHJva2VFbGxpcHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0
ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1
ZTsKKworICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6
IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tl
RWxsaXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgflN0cm9rZUVsbGlw
c2UoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7
IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVj
b2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JF
X0VYUE9SVCBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12
b2lkIFN0cm9rZUVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBTdHJva2VFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiBy
ZWN0OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBTdHJva2VFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGVhclJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgQ2xlYXJSZWN0IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyUmVj
dDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBDbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJSZWN0KHJlY3QpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclJlY3QoKTsKKyAgICBjb25zdCBGbG9h
dFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPENsZWFyUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IENsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Jl
Y3Q7IH0KLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNv
ZGVyPgotdm9pZCBDbGVhclJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPENsZWFyUmVjdD4+IENsZWFyUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIp
Ci17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsK
LSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1
cm4gQ2xlYXJSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCiAjaWYgVVNFKENHKQotY2xhc3MgQXBw
bHlTdHJva2VQYXR0ZXJuIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
QXBwbHlTdHJva2VQYXR0ZXJuPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQXBwbHlTdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5BcHBseVN0cm9rZVBhdHRlcm4oKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4+IGRlY29kZShE
ZWNvZGVyJik7CitjbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4geworcHVibGljOgorICAgIHN0YXRp
YyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6
Ci0gICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlT
dHJva2VQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gQXBwbHlTdHJv
a2VQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5U3Ryb2tlUGF0
dGVybjo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRl
bSB7CitjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFw
cGx5RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5BcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKLQot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQg
QXBwbHlGaWxsUGF0dGVybjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBBcHBseUZp
bGxQYXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5RmlsbFBhdHRl
cm46OmNyZWF0ZSgpOwotfQogI2VuZGlmCiAKLWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ig
OiBwdWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2Fs
ZUZhY3RvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5
cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSBmYWxzZTsKKworICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0
b3IpCisgICAgICAgIDogbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3Ip
KTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxl
RmFjdG9yKCk7Ci0KICAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGVGYWN0b3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fc2Nh
bGVGYWN0b3I7Citwcml2YXRlOgorICAgIGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiB9Owog
Ci10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fc2NhbGVG
YWN0b3I7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcj4+IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBzY2FsZUZhY3RvcjsKLSAgICBkZWNv
ZGVyID4+IHNjYWxlRmFjdG9yOwotICAgIGlmICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3Jl
YXRlKCpzY2FsZUZhY3Rvcik7Ci19Ci0KLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2Rl
ciA8PCBtX3R5cGU7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6
OlNhdmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2F2ZT4oKnRoaXMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFJlc3RvcmU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6VHJhbnNsYXRlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Um90YXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNj
YWxlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFNldElubGluZUZpbGxHcmFkaWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8U2V0U3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUNhcDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFNldExpbmVKb2luPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0
TWl0ZXJMaW1pdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclNoYWRvdzoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGVhclNoYWRvdz4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICBl
bmNvZGVyIDw8IGRvd25jYXN0PENsaXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1Bh
dGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oKnRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxDbGlwUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNh
c3Q8RHJhd0dseXBocz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3SW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ltYWdlPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3du
Y2FzdDxEcmF3UGF0dGVybj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UmVjdD4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TGluZT4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PERyYXdFbGxpcHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQ
YXRoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1
c1JpbmdQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRo
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdSZWN0czoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+
KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0g
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRo
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFBhdGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFB1dEltYWdlRGF0YT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UGFp
bnRGcmFtZUZvck1lZGlhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFN0cm9rZUlubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFN0cm9rZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VFbGxp
cHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVj
dDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigqdGhp
cyk7Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBs
eVN0cm9rZVBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlTdHJva2VQ
YXR0ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RmlsbFBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVy
bj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFw
cGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEl0ZW1UeXBlPiBpdGVtVHlwZTsKLSAg
ICBkZWNvZGVyID4+IGl0ZW1UeXBlOwotICAgIGlmICghaXRlbVR5cGUpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0KLSAgICBzd2l0Y2ggKCppdGVtVHlwZSkgewotICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTYXZlOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFJlc3RvcmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBUcmFuc2xhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBSb3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNjYWxl
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0Q1RNOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0Q1RNOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDb25jYXRlbmF0ZUNUTTo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxHcmFkaWVudDogewotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5l
RmlsbEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgaWYg
KGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9y
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3M6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRTdHJva2VUaGlja25l
c3M6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRTdGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0YXRlOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUNhcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVDYXA6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lRGFzaDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVEYXNoOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGlu
ZUpvaW46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRMaW5lSm9pbjo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGVhclNoYWRvdzo6ZGVjb2RlKGRlY29k
ZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZN
b3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0g
ICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IENsaXBPdXQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQ2xpcFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICBp
ZiAoYXV0byBpdGVtID0gRHJhd0dseXBoczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IERyYXdJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0
byBpdGVtID0gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAg
ICAgaWYgKGF1dG8gaXRlbSA9IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVm
ZmVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05h
dGl2ZUltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd05hdGl2ZUltYWdlOjpkZWNv
ZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0
ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1BhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRy
YXdSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1JlY3Q6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5lOjpkZWNvZGUoZGVjb2RlcikpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJh
d0VsbGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXRo
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9j
dXNSaW5nUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRmlsbFJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3Np
dGVkUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxSb3VuZGVkUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSb3VuZGVkUmVj
dDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRo
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBj
YXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRo
OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsRWxsaXBzZTo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFB1dEltYWdlRGF0YTo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFBhaW50RnJh
bWVGb3JNZWRpYTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJv
a2VSZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0
aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUVsbGlwc2U6OmRlY29k
ZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRl
bT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpD
bGVhclJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGVhclJlY3Q6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRy
YW5zcGFyZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQmVnaW5UcmFuc3BhcmVu
Y3lMYXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0
ZXJuOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RmlsbFBhdHRlcm46
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNh
c2UgSXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBBcHBseURldmljZVNjYWxlRmFjdG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEl0ZW1IYW5kbGUpOwogCiB9IC8vIG5hbWVz
cGFjZSBEaXNwbGF5TGlzdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5h
bWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5w
cmVkaWNhdGU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdp
bmdJdGVtKCkpCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFRvVmFsdWVUeXBlTmFtZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVt
LnR5cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFt
ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFJvdGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRDVE0pCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ29uY2F0ZW5hdGVDVE0pCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbEdyYWRpZW50KQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZUZpbGxDb2xv
cikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVTdHJv
a2VDb2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdHJv
a2VUaGlja25lc3MpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0
U3RhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUNh
cCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lRGFzaCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lSm9pbikKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRNaXRlckxpbWl0KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXApCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShDbGlwT3V0VG9QYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKENsaXBQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKENsaXBUb0RyYXdpbmdDb21tYW5kcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShEcmF3SW1hZ2VCdWZmZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKERyYXdQYXR0ZXJuKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKERyYXdMaW5lKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKERyYXdMaW5lc0ZvclRleHQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShEcmF3RWxsaXBzZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3UGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3Rm9jdXNSaW5nUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3Rm9jdXNSaW5nUmVjdHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbFJlY3RXaXRoQ29sb3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoR3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oRmlsbENvbXBvc2l0ZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSb3VuZGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKLSNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShGaWxsSW5saW5lUGF0aCkKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEZpbGxQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEZpbGxFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFB1dEltYWdlRGF0YSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShQYWludEZyYW1lRm9yTWVkaWEpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU3Ryb2tlUmVjdCkKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VJbmxpbmVQYXRoKQotI2VuZGlm
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxh
eWVyKQotI2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShBcHBseVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oQXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCi0KIG5hbWVzcGFjZSBXVEYgewog
CiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZT4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDkw
MjVhMzRkYTg2NzNkZmY0Y2RhNjllMzllNzcyZTlkZmUwOGMyZmEuLjJhMDdjMzRmZGQ4NWNjODgw
Njk2YTQwYmI1ZTE1NTI1Nzk3MGE1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAKIHZv
aWQgUmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQ
b2ludCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAg
IGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKGlu
cHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOwor
ICAgIGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlu
bGluZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdl
cywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkBA
IC04NywyMSArODcsMjEgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFu
Z2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGEKIHZvaWQgUmVjb3JkZXI6
OmFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYg
Y2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxh
Z3MpCiB7CiAgICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywg
Y2hhbmdlRmxhZ3MpKSB7Ci0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRTdGF0
ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpKTsKKyAgICAgICAgYXBwZW5k
PFNldFN0YXRlPihjaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdzKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0
ZW0oU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29s
b3IuYXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNo
YW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldFN0cm9rZVRoaWNrbmVzczo6
Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICAgICAgYXBwZW5k
PFNldFN0cm9rZVRoaWNrbmVzcz4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAK
ICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVG
aWxsQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpKTsK
KyAgICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLmZpbGxD
b2xvci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlz
dC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKCpjaGFuZ2VzLm1fc3Rh
dGUuZmlsbEdyYWRpZW50KSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+
KCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6d2ls
bEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKQEAgLTEzOSwyNyArMTM5LDI3IEBAIHZv
aWQgUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhCiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKIHsK
LSAgICBhcHBlbmRJdGVtKENsZWFyU2hhZG93OjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPENsZWFy
U2hhZG93PigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKIHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVDYXA6OmNyZWF0ZShsaW5lQ2FwKSk7CisgICAg
YXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAg
ICBhcHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7
CisgICAgYXBwZW5kPFNldExpbmVEYXNoPihkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwogfQogCiB2
b2lkIFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKLSAgICBhcHBl
bmRJdGVtKFNldExpbmVKb2luOjpjcmVhdGUobGluZUpvaW4pKTsKKyAgICBhcHBlbmQ8U2V0TGlu
ZUpvaW4+KGxpbmVKb2luKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9h
dCBtaXRlckxpbWl0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1p
dGVyTGltaXQpKTsKKyAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCkBAIC0xNjksMTkgKzE2OSwxOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaQogCiBJbWFn
ZURyYXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVy
OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1h
Z2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3
VGlsZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwg
c3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1RpbGVkSW1h
Z2U+KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQ
YWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsK
IH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxl
LCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFn
ZVBhaW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdU
aWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFw
cGVuZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRp
bGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAg
cmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCkBAIC0xODksMjIgKzE4OSwy
MiBAQCB2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwogewogICAgIGltYWdlQnVmZmVyLmZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIobWFrZVJl
ZihpbWFnZUJ1ZmZlcikpOwotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ltYWdl
QnVmZmVyOjpjcmVhdGUoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCks
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZl
cj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKGNv
bnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0
ZUV4dGVudChEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdl
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdHRlcm46OmNyZWF0ZShpbWFnZSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOwor
ICAgIGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCiB2b2lkIFJlY29yZGVy
OjpzYXZlKCkKIHsKLSAgICBhcHBlbmRJdGVtKFNhdmU6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8
U2F2ZT4oKTsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xv
bmVGb3JTYXZlKCkpOwogfQogCkBAIC0yMTksMjUgKzIxOSwyNSBAQCB2b2lkIFJlY29yZGVyOjpy
ZXN0b3JlKCkKICAgICAvLyBIYXZlIHRvIGF2b2lkIGVsaWRpbmcgbmVzdGVkIFNhdmUvUmVzdG9y
ZSB3aGVuIGEgZGVzY2VuZGFudCBzdGF0ZSBjb250YWlucyBkcmF3aW5nIGl0ZW1zLgogICAgIGN1
cnJlbnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nIHw9IHN0YXRlVXNlZEZvckRyYXdpbmc7CiAK
LSAgICBhcHBlbmRJdGVtKFJlc3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8UmVzdG9yZT4o
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAg
ICAgY3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIGFwcGVuZEl0ZW0oVHJhbnNs
YXRlOjpjcmVhdGUoeCwgeSkpOworICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwogfQogCiB2
b2lkIFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCiB7CiAgICAgY3VycmVu
dFN0YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBhcHBlbmRJdGVtKFJvdGF0ZTo6
Y3JlYXRlKGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlh
bnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7
CiAgICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgYXBwZW5kSXRlbShTY2FsZTo6
Y3JlYXRlKHNpemUpKTsKKyAgICBhcHBlbmQ8U2NhbGU+KHNpemUpOwogfQogCiB2b2lkIFJlY29y
ZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCkBAIC0yNDYs
MTMgKzI0NiwxMyBAQCB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIGN1cnJlbnRTdGF0ZSgpLmNv
bmNhdENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oQ29uY2F0ZW5hdGVDVE06OmNyZWF0
ZSh0cmFuc2Zvcm0pKTsKKyAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKIHsKICAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBlbmRJ
dGVtKFNldENUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5z
Zm9ybSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQpAQCAtMjYzLDE1OCArMjYzLDE1OCBAQCBBZmZpbmVU
cmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkKIAogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6Y3JlYXRlKG9wYWNpdHkpKTsKKyAgICBhcHBlbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXll
cj4ob3BhY2l0eSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
IHsKLSAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7CisgICAg
YXBwZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdSZWN0OjpjcmVhdGUocmVjdCwgYm9yZGVy
VGhpY2tuZXNzKSk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3Mp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKTsKKyAgICBhcHBlbmQ8RHJhd0xp
bmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50
KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVMaW5lcykpOworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRv
RmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBh
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0
ZShyZWN0LCBzdHlsZSkpOworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihy
ZWN0LCBzdHlsZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdFbGxpcHNl
OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRl
bUFuZFVwZGF0ZUV4dGVudChEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RHJh
d1BhdGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdGb2N1c1JpbmdQYXRoOjpjcmVh
dGUocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmlu
Z1BhdGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5k
VXBkYXRlRXh0ZW50KERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zm
c2V0LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0
OjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsUmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoQ29sb3I6
OmNyZWF0ZShyZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4ocmVj
dCwgY29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0
ZW50KEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKTsKKyAgICBh
cHBlbmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGFw
cGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUocmVjdCwg
Y29sb3IsIG9wLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0Pihy
ZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChG
aWxsUm91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7CisgICAgYXBw
ZW5kPEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewot
ICAgICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUo
cGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgYXBwZW5kPEZpbGxJbmxpbmVQYXRoPihwYXRo
LmlubGluZURhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVu
ZDxGaWxsUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxF
bGxpcHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBsaW5lV2lkdGgpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VSZWN0
OjpjcmVhdGUocmVjdCwgbGluZVdpZHRoKSk7CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3Qs
IGxpbmVXaWR0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJ
bmxpbmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VJ
bmxpbmVQYXRoOjpjcmVhdGUocGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgYXBwZW5kPFN0
cm9rZUlubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlUGF0aDo6Y3Jl
YXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBh
cHBlbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVu
dChDbGVhclJlY3Q6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7
CiB9CiAKICNpZiBVU0UoQ0cpCiB2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQog
ewotICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKSk7CisgICAgYXBw
ZW5kPEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxs
UGF0dGVybigpCiB7Ci0gICAgYXBwZW5kSXRlbShBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUoKSk7
CisgICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CiAjZW5kaWYKIAogdm9pZCBSZWNv
cmRlcjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgY3VycmVudFN0YXRlKCku
Y2xpcEJvdW5kcy5pbnRlcnNlY3QocmVjdCk7Ci0gICAgYXBwZW5kSXRlbShDbGlwOjpjcmVhdGUo
cmVjdCkpOworICAgIGFwcGVuZDxDbGlwPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbShDbGlwT3V0Ojpj
cmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxDbGlwT3V0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW0oQ2xpcE91
dFRvUGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxl
IHdpbmRSdWxlKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHBh
dGguZmFzdEJvdW5kaW5nUmVjdCgpKTsKLSAgICBhcHBlbmRJdGVtKENsaXBQYXRoOjpjcmVhdGUo
cGF0aCwgd2luZFJ1bGUpKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKTsK
IH0KIAogSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpCkBAIC00NDIsMTkgKzQ0MiwxOSBA
QCB2b2lkIFJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjbwogCiAgICAgYXV0byByZWNvcmRpbmdDb250ZXh0ID0g
bWFrZVVuaXF1ZTxEcmF3aW5nQ29udGV4dD4oZGVzdGluYXRpb24uc2l6ZSgpLCBpbml0aWFsQ1RN
KTsKICAgICBkcmF3aW5nRnVuY3Rpb24ocmVjb3JkaW5nQ29udGV4dC0+Y29udGV4dCgpKTsKLSAg
ICBhcHBlbmRJdGVtKENsaXBUb0RyYXdpbmdDb21tYW5kczo6Y3JlYXRlKGRlc3RpbmF0aW9uLCBj
b2xvclNwYWNlLCByZWNvcmRpbmdDb250ZXh0LT50YWtlRGlzcGxheUxpc3QoKSkpOworICAgIGFw
cGVuZDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCByZWNv
cmRpbmdDb250ZXh0LT50YWtlRGlzcGxheUxpc3QoKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKQogewotICAgIGFwcGVuZEl0ZW0oUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUo
cGxheWVyLCBkZXN0aW5hdGlvbikpOworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBs
YXllciwgZGVzdGluYXRpb24pOwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIC8vIEZJWE1FOiB0aGlzIGNo
YW5nZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hl
ZCBleHRlbnRzLgogICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/
Ci0gICAgYXBwZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoZGV2aWNlU2Nh
bGVGYWN0b3IpKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oZGV2aWNlU2Nh
bGVGYWN0b3IpOwogfQogCiBGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAg
LTQ2MywzMCArNDYzLDYgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjoKICAgICByZXR1cm4gcmVj
dDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChSZWY8RHJh
d2luZ0l0ZW0+JiYgaXRlbSkKLXsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGl0ZW0uZ2V0
KCk7Ci0gICAgYXBwZW5kSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLSAgICB1cGRhdGVJdGVtRXh0ZW50
KG5ld0l0ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0
ZW0pCi17Ci0gICAgSXRlbSYgbmV3SXRlbSA9IGl0ZW0uZ2V0KCk7Ci0gICAgYXV0byB0eXBlID0g
bmV3SXRlbS50eXBlKCk7Ci0gICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7Ci0gICAgbV9k
aXNwbGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7Ci0gICAgZGlkQXBwZW5kSXRlbU9mVHlw
ZSh0eXBlKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRl
bSYgaXRlbSkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRl
bS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50
KGV4dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChPcHRp
b25hbDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQotICAgICAgICBpdGVt
LnNldEV4dGVudChyZWN0LnZhbHVlKCkpOwotfQotCiAvLyBGSVhNRTogc2hhcmUgd2l0aCBTaGFk
b3dEYXRhCiBzdGF0aWMgaW5saW5lIGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJs
dXJSYWRpdXMpCiB7CkBAIC01MDYsNyArNDgyLDcgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpleHRl
bnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogICAgIGZsb2F0
IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKICAgICBpZiAoZ3JhcGhpY3ND
b250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
cikpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudD0gYm91bmRzOworICAgICAgICBG
bG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwogICAgICAgICBzaGFkb3dFeHRlbnQubW92
ZShzaGFkb3dPZmZzZXQpOwogICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWlu
dGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4
dGVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA3Yjg2MTNj
NWYyOTYzMWU1ZGU5NDM5NDMzMmQ4OWRmZDUzZjMxZmRkLi5mOTUxY2ZhYTJjYWNjOTZkNGMxYTE4
YTI1ZmE1ODk2MDc5MjI0NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVk
ZSAiRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dEl0ZW1zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgogI2luY2x1ZGUgIklt
YWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCkBA
IC00OCw4ICs0OSw2IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNl
IERpc3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW07Ci0KIGNsYXNzIFJlY29yZGVyIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKQEAgLTE0NywxNSArMTQ2LDM0
IEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIGFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IGNsYXNzLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgewor
ICAgICAgICB3aWxsQXBwZW5kSXRlbU9mVHlwZShUOjppdGVtVHlwZSk7CisgICAgICAgIG1fZGlz
cGxheUxpc3QuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAg
IGRpZEFwcGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOworCisgICAgICAgIGlmICghVDo6aXNE
cmF3aW5nSXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoTElLRUxZKCFt
X2Rpc3BsYXlMaXN0LnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CisgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29u
dGV4dCgpKSkKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQo
ZXh0ZW50RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CisgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVj
dCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERy
YXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kaXNw
bGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChXVEY6Om51bGxvcHQpOworICAgIH0KKwogICAg
IHZvaWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwogICAgIHZvaWQgZGlkQXBwZW5k
SXRlbU9mVHlwZShJdGVtVHlwZSk7Ci0gICAgdm9pZCBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KFJlZjxEcmF3aW5nSXRlbT4mJik7CiAKICAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKTsKIAogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMo
Y29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdp
bmdJdGVtJikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBj
b25zdDsKICAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4Mjg4MzgwNDMxYTI5MGMwNDBj
MTlkMWFlZWNlOTQyNGZmNTc3MzVhLi5lNDZlNTY4OTVkNGMzNWY3ZTIxMTRmODAyMTQ5NTY4MjI3
YmRlOGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC00
NCwxOCArNDQsMTggQEAgUmVwbGF5ZXI6OlJlcGxheWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb24KIAogUmVwbGF5ZXI6On5SZXBs
YXllcigpID0gZGVmYXVsdDsKIAotdm9pZCBSZXBsYXllcjo6YXBwbHlJdGVtKEl0ZW0mIGl0ZW0p
Cit2b2lkIFJlcGxheWVyOjphcHBseUl0ZW0oSXRlbUhhbmRsZSBpdGVtKQogewogICAgIGlmICht
X2RlbGVnYXRlICYmIG1fZGVsZWdhdGUtPmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkRyYXdJbWFn
ZUJ1ZmZlcikgewotICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IHN0YXRpY19jYXN0PERyYXdJbWFn
ZUJ1ZmZlciY+KGl0ZW0pOworCisgICAgaWYgKGl0ZW0uaXM8RHJhd0ltYWdlQnVmZmVyPigpKSB7
CisgICAgICAgIGF1dG8mIGRyYXdJdGVtID0gaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwog
ICAgICAgICBpZiAoYXV0byogaW1hZ2VCdWZmZXIgPSBtX2ltYWdlQnVmZmVycy5nZXQoZHJhd0l0
ZW0ucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpKQogICAgICAgICAgICAgZHJhd0l0ZW0u
YXBwbHkobV9jb250ZXh0LCAqaW1hZ2VCdWZmZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIAorCiAgICAgaXRlbS5hcHBseShtX2NvbnRleHQpOwogfQogCkBAIC02OCwyNSArNjgsMjUg
QEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZs
b2F0UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wKICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlM
aXN0KSkKICAgICAgICAgcmVwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAK
LSAgICBhdXRvJiBpdGVtcyA9IG1fZGlzcGxheUxpc3QubGlzdCgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgaXRlbSA9IGl0
ZW1zW2ldLmdldCgpOwotCi0gICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8
RHJhd2luZ0l0ZW0+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJh
d2luZ0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAo
ZHJhd2luZ0l0ZW0uZXh0ZW50S25vd24oKSAmJiAhZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJz
ZWN0cyhpbml0aWFsQ2xpcCkpIHsKLSAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlz
cGxheUxpc3RzLCBzdHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisjaWYgIUxPR19ESVNBQkxF
RAorICAgIHNpemVfdCBpID0gMDsKKyNlbmRpZgorICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50
XSA6IG1fZGlzcGxheUxpc3QpIHsKKyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAm
JiBleHRlbnQgJiYgIWV4dGVudC0+aW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsKKyAgICAgICAg
ICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8
PCBpKysgPDwgIiAiIDw8IGl0ZW0pOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IAogICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImFwcGx5
aW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgIGFwcGx5SXRlbShpdGVtKTsKIAot
ICAgICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKLSAgICAgICAgICAgIHJlcGxh
eUxpc3QtPmFwcGVuZEl0ZW0oY29uc3RfY2FzdDxJdGVtJj4oaXRlbSkpOworICAgICAgICBpZiAo
VU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkgeworICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBw
ZW5kKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAg
ICAgICAgICAgIHJlcGxheUxpc3QtPmFkZERyYXdpbmdJdGVtRXh0ZW50KFdURk1vdmUoZXh0ZW50
KSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVwbGF5TGlzdDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggZGM3NGY3ZDY3YTEz
NmZlNjk2NDY5MGFkMWMwNTljMDE2MmFmNjU0ZC4uOTJlYzY4ODljMzVlZjg2ZDNmOWU5NGJlYzY2
NmU3YTc4YWU1OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBA
IC01MCwxMSArNTAsMTEgQEAgcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHZpcnR1YWwgfkRlbGVnYXRlKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBhcHBseShJdGVtJiwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5kbGUsIEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBseUl0ZW0o
SXRlbSYpOworICAgIHZvaWQgYXBwbHlJdGVtKEl0ZW1IYW5kbGUpOwogICAgIAogICAgIEdyYXBo
aWNzQ29udGV4dCYgbV9jb250ZXh0OwogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlM
aXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXIuaAppbmRleCBjYjYxYWQyNjE3YzlkYzQyOTE4ZTM2NjA1MWI4ZDcwMTZjNjhk
NmFjLi43OGE0NzIzZWExMTI3N2FkNmFjMmM2MmYxMTk2MDgwNDI4ZTMxZmY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIu
aApAQCAtMjcsMTQgKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNs
dWRlICJEZWNvZGVyLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1h
Z2VCdWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4sIHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHsKK2Ns
YXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpE
ZWxlZ2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25j
cmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFn
ZUJ1ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9i
YWNrZW5kOwpAQCAtNzEsMTAgKzc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCisgICAgYm9vbCBhcHBseShXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0g
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpIHsKLSAgICAgICAg
ICAgIGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1dElt
YWdlRGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRh
PigpOwogICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRGb3Jt
YXQoKSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5zcmNS
ZWN0KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVz
dEZvcm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC04Miw2
ICs4NSwxMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5hcHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICBPcHRpb25h
bDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRl
Y29kZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlIHR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
cmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRs
ZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFu
ZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0YSwgbGVuZ3RoLCBo
YW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVz
Rm9yVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24p
OworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgor
ICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICBy
ZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4o
ZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0
ZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJu
IGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxl
bmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2Rl
QW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50
PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAg
ICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Rmls
bFJvdW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAg
ICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVy
biBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRh
LCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxl
TG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJS
ZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJT
aGFkb3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRl
Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElO
RV9QQVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpGaWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0Ogor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJO
X1VOVVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVf
dCBsZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0
aCkpIHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICBy
ZXR1cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYjZl
ZjI0ZWQ3M2U0YmEyYmNlM2VhMjRkNjM3M2QzZjgzNDVhNmQ5Zi4uMjMzNDM2ZTBhMjFkZmVjMWM4
OGFhODI5OWU4OTc1OTk0ZTE1NDFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIs
MTMgKzcyLDEyIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFw
cGx5TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVt
KERpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1l
ZGlhSXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVk
aWEmPihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0
OjpQYWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTI1LDE5ICsxMjQsNDUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBtX3Jl
bW90ZVJlc291cmNlQ2FjaGUuY2FjaGVJbWFnZUJ1ZmZlcihtYWtlUmVmKCppbWFnZUJ1ZmZlcikp
OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3QoY29u
c3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6YXBwbHlEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhh
bmRsZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQgZmx1c2hDb250ZXh0KQogewotICAgIGlm
IChhdXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVm
ZmVyKHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGltYWdlQnVmZmVyLT5m
bHVzaERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKKyAgICBhdXRvIGRpc3BsYXlMaXN0ID0gaGFu
ZGxlLmNyZWF0ZURpc3BsYXlMaXN0KFsmXSAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IHVpbnQ4X3QqIHsKKyAgICAgICAgaWYgKGF1dG8g
c2hhcmVkTWVtb3J5ID0gbV9zaGFyZWRJdGVtQnVmZmVycy50YWtlKGlkZW50aWZpZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICBpZiAoIWRp
c3BsYXlMaXN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRl
cm1pbmF0ZSB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewor
ICAgICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdl
YiBwcm9jZXNzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGltYWdlQnVmZmVy
LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVyQ2xp
ZW50KHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIqPihpbWFnZUJ1ZmZl
cikpOworICAgIGVsc2UKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQo
c3RhdGljX2Nhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyKj4oaW1hZ2VCdWZmZXIp
KTsKKworICAgIGltYWdlQnVmZmVyLT5mbHVzaERpc3BsYXlMaXN0KCpkaXNwbGF5TGlzdCk7CisK
KyAgICBpZiAoZmx1c2hDb250ZXh0ID09IFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKQorICAgICAg
ICBpbWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElk
ZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3Qo
Y29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoYXV0byBp
bWFnZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaERp
c3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoQ29udGV4
dCgpOwotICAgICAgICBmbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRlbnRpZmll
ciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9CisgICAgYXBwbHlEaXNwbGF5
TGlzdChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250
ZXh0OjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5
TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBEaXNw
bGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXBwbHlEaXNw
bGF5TGlzdChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hD
b250ZXh0OjpZZXMpOworICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVu
dGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgSW50UmVjdCBzcmNSZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1h
Z2VEYXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUzLDYgKzE3OCwx
MiBAQCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcgogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5y
ZWxlYXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAor
dm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVt
b3J5OjpJUENIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoYXV0byBzaGFyZWRNZW1vcnkgPSBT
aGFyZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246
OlJlYWRPbmx5KSkKKyAgICAgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5zZXQoaWRlbnRpZmllciwg
V1RGTW92ZShzaGFyZWRNZW1vcnkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAzZGY2
Zjc3NGUxNTIxYjgxNGI3YjZjNWMyMDNiMjc2NWM2YWM3OTBmLi44MjFjMzQxOGI4MDUxZTdkMzcx
Y2JmMWQ5NDVhZWU2OWQ0MGI0ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1
LDkgQEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3Vy
Y2VDYWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAt
NjQsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSYgcmVtb3RlUmVz
b3VyY2VDYWNoZSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsgfQogCiAgICAgLy8g
UmVuZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAg
IGJvb2wgYXBwbHlNZWRpYUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4K
ICAgICB2b2lkIGltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAt
NzMsNiArNzUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIAorICAgIGVudW0gY2xhc3MgU2hvdWxkRmx1c2hDb250ZXh0IDogYm9vbCB7IE5vLCBZZXMg
fTsKKyAgICB2b2lkIGFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5k
bGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29u
dGV4dCk7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9u
KiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90
IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04MywxNCAr
ODgsMTYgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAg
IHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpDb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwot
ICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZv
aWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3Qg
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0
IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9pZCBy
ZWxlYXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KTsKKyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsK
IAogICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFdl
YWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklk
ZW50aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluCmluZGV4IGE4OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMuLmJi
OTE1YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVm
Q291bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Ci0gICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RBbmRD
b21taXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJL
aXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikK
KyAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNw
bGF5TGlzdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQorICAgIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmll
ciBmbHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBy
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhf
dCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6
SW50UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1h
Z2VEYXRhKSBTeW5jaHJvbm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNv
cmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCisgICAgRGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1CdWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENI
YW5kbGUgaGFuZGxlKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkKaW5kZXggYzFhZTk2YzdjYTI5NWMzZTVlYmViNzViM2MzYzM0MjY5NTE0MTc0
MC4uMTI0ZjQ4ZjFjNDFhZmZmZTM2Y2RkMzUyYjRiOWQxYjg4YjEwMzk3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yMDgsNiArMjA4LDcgQEAgZGVmIHR5
cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1N0cmluZycs
CiAgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRpY3Rh
dGlvbkNvbnRleHQnLAorICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzJywKICAg
ICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpE
b2N1bWVudE9yV29ya2VySWRlbnRpZmllcicsCkBAIC01ODcsNiArNTg4LDcgQEAgZGVmIGhlYWRl
cnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdKU0M6Ok1lc3NhZ2VTb3VyY2UnOiBbJzxKYXZh
U2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVj
dG9yVGFyZ2V0VHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAog
ICAgICAgICAnSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlJzogWyc8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+J10sCisgICAgICAgICdX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInOiBbJzxXZWJDb3JlL0Rp
c3BsYXlMaXN0Lmg+J10sCiAgICAgICAgICdNZWRpYVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+
J10sCiAgICAgICAgICdNb25vdG9uaWNUaW1lJzogWyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwK
ICAgICAgICAgJ1NlY29uZHMnOiBbJzx3dGYvU2Vjb25kcy5oPiddLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYTc0
ZDYxNWFiZDNmNGEzMTg2MjUyZmYwZmRjYjg3MWU3MGZhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFy
ZWREaXNwbGF5TGlzdEhhbmRsZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxp
c3RIYW5kbGUoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sK
KyAgICBkaXNwbGF5TGlzdC5mb3JFYWNoSXRlbUJ1ZmZlcihbJl0gKGF1dG8mIGhhbmRsZSkgewor
ICAgICAgICBtX2J1ZmZlcnMuYXBwZW5kKHsgaGFuZGxlLmlkZW50aWZpZXIsIGhhbmRsZS5jYXBh
Y2l0eSB9KTsKKyAgICB9KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdD4gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1C
dWZmZXJQcm92aWRlciYmIGJ1ZmZlclByb3ZpZGVyKSBjb25zdAoreworICAgIERpc3BsYXlMaXN0
OjpJdGVtQnVmZmVySGFuZGxlcyBoYW5kbGVzOworICAgIGhhbmRsZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX2J1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCBj
YXBhY2l0eV0gOiBtX2J1ZmZlcnMpIHsKKyAgICAgICAgYXV0byogZGF0YSA9IGJ1ZmZlclByb3Zp
ZGVyKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBoYW5kbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGlkZW50aWZpZXIs
IGRhdGEsIGNhcGFjaXR5IH0pOworICAgIH0KKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q+KFdURk1vdmUoaGFuZGxlcykpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlM
aXN0SGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQxNzVlMTE0ZjIzYmM4ZmI4ZTU3Y2Q5MGY2NGEzM2JlMjYyZTFmMzEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJdGVt
QnVmZmVyUHJvdmlkZXIgPSBGdW5jdGlvbjx1aW50OF90KihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIpPjsKKworICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IGNyZWF0ZURpc3BsYXlMaXN0
KEl0ZW1CdWZmZXJQcm92aWRlciYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU+IGRlY29kZShEZWNv
ZGVyJik7CisKK3ByaXZhdGU6CisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoVmVjdG9yPHN0
ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVf
dD4+JiYgYnVmZmVycykKKyAgICAgICAgOiBtX2J1ZmZlcnMoV1RGTW92ZShidWZmZXJzKSkKKyAg
ICB7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+IG1fYnVmZmVyczsKK307CisKK3RlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9idWZmZXJzOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4g
U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZm
ZXJJZGVudGlmaWVyLCBzaXplX3Q+Pj4gYnVmZmVyczsKKyAgICBkZWNvZGVyID4+IGJ1ZmZlcnM7
CisgICAgaWYgKCFidWZmZXJzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
cmV0dXJuIHt7IFdURk1vdmUoKmJ1ZmZlcnMpIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CmluZGV4IDM1MWFmNDI3OGM5ODU5NTlhZWNmYjE1ZGJmMGFiN2NiNWUyMDRi
NzUuLjY5NTI5Njc0NTFhNjlkMjUzM2VhYzk2NjViZWFjNDU2OWNkMWQ2NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dApAQCAtMTc0LDYgKzE3NCw3IEBAIFNoYXJlZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25E
YXRhLmNwcAogU2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAu
Y3BwIEBuby11bmlmeQogU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAorU2hhcmVkL1NoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAK
IFNoYXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGVSZWFkT25seS5jcHAKIFNoYXJlZC9TaGFyZWRT
dHJpbmdIYXNoVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA4YWNhNjA1MjVmYjNiOTMzOTBiZTcyMjQ3ZjkyZWQ2YjIyOWNl
ZjdkLi5mNWMzOGVjNmMxNTBkMWIxYWM0NmExZjU5ODcwYTM3MzcyMDRiZmQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4OTAsNiAr
MTg5MCw3IEBACiAJCUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVC
MDFFOUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDhEMkE4
NTIxNTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0
U1BJLmggKi87IH07CiAJCUY0OTZBNDMxMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVy
YWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUu
aCAqLzsgfTsKKwkJRjRBNkQ2QkMyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEE2RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsg
fTsKIAkJRjRDQjA5RTUyMjVENUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGlj
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5
RTQyMjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9Owog
CQlGNEQ1RjUxRDIwNjA4N0ExMDAzOEJCQTggLyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVG
NTE5MjA2MDg3QTAwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oICov
OyB9OwogCQlGNEQ1RjUxRjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNEQ1RjUxQjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9s
bGVyLmggKi87IH07CkBAIC01NTA3LDYgKzU1MDgsOCBAQAogCQlGNDhEMkE4NDIxNTgzQTAyMDBD
Njc1MkIgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ry
b3BJbnRlcmFjdGlvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25T
dGF0ZS5oOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFj
dGlvblN0YXRlLm1tOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkJEMjU0Q0E1MjIw
MEI2NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUY0QUM2NTVFMjJBMzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1
ZXNJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVm
ZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZh
dWx0VmFsdWVzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIx
RERCQkFCMDA5NUEzNzggLyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRv
U3RlcElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Q0IwOUU0MjI1RDVBMDMw
MDg5MTQ4NyAvKiBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
c2l0ZU1lZGlhU291cmNlUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
MjE2LDYgKzYyMTksOCBAQAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFi
bGVCaXRtYXAuaCAqLywKIAkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxl
UmVzb3VyY2UuY3BwICovLAogCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFi
bGVSZXNvdXJjZS5oICovLAorCQkJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8sCisJCQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8q
IFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8sCiAJCQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0
NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAgKi8sCiAJCQkJODMxM0Y3RTkxRjdEQUUw
MzAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oICovLAogCQkJCTgzMTNGN0U4MUY3
REFFMDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwICovLApAQCAtMTEzOTgs
NiArMTE0MDMsNyBAQAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8q
IFNoYXJlZEJ1ZmZlckNvcHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBD
MTMwMTc2NyAvKiBTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGNEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1v
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFy
ZWRSaW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUw
ODAwQjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDkyM2I0Y2JjNmFlZjYyZGM3NmE5ZmEzM2FiNzMz
N2UyZmY1YzFiMDcuLjNkYmQ4ZTNjMmYyM2MzNmJhNDFmNDFlMGFiYTJmMGFlYTM4NjI1YjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KQEAgLTM2LDcgKzQwLDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PiwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUgeworY2xh
c3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpEZWxlZ2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVy
V3JpdGluZ0NsaWVudCB7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5n
IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7CkBAIC03Niw2ICs4MCw4IEBA
IHByb3RlY3RlZDoKICAgICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtl
V2Vha1B0cihyZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICAgICAgbV9kcmF3aW5nQ29u
dGV4dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1f
ZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMo
ZmFsc2UpOwogICAgIH0KIAogICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVy
biBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQpA
QCAtMTczLDYgKzE3OSwxMDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBkaXNwbGF5TGlzdC5jbGVh
cigpOwogICAgIH0KIAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxl
IGNyZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgcmV0dXJu
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5
KTsKKworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0pIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0
aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlw
UGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGlwUGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gSVBD
OjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBU
b0RyYXdpbmdDb21tYW5kcz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kcz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29k
ZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmlu
Z1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9j
dXNSaW5nUmVjdHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5n
bGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAg
ICAgICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBocz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5n
bGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oaXRlbS5nZXQ8V2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJu
IElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TGluZXNGb3JUZXh0PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVz
Rm9yVGV4dD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNv
ZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAg
ICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0
aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
UGF0dGVybjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJ
UEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1RpbGVkSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFn
ZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29k
ZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9z
aXRlZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhDb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmds
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0
PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoK
KyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAg
ICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxSb3VuZGVkUmVjdD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVy
OjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4o
aXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSk7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lRGFzaD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNp
bmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGl0ZW0uZ2V0PFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6
RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQ
YXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oKSk7CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxl
RmFjdG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRv
dzoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXA6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0OgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAg
Y2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
CisKICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlIHR5cGUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAodHlwZSA9PSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBmMzFlZmFmODczMTBmZjhlZjUyMGMwOTI1
MTY2ZGI2Y2QzMDJiMDM3Li44YTgwNTdjNTlkMmJkNWQ2MmFhZjgxZmZmYWZhOGVjYmEyZmYwNjcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0zNCw2ICsz
NCw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCiAjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMTUsMTMgKzExNywxNSBAQCBSZWZQ
dHI8SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Zmx1c2hEaXNwbGF5TGlzdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlM
aXN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNo
RGlzcGxheUxpc3QoZGlzcGxheUxpc3QsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3QoeyBkaXNwbGF5TGlzdCB9LCByZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICBtX3NoYXJlZEl0ZW1CdWZmZXJzLmNsZWFyKCk7CiB9CiAKIERpc3BsYXlMaXN0Rmx1c2hJZGVu
dGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENv
bW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAg
IERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIgPSBEaXNwbGF5
TGlzdEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGRpc3BsYXlMaXN0
LCBzZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KHsgZGlzcGxheUxpc3QgfSwg
c2VudEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5jbGVhcigp
OwogICAgIHJldHVybiBzZW50Rmx1c2hJZGVudGlmaWVyOwogfQogCkBAIC0xNTUsNiArMTU5LDIz
IEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0V2Fz
Q29tbWl0dGVkKERpc3BsYXlMaXN0Rmx1c2hJCiAgICAgICAgIGRvd25jYXN0PFVuYWNjZWxlcmF0
ZWRSZW1vdGVJbWFnZUJ1ZmZlclByb3h5PigqaW1hZ2VCdWZmZXIpLmNvbW1pdEZsdXNoRGlzcGxh
eUxpc3QoZmx1c2hJZGVudGlmaWVyKTsKIH0KIAorRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5k
bGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBj
YXBhY2l0eSkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBkZWZhdWx0U2hhcmVkSXRl
bUJ1ZmZlclNpemUgPSAxIDw8IDE2OworCisgICAgYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRN
ZW1vcnk6OmFsbG9jYXRlKHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2Fw
YWNpdHkpKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIGF1dG8gaWRlbnRpZmllciA9IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcjo6
Z2VuZXJhdGUoKTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBzaGFyZWRNZW1vcnlIYW5kbGU7
CisgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVkTWVtb3J5SGFuZGxlLCBTaGFy
ZWRNZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShpZGVudGlmaWVyLCB7
IFdURk1vdmUoc2hhcmVkTWVtb3J5SGFuZGxlKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkgfSksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMuc2V0
KGlkZW50aWZpZXIsIHNoYXJlZE1lbW9yeS5jb3B5UmVmKCkpOworCisgICAgcmV0dXJuIHsgaWRl
bnRpZmllciwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkp
LCBzaGFyZWRNZW1vcnktPnNpemUoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCmluZGV4IGNhMDU1ZmQzNmZjZTFhMTJiYjI1YmZlNmQ1OTM1MTY5NGJjZGZhZGUu
LmQzNmMzZWVhODM2ODYzZDkwZmNlNzkwOTljNDNlMDRkOThkMGRiYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1l
c3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNp
bmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVi
bGljOgogICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKIAogICAgIFJlbW90ZVJl
c291cmNlQ2FjaGVQcm94eSYgcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkgeyByZXR1cm4gbV9y
ZW1vdGVSZXNvdXJjZUNhY2hlUHJveHk7IH0KKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCk7CiAKICAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtODYsNiArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Zmx1c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwg
V2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eTsKKyAgICBIYXNoTWFwPFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1l
bW9yeT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDhmMjQ1ODU2MzVmNDcwODNkMWRiMjdhNWIz
OTY2NjVmMzE1ZWJjYjAuLjlmMjZhMjMwY2Y2OGIwYmY4ODA5MjhiN2NlZmJiZDg3Zjg1MzQ0ZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdl
cyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9p
ZCBJbWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RXYXND
b21taXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZp
ZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIpCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpG
bG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6
OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291
cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNw
bGF5TGlzdFdhc0NvbW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZs
dXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCA4MjUwNDIxN2JlNzYx
NWI0ODdhMGNkMzJmN2RmMTg3NzI0NjcyZWIyLi5mYWZmOTJhMDRkZGZjYmJkNTgzODZlYzliZmFh
ZDllMTM1NWE1NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0y
OCw2ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVy
Lmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA2NzU3YjhlMDg3YzdmNjk3ZDM5NzUzNmQxMGM2OTVkOTc5MjM1OWQ5Li4wMWM3Njk5NTll
Yzk3ZTczNmFhYTc3ZTkyZjkzYTI4NjM5NDA0ZjhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MjAtMTAtMzAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0NvbmN1cnJlbnQgZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBk
aXJlY3RseSBpbnRvIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0
b24uCisKKyAgICAgICAgUmViYXNlbGluZSBzZXZlcmFsIGV4aXN0aW5nIChub24tR1BVLXByb2Nl
c3MpIGRpc3BsYXkgbGlzdCB0ZXN0cyB0byBhY2NvdW50IGZvciBhIHNsaWdodCB0d2VhayBpbiB0
aGUgZm9ybWF0IGluCisgICAgICAgIHdoaWNoIGRpc3BsYXkgbGlzdHMgYXJlIGR1bXBlZCBhcyB0
ZXh0LiBNb3JlIHNwZWNpZmljYWxseSwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIG5vdyBkdW1w
ZWQgYWZ0ZXIgZWFjaAorICAgICAgICBkcmF3aW5nIGl0ZW0sIHJhdGhlciB0aGFuIGJlZm9yZS4K
KworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1z
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVk
LXJlY3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTA2ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRw
aW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmlu
Zy4gR2FyZGVuZWQgc2V2ZXJhbCBmbGFreSBmYWlsdXJlcyByZXBvcnRlZCBieSB0aGUgYm90Lgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxp
c3QtZXhwZWN0ZWQudHh0CmluZGV4IDMyODg0ODA2MjcwMTlkNTQwMmQ5NDI1ZmM0YTEzMTM3NzBl
Y2IzMWEuLjE0NTFiMTkyNTNjMzIzODkyOGJiZDlmNWU1ZGViYjkyNzRjNTBkNTcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQKQEAgLTYsMTAgKzYsOCBAQAogICAoZmlsbC1jb2xvciAjQzgwMDAwKQogICAo
c2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKLSAgKGV4dGVudCBhdCAo
MTAsMTQwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQorICAo
cmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApIGV4dGVudCBhdCAoMTAsMTQwKSBzaXplIDU1eDUw
KQogKHNldC1pbmxpbmUtZmlsbC1jb2xvcgogICAoY29sb3IgIzAwMDBDODgwKSkKIChmaWxsLXJl
Y3QKLSAgKGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAoMzAsMzAp
IHNpemUgNTV4NTApKQorICAocmVjdCBhdCAoMzAsMzApIHNpemUgNTV4NTApIGV4dGVudCBhdCAo
MzAsMTIwKSBzaXplIDU1eDUwKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IGU5ZjU0MDQx
N2JkNmU1ZGM3Nzg2MTVlNWYzNzk0OTc2ZTQxOTVmOGQuLjU5MGI5M2Y1Yzg5MmNhZTM3ZjQyNDYw
OWE4ZmU0ODAzM2U2NjgzNjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9l
eHRlbnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTksOSArOSw4
IEBACiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNl
LWxlZ2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAo
NDMsNTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCiAg
IChjb2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAg
KGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQz
LDUwKSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQu
dHh0CmluZGV4IGUwNDUyYTE3M2ExYWZlMjM3ZjcyOGQzMGJjMjdlYzYwZWVjOTYyM2QuLjI4Y2Nm
NGMwMTg1OWRlMTkwYjBhOWEyN2ZhMmZlYzAwNjNlZDhlMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1z
LWV4cGVjdGVkLnR4dApAQCAtMTEsMTEgKzExLDEwIEBACiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRo
PTEwIGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1j
b21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUu
NjUpCiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAg
IChjb21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwp
KQorICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41
NXgxODUuNjUpCiAocmVzdG9yZSkKIChzZXQtY3RtCiAgIChzZXQtY3RtIHttPSgoMS4wMCwwLjAw
KSgwLjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYmQ4NzZk
ZjQwM2E0YWRkMGJjMzkxZjdjNjJhYzJiNGMzYmNmN2RhMC4uYmMxN2I1MTE0OTlmODI1NmM5OTI5
MGRhZTg2MTRkNDg5NGNhZjljYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0zLDI5ICszLDI0IEBACiAg
ICh4IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQg
YXQgKDAsMCkgc2l6ZSAxMDR4MTA0KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAg
IChjb2xvciAjMDA4MDAwKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAg
KGJsZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAs
MCkgc2l6ZSAxMDR4MTA0KQogKHNldC1zdGF0ZQogICAoY2hhbmdlLWZsYWdzIDMyOTYwKQogICAo
ZmlsbC1jb2xvciAjMDAwMEZGKQogICAoc3Ryb2tlLXN0eWxlIDApCiAgIChzaG91bGQtYW50aWFs
aWFzIDApKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDIpCiAgIChy
ZWN0IGF0ICgwLDApIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAo
Ym9yZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKIChkcmF3
LXJlY3QKLSAgKGV4dGVudCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCiAgIChyZWN0IGF0ICgwLDEw
Mikgc2l6ZSAxMDR4MikKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhp
Y2tuZXNzIDEuMDApIGV4dGVudCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCiAoZHJhdy1yZWN0Ci0g
IChleHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAyeDEw
NCkKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDAp
IGV4dGVudCBhdCAoMCwwKSBzaXplIDJ4MTA0KQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgx
MDIsMCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQotICAoYm9y
ZGVyLXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0
ICgxMDIsMCkgc2l6ZSAyeDEwNCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYWRk
ZDJjYTQyNTBjMjRhMGM5ZWUyMjU1ZDQyNzVhNzZmNjA0M2VlZC4uYmI1OTNkMjBmNmRhNjQ4NjI5
MmQzNmMwMjIwZTJhOWQ4NzJmODJiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAg
LTMsMTEgKzMsMTAgQEAgcmVjb3JkZWQ6CiAgICh4IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwt
Y29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAgIChy
ZWN0IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBv
c2l0ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChi
bGVuZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogCiByZXBs
YXllZDoKICgK
</data>
<flag name="commit-queue"
          id="430023"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413437</attachid>
            <date>2020-11-06 09:21:04 -0800</date>
            <delta_ts>2020-11-06 10:55:21 -0800</delta_ts>
            <desc>Add missing NO_RETURN_DUE_TO_ASSERT after rebase</desc>
            <filename>bug-218406-20201106092103.patch</filename>
            <type>text/plain</type>
            <size>381051</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNkM2M4YTE3NTNhMzc2
N2Q1MDA5ZGM0ZjIyMzQwMWU0NzNkYTM2My4uNjlhOTk5MDQyMGNhMDg1Y2MwYzM5ODMwYmRhOTk3
N2MxYmEwMjM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxMyBAQAorMjAyMC0xMS0wMyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBFbmNvZGUgZGlzcGxheSBsaXN0IGl0ZW1zIGRpcmVjdGx5IGludG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE4NDA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAg
ICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBkaXNwbGF5IGxpc3RzIChhbmQgZGlzcGxheSBsaXN0IGl0
ZW1zKSBpbiBwcmVwYXJhdGlvbiBmb3IgdXBjb21pbmcgY2hhbmdlcyB0byBhbGxvdyB0aGUKKyAg
ICAgICAgR1BVIGFuZCB3ZWIgcHJvY2Vzc2VzIHRvIGNvbmN1cnJlbnRseSByZWFkIGFuZCB3cml0
ZSBkaXNwbGF5IGxpc3QgaXRlbSBkYXRhLCB3aGljaCBhbGxvd3MgdXMgdG8gYWNoaWV2ZQorICAg
ICAgICBzaWduaWZpY2FudCBpbXByb3ZlbWVudHMgaW4gcGVyZm9ybWFuY2Ugb24gbWFueSBncmFw
aGljcyBiZW5jaG1hcmtzIGluIE1vdGlvbk1hcmsgYnkgcmVtb3Zpbmcgb3ZlcmhlYWQgaW52b2x2
ZWQKKyAgICAgICAgaW4gc2VyaWFsaXppbmcgYW5kIGRlc2VyaWFsaXppbmcgZGlzcGxheSBsaXN0
IGl0ZW1zIG92ZXIgSVBDLiBUbyBpbXBsZW1lbnQgdGhpcywgcmF0aGVyIHRoYW4gdXNpbmcgSVBD
IHRvIGVuY29kZQorICAgICAgICBhbmQgZGVjb2RlIGVhY2ggaXRlbSwgd2Ugd2lsbCBpbnN0ZWFk
IHN0b3JlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJlY3RseSBpbiBtZW1vcnkgc2hhcmVkIGJldHdl
ZW4gdGhlIHdlYiBhbmQgR1BVCisgICAgICAgIHByb2Nlc3Nlcy4KKworICAgICAgICBUaGlzIHN0
cmF0ZWd5LCBvZiBjb3Vyc2UsIHdpbGwgbm90IHdvcmsgZm9yIGRpc3BsYXkgbGlzdCBpdGVtcyB0
aGF0IGNvbnRhaW4gcG9pbnRlcnMuIFVuZm9ydHVuYXRlbHksIHRoaXMKKyAgICAgICAgYWZmZWN0
cyBhbGwgZGlzcGxheSBsaXN0IGl0ZW1zIGF0IHRoZSBtb21lbnQsIHNpbmNlIGFsbCBpdGVtcyBh
cmUgc3ViY2xhc3NlcyBvZiBgRGlzcGxheUxpc3Q6Okl0ZW1gLCBhbmQKKyAgICAgICAgdGhlcmVm
b3JlIGNvbnRhaW4gdnRhYmxlIHBvaW50ZXJzLCBldmVuIGlmIGFsbCBtZW1iZXJzIGFyZSBwbGFp
biBkYXRhIHR5cGVzLiBUaHVzLCB0aGUgZmlyc3Qgc3RlcCB0b3dhcmRzIGJlaW5nCisgICAgICAg
IGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgaXRlbXMgZGlyZWN0bHkgaW4gc2hhcmVkIG1lbW9yeSBp
cyB0byByZW1vdmUgdGhpcyB2dGFibGUgcG9pbnRlciBieSBtYWtpbmcgZGlzcGxheSBsaXN0Cisg
ICAgICAgIGl0ZW1zIG5vIGxvbmdlciBpbmhlcml0IGZyb20gYERyYXdpbmdJdGVtYCBvciBgSXRl
bWAuCisKKyAgICAgICAgQ3VycmVudGx5LCBkaXNwbGF5IGxpc3RzIGFyZSBiYWNrZWQgYnkgYFZl
Y3RvcjxSZWY8SXRlbT4+YDsgaG93ZXZlciwgdGhpcyBubyBsb25nZXIgd29ya3Mgb25jZSBub25l
IG9mIHRoZQorICAgICAgICBkaXNwbGF5IGxpc3QgaXRlbXMgYXJlIGRlc2NlbmRlZCBmcm9tIGEg
Y29tbW9uIGJhc2UgY2xhc3MuIFRvIGFkZHJlc3MgdGhpcywgd2UgaW50cm9kdWNlCisgICAgICAg
IGBEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcmAsIHdoaWNoIGVuY2Fwc3VsYXRlcyBsb2dpYyB0byBt
YW5hZ2Ugb25lIG9yIG1vcmUgZGF0YSBzZWdtZW50cyB0aGF0IGNvbnRhaW4gZGlzcGxheQorICAg
ICAgICBsaXN0IGl0ZW0gZGF0YSAoaS5lLiBkaXNwbGF5IGxpc3QgaXRlbXMgc3RhY2tlZCBhZGph
Y2VudCB0byBlYWNoIG90aGVyIGluIG1lbW9yeSkuIERpc3BsYXkgbGlzdHMgbm93IGFwcGVuZAor
ICAgICAgICBpbmxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIGJ5IGNvbnN0cnVjdGluZyB0aGVzZSBp
dGVtcyBkaXJlY3RseSBpbnNpZGUgdGhlIGl0ZW0gYnVmZmVyIHVzaW5nIHBsYWNlbWVudC1uZXcu
CisKKyAgICAgICAgSG93ZXZlciwgbWFueSB0eXBlcyBvZiBkaXNwbGF5IGxpc3QgaXRlbXMgZG8g
bm90IGNvbnNpc3QgZW50aXJlbHkgb2YgaW5saW5lIGRhdGE7IHNvbWUgb2YgdGhlc2UgYXJlIG9i
dmlvdXMsCisgICAgICAgIHN1Y2ggYXMgYERyYXdJbWFnZWAsIGBEcmF3R2x5cGhzYCwgb3IgYFN0
cm9rZVBhdGhgIChzaW5jZSBhIGBQYXRoYCBtYXkgYmUgYXJiaXRyYXJpbHkgY29tcGxleCkuIE90
aGVyIG91dC1vZi0KKyAgICAgICAgbGluZSBpdGVtIHR5cGVzIGFyZSBsZXNzIG9idmlvdXM6IGZv
ciBpbnN0YW5jZSwgYEZpbGxSb3VuZGVkUmVjdGAgaXMgYW4gb3V0LW9mLWxpbmUgaXRlbSBkdWUg
dG8gdGhlIGZhY3QgdGhhdAorICAgICAgICB0aGUgY29sb3Igb2YgdGhlIHJlY3QgKGBGaWxsUm91
bmRlZFJlY3Q6Om1fY29sb3JgKSBtYXkgYmUgYW4gZXh0ZW5kZWQgY29sb3IsIHdoaWNoIHRoZW4g
Y29udGFpbnMgYSBwb2ludGVyLiBJbgorICAgICAgICB0aGVzZSBjYXNlcywgd2UgY2FuJ3Qgc2lt
cGx5IGVuY29kZSB0aGUgaXRlbSBpbiBzaGFyZWQgbWVtb3J5IGFuZCByZWFkIGl0IGluIHRoZSBH
UFUgcHJvY2Vzcywgc2luY2UgdGhlIHBvaW50ZXIKKyAgICAgICAgKGlmIGl0IHBvaW50ZWQgdG8g
YW55dGhpbmcgb3RoZXIgdGhhbiBudWxsIGluIHRoZSB3ZWIgcHJvY2Vzcykgd2lsbCBwb2ludCB0
byBhcmJpdHJhcnkgbWVtb3J5IGluIHRoZSBHUFUKKyAgICAgICAgcHJvY2Vzcy4gSW5zdGVhZCwg
d2UgY2FuIGxldmVyYWdlIG91ciBleGlzdGluZyBJUEMgaW5mcmFzdHJ1Y3R1cmUgaGVyZSBieSBl
bmNvZGluZyBlYWNoIG9mIHRoZXNlIG91dC1vZi1saW5lCisgICAgICAgIGl0ZW1zIGFzIGRhdGEg
YW5kIGRlY29kaW5nIHRoZW0gZnJvbSB0aGlzIGRhdGEgaW4gdGhlIEdQVSBwcm9jZXNzLiBUbyBk
byB0aGlzLCB3ZSBkZWxlZ2F0ZSBvdXQgdG8gV2ViS2l0MiB0bworICAgICAgICBlbmNvZGUgb3V0
LW9mLWxpbmUgZGlzcGxheSBsaXN0IGl0ZW1zIHVzaW5nIFdlYktpdCdzIGBJUEM6OkVuY29kZXJg
LCBhbmQgcGFzcyBiYWNrIGEgYFNoYXJlZEJ1ZmZlcmAgd2hpY2ggd2UKKyAgICAgICAgdGhlbiBj
b3B5IGludG8gdGhlIGl0ZW0gYnVmZmVyLiBUaGlzIGRlbGVnYXRpb24gaGFwcGVucyB0aHJvdWdo
IHRoZSBgSXRlbUJ1ZmZlcldyaXRpbmdDbGllbnRgIGNsYXNzLCB3aGljaCBoYXMKKyAgICAgICAg
YW4gaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0Mi4gT24gdGhlIGRlY29kaW5nIHNpZGUgaW4gdGhl
IEdQVSBwcm9jZXNzLCB3ZSB0aGVuIGFzayBgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnRgIChpZgor
ICAgICAgICBzZXQpIHRvIGNvbnZlcnQgdGhpcyBlbmNvZGVkIGRhdGEgYmFjayBpbnRvIGEgZGlz
cGxheSBsaXN0IGl0ZW0uIEluIFdlYktpdDIsIHdlIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBh
bmQgdXNlCisgICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGBJUEM6OkRlY29kZXJgIHRvIGRlY29k
ZSB0aGUgZGF0YSB3ZSBzZXJpYWxpemVkIGVhcmxpZXIuCisKKyAgICAgICAgSWYgbm8gY2xpZW50
IGlzIHNwZWNpZmllZCBvciB0aGUgY2xpZW50IGRvZXMgbm90IHJlcXVpcmUgY3VzdG9tIGVuY29k
aW5nL2RlY29kaW5nIGZvciB0aGUgZ2l2ZW4gaXRlbSB0eXBlLCB3ZQorICAgICAgICBmYWxsIGJh
Y2sgdG8gY29uc3RydWN0aW5nIHRoZSBpdGVtIGRpcmVjdGx5IGluc2lkZSB0aGUgd3JpdGFibGUg
aXRlbSBidWZmZXIgZGF0YS4KKworICAgICAgICBUbyBtYWtlIGl0IGVhc2llciB0byByZWFzb24g
YWJvdXQgdGhlc2UgbmV3IChpbmhlcml0YW5jZS1mcmVlKSBkaXNwbGF5IGxpc3QgaXRlbXMsIHdl
IGFkZGl0aW9uYWxseSBpbnRyb2R1Y2UKKyAgICAgICAgYEl0ZW1IYW5kbGVgLCB3aGljaCB3cmFw
cyBhIHBvaW50ZXIgdG8gYSBkaXNwbGF5IGxpc3QgaXRlbSBhbmQgcHJvdmlkZXMgc2V2ZXJhbCBo
ZWxwZXIgbWV0aG9kcy4gVGhlIGZpcnN0IGJ5dGUKKyAgICAgICAgb2YgZWFjaCBpdGVtIGhhbmRs
ZSBhbHdheXMgcG9pbnRzIHRvIGFuIGBJdGVtVHlwZWAsIGFuZCB0aGUgZm9sbG93aW5nIGBOYCBi
eXRlcyBjb250YWluIHRoZSBpdGVtIGl0c2VsZiwgd2hlcmUKKyAgICAgICAgYE5gIGlzIHRoZSBz
aXplIG9mIHRoZSBpdGVtIGNsYXNzLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1
c2UgYW4gYEl0ZW1IYW5kbGVgOgorCisgICAgICAgICAgICAgICAgYERpc3BsYXlMaXN0OjpJdGVt
VHlwZSB0eXBlID0gaXRlbUhhbmRsZS50eXBlKCk7YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50
IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAgICAgICAgICAgYGlmIChpdGVtSGFuZGxlLmlz
PFN0cm9rZVBhdGg+KCkpIHsuLi5gIChSZXBsYWNlcyBpczw+IGluIHRoZSBjdXJyZW50IG1vZGVs
KQorCisgICAgICAgICAgICAgICAgYGF1dG8mIHNldFN0YXRlSXRlbSA9IGl0ZW1IYW5kbGUuZ2V0
PFNldFN0YXRlPigpO2AgKFJlcGxhY2VzIGRvd25jYXN0PD4gaW4gdGhlIGN1cnJlbnQgbW9kZWwp
CisKKyAgICAgICAgICAgICAgICBgaXRlbUhhbmRsZS5hcHBseShteUdyYXBoaWNzQ29udGV4dCk7
YCAoVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50IGluaGVyaXRhbmNlIG1vZGVsKQorCisgICAgICAg
ICAgICAgICAgYGJvb2wgaXNEcmF3aW5nSXRlbSA9IGl0ZW1IYW5kbGUuaXNEcmF3aW5nSXRlbSgp
O2AgKFJlcGxhY2VzIGNoZWNrcyBmb3IgYGlzPERyYXdpbmdJdGVtPihpdGVtKWApCisKKyAgICAg
ICAgV2hlbiB3cml0aW5nIGRpc3BsYXkgbGlzdHMgZm9yIHRoZSBHUFUgcHJvY2VzcywgdGhlIHdy
aXRpbmcgY2xpZW50IChhIGBJdGVtQnVmZmVyV3JpdGluZ0NsaWVudGApIHdpbGwgYmUgYXNrZWQK
KyAgICAgICAgdG8gcHJvdmlkZSBgSXRlbUJ1ZmZlckhhbmRsZWBzIHdoZXJlIHRoZSBpdGVtIGJ1
ZmZlciB3aWxsIHBsYWNlIGl0ZW0gZGF0YSAod2hldGhlciBlbmNvZGVkLCBvciBhcyBhbiBpbmxp
bmUKKyAgICAgICAgb2JqZWN0KS4gSG93ZXZlciwgd2hlbiB1c2luZyBkaXNwbGF5IGxpc3RzIG91
dHNpZGUgb2YgdGhpcyBjb250ZXh0IChlLmcuIGluIG90aGVyIHBhcnRzIG9mIFdlYkNvcmUsIHN1
Y2ggYXMgdGhlCisgICAgICAgIGdseXBoIGRyYXdpbmcgY2FjaGUpLCB3ZSBkb24ndCBoYXZlIGEg
YEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50YC4gVG8gaGFuZGxlIHRoaXMsIHRoZSBpdGVtIGJ1ZmZl
ciBpbnN0ZWFkCisgICAgICAgIGFsbG9jYXRlcyBpdHMgb3duIChub24tc2hhcmVkLW1lbW9yeSkg
YnVmZmVycywgd2hpY2ggaXQgbWFuYWdlcyBhbmQgZGVsZXRlcyB3aGVuIGl0IGlzIGRvbmUuIElm
IGFueSBvdXQtb2YtbGluZQorICAgICAgICBpdGVtcyBhcmUgY29uc3RydWN0ZWQgd2l0aGluIHRo
ZXNlIGJ1ZmZlcnMsIGBJdGVtQnVmZmVyYCB3aWxsIGFkZGl0aW9uYWxseSBjYWxsIHRoZWlyIGRl
c3RydWN0b3JzIHByaW9yIHRvCisgICAgICAgIGRlbGV0aW5nIHRoZXNlIGJ1ZmZlcnMuCisKKyAg
ICAgICAgU2VlIHBlci1jaGFuZ2UgY29tbWVudHMgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I9KToKKworICAgICAgICBJbXBsZW1lbnQgdGhl
IG1vdmUgYXNzaWdubWVudCBvcGVyYXRvciBhbmQgbW92ZSBjb25zdHJ1Y3RvciBieSBleGNoYW5n
aW5nIG93bmVyc2hpcCBvZiB0aGUgaXRlbSBidWZmZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OjpzaG91bGREdW1wRm9yRmxhZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojphc1RleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkdW1wIGNvbnN0KToKKworICAgICAgICBB
ZGp1c3QgdGhlIGZvcm1hdCB3aGVuIHByaW50aW5nIGRpc3BsYXkgbGlzdHMgdG8gYFRleHRTdHJl
YW1gLiBOb3cgdGhhdCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgdHJhY2tlZCBvbiB0aGUKKyAg
ICAgICAgZGlzcGxheSBsaXN0IHJhdGhlciB0aGFuIGJlaW5nIG9uIGVhY2ggZHJhd2luZyBpdGVt
LCB3ZSBwcmludCB0aGVtIG91dCBhZnRlciBlYWNoIGl0ZW0gKGFzIG9wcG9zZWQgdG8gYmVpbmcg
aW4KKyAgICAgICAgdGhlIG1pZGRsZSBvZiBlYWNoIGl0ZW0pLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6OnNpemVJbkJ5dGVzIGNvbnN0KToKKworICAgICAg
ICBUYWxseSB1cCB0aGUgc2l6ZSBvZiB0aGUgZGlzcGxheSBsaXN0IGJ5IHRha2luZyB0aGUgc3Vt
IG9mIHRoZSBzaXplcyBvZiBlYWNoIHJlYWRvbmx5IHNlZ21lbnQsIGFzIHdlbGwgYXMgdGhlCisg
ICAgICAgIHdyaXRhYmxlIGJ1ZmZlciBzaXplLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmlzRW1wdHkgY29uc3QpOgorCisgICAgICAgIEEgRGlzcGxheUxp
c3QgaXMgZW1wdHkgaWYgaXQgY29udGFpbnMgbm8gaXRlbSBkYXRhOiBpbiBvdGhlciB3b3Jkcywg
dGhlcmUgYXJlIG5vIHJlYWRvbmx5IGJ1ZmZlciBzZWdtZW50cywgYW5kCisgICAgICAgIHRoZXJl
IGlzIGFsc28gbm90aGluZyB3cml0dGVuIHRvIHRoZSB3cml0YWJsZSBidWZmZXIgc2VnbWVudC4K
KworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6c2V0SXRlbUJ1
ZmZlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6
OmZvckVhY2hJdGVtQnVmZmVyIGNvbnN0KToKKworICAgICAgICBBZGQgYSBoZWxwZXIgdG8gaXRl
cmF0ZSBvdmVyIGVhY2ggSXRlbUJ1ZmZlckhhbmRsZSBpbiB0aGUgZGlzcGxheSBsaXN0LiBUaGlz
IGluY2x1ZGVzIGFsbCByZWFkb25seSBoYW5kbGVzLCBhbmQKKyAgICAgICAgdGhlbiB0aGUgd3Jp
dGFibGUgaGFuZGxlIChpZiBpdCBleGlzdHMpLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OnNldFRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyk6CisKKyAgICAg
ICAgQWRkIGFuIG9wdGlvbiB0byBhbGxvdyB0aGUgZGlzcGxheSBsaXN0IHRvIHRyYWNrIGRyYXdp
bmcgaXRlbSBleHRlbnRzLiBDdXJyZW50bHksIGRpc3BsYXkgbGlzdHMgYWx3YXlzIHRyYWNrCisg
ICAgICAgIGV4dGVudHMgZm9yIGRyYXdpbmcgaXRlbXM7IGhvd2V2ZXIsIHdoZW4gcHJvcGFnYXRp
bmcgZGlzcGxheSBsaXN0cyB0byB0aGUgR1BVIHByb2Nlc3MgZm9yIHBsYXliYWNrLCB0aGVzZQor
ICAgICAgICBleHRlbnRzIHdlcmUgbmV2ZXIgc2VudCBhbG9uZyB3aXRoIElQQywgYW5kIHNvIHRo
aXMgZW5kZWQgdXAganVzdCBiZWluZyB1bm5lY2Vzc2FyeSB3b3JrLiBBZGRpdGlvbmFsbHksIHRo
ZQorICAgICAgICBpbml0aWFsIGNsaXAgaW4gdGhlIEdQVSBwcm9jZXNzIGlzIGFsc28gbmV2ZXIg
c2V0LCBzbyBjb21wdXRpbmcgdGhlc2UgZXh0ZW50cyBuZXZlciBoZWxwZWQuCisKKyAgICAgICAg
VGhhdCBzYWlkLCBkcmF3aW5nIGl0ZW0gZXh0ZW50cyBhcmUgc3RpbGwgcHJpbnRlZCBvdXQgZm9y
IHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdGhpcworICAgICAg
ICBsb2dpYyBpbnRhY3Q7IHRoaXMgcmVmYWN0b3Jpbmcgb25seSBkaXNhYmxlcyBleHRlbnQgY29t
cHV0YXRpb24gZm9yIGRpc3BsYXkgbGlzdHMgYmVpbmcgc2VudCB0byB0aGUgR1BVIHByb2Nlc3MK
KyAgICAgICAgdmlhIHJlbW90ZSBpbWFnZSBidWZmZXJzLiBJbiBhIGZ1dHVyZSBwYXRjaCwgd2Ug
Y291bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0IGRyYXdpbmcgaXRlbXMgY29udGFpbiBleHRlbnQg
cmVjdHMKKyAgICAgICAgYXMgaW5saW5lIGRhdGEgdGhhdCBjYW4gYmUgY29uc3VsdGVkIGluIHRo
ZSBHUFUgcHJvY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjphcHBlbmQpOgorCisgICAgICAgIERpc3BsYXkgbGlzdCBpdGVtcyBhcmUgbm8gbG9uZ2Vy
IGNvbnN0cnVjdGVkIGFoZWFkIG9mIHRpbWUsIGFuZCB0aGVuIGFwcGVuZGVkIHRvIHRoZSBkaXNw
bGF5IGxpc3QuIEluc3RlYWQsCisgICAgICAgIGBhcHBlbmRgIG5vdyB0YWtlcyB0aGUgdHlwZSBv
ZiB0aGUgaXRlbSB0byBhcHBlbmQgYXMgYSB0ZW1wbGF0ZSB0eXBlbmFtZSBhcmd1bWVudCwgYXMg
d2VsbCBhcyB0aGUgYXJndW1lbnRzIHRoYXQKKyAgICAgICAgd2lsbCBiZSB1c2VkIHRvIGNvbnN0
cnVjdCB0aGUgaXRlbS4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0OjppdGVyYXRvcjo6YXRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6dXBkYXRlQ3VycmVudEl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6YWR2YW5jZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjpjbGVh
ckN1cnJlbnRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6aXRlcmF0b3I6Om1vdmVUb0VuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjptb3ZlQ3Vyc29yVG9TdGFydE9mQ3VycmVudEJ1ZmZlcik6
CisKKyAgICAgICAgSW1wbGVtZW50IGEgQysrIGl0ZXJhdG9yIGZvciBEaXNwbGF5TGlzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBjb2RlIGxpa2UgdGhpczoKKyAgICAgICAgYGBg
CisgICAgICAgIC8vIFN1cHBvc2UgZGlzcGxheUxpc3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0LgorICAgICAgICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiBk
aXNwbGF5TGlzdCkgeworICAgICAgICAgICAgICAgIC8vIERvIHRoaW5ncyB3aXRoIGl0ZW0sIHdo
aWNoIGlzIGEgRGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUuCisgICAgICAgICAgICAgICAgLy8gTWF5
YmUgZG8gdGhpbmdzIHdpdGggZXh0ZW50LCB3aGljaCBpcyBhbiBPcHRpb25hbDxGbG9hdFJlY3Q+
LgorICAgICAgICB9CisgICAgICAgIGBgYAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q6OnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjp+
aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDo6YmVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjplbmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQnVm
ZmVySWZFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0OjphZGREcmF3aW5nSXRlbUV4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3Q6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbTo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbTo6aXNEcmF3aW5nSXRlbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q6Omxpc3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjppdGVtQXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Ojppc0VtcHR5IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDo6YXBwZW5kSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q6Omxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAgICAg
IFJlbW92ZSB0aGUgYWJpbGl0eSB0byBgZW5jb2RlYCBhbmQgYGRlY29kZWAgZGlzcGxheSBsaXN0
cywgZm9yIHRoZSB0aW1lIGJlaW5nLiBGb3IgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUK
KyAgICAgICAgd2ViIGFuZCBHUFUgcHJvY2Vzc2VzLCB3ZSBub3cgdXNlIGBTaGFyZWREaXNwbGF5
TGlzdEhhbmRsZWAuCisKKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBkb2VzIG1lYW4gdGhh
dCB0aGUgZXh0YW50IGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIGRpc3BsYXkgbGlzdCBpdGVtIHdp
bGwgYmUgYnJva2VuIGZvciB0aGUKKyAgICAgICAgdGltZSBiZWluZy4gSW4gYSBmb2xsb3d1cCBw
YXRjaCwgSSBwbGFuIHRvIHJlaW1wbGVtZW50IGBEaXNwbGF5TGlzdDo6ZW5jb2RlYCBhbmQgYGRl
Y29kZWAgaW4gdGhlIG5ldyBpbmxpbmUgaXRlbQorICAgICAgICBtb2RlbCBieSBlbmNvZGluZyBl
YWNoIGl0ZW0gKGVpdGhlciBhcyBpbmxpbmUgZGF0YSBvciB2aWEgYElQQzo6RW5jb2Rlcjo6ZW5j
b2RlU2luZ2xlT2JqZWN0YCkuIEhvd2V2ZXIsIHRoaXMgaXMKKyAgICAgICAgY29udGluZ2VudCBv
biBhbGwgZGlzcGxheSBsaXN0IGl0ZW0gdHlwZXMgKGUuZy4gYERyYXdJbWFnZWAgYW5kIGBEcmF3
R2x5cGhgKSBub3QgcmVseWluZyBvbiBgSVBDOjpBdHRhY2htZW50YAorICAgICAgICBmb3IgZW5j
b2RpbmcsIHNvIHN1cHBvcnQgZm9yIGBDbGlwVG9EcmF3aW5nQ29tbWFuZHNgIHdpbGwgbmVlZCB0
byB3YWl0IHVudGlsIGFmdGVyIGZvbnRzIGFuZCBpbWFnZXMgYXJlIHdvcmtpbmcuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdJbWFnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVySGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdH
bHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyV2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OmRyYXdHbHlwaHMp
OgorCisgICAgICAgIENoYW5nZSB0aGVzZSB0byB1c2UgdGhlIG5ldyB0ZW1wbGF0ZWQgYERpc3Bs
YXlMaXN0OjphcHBlbmRgIG1ldGhvZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnRha2VEaXNwbGF5TGlzdCk6CisKKyAgICAg
ICAgVXNlIGBzdGQ6OmV4Y2hhbmdlYCBpbnN0ZWFkIG9mIGBXVEZNb3ZlYC4gVGhpcyBpcyBhY3R1
YWxseSBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIChpLmUuIG5vCisg
ICAgICAgIGxlYWtzIG9yIGRvdWJsZS1mcmVlaW5nKSwgc2luY2UgdGhlIGBEaXNwbGF5TGlzdGAg
aW5zdGFuY2UgdGhhdCBpcyBiZWluZyBtb3ZlZCBmcm9tIG5lZWRzIHRvIGJlIGVtcHR5IHNvIHRo
YXQgaXQKKyAgICAgICAgZG9lcyBub3QgdHJ5IHRvIGNhbGwgZGVzdHJ1Y3RvcnMgb24gdGhlIGl0
ZW1zIGZvcm1lcmx5IGluc2lkZSBvZiBpdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZTo6ZGVzdHJveSk6CisKKyAgICAgICAgQWRkIGhl
bHBlciBtZXRob2RzIHRvIGFwcGx5IGEgZGlzcGxheSBsaXN0IGl0ZW0gdG8gYSBgR3JhcGhpY3ND
b250ZXh0YCBhbmQgY2FsbCB0aGUgZGlzcGxheSBsaXN0IGl0ZW0ncworICAgICAgICBkZXN0cnVj
dG9yLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
SGFuZGxlOjpjb3B5VG8gY29uc3QpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBtZXRob2QgdG8g
Y29weSB0aGUgaXRlbSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBoYW5kbGUgKGNhbGxpbmcgdGhlIGNv
cHkgY29uc3RydWN0b3Igb2YgdGhlIGl0ZW0gdHlwZQorICAgICAgICBpbiB0aGUgcHJvY2Vzcyku
IFRoaXMgaXMgdXNlZCB3aGVuIGNvcHlpbmcgYSB2YWxpZGF0ZWQgZGlzcGxheSBsaXN0IGl0ZW0g
aW50byB0aGUgdGVtcG9yYXJ5IGl0ZW0gYnVmZmVyIGluCisgICAgICAgIGBEaXNwbGF5TGlzdDo6
aXRlcmF0b3JgLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
SXRlbUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6
fkl0ZW1CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Om1fYWxsb2NhdGVk
QnVmZmVycyk6CisKKyAgICAgICAgSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm8gYG1fd3Jp
dGluZ0NsaWVudGAgKGZvciBpbnN0YW5jZSwgd2hlbiB1c2luZyBpbi1wcm9jZXNzIGBEaXNwbGF5
TGlzdGBzIHRvIG9wdGltaXplCisgICAgICAgIHRleHQgcGFpbnRpbmcpLCB0aGUgZGlzcGxheSBs
aXN0IGl0ZW0gYnVmZmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcg
ZGF0YSBidWZmZXJzLiBBcyBzdWNoLCBpdAorICAgICAgICBuZWVkcyB0byByZW1lbWJlciB0byBm
cmVlIGFueSBidWZmZXJzIHRoYXQgaXQgYWxsb2NhdGVkIHdoZW4gYXBwZW5kaW5nLCBhbmQgbXVz
dCBhbHNvIGRlc3Ryb3kgYW55IG91dC1vZi1saW5lCisgICAgICAgIGRpc3BsYXkgbGlzdCBpdGVt
cyAoaS5lLiBpdGVtcyB3aXRoIG5vbnRyaXZpYWwgZGVzdHJ1Y3RvcnMpIHdoZW4gaXQgaXMgZmlu
aXNoZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjptX3JlYWRPbmx5QnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0YWJsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6bV93cml0dGVuTnVtYmVyT2ZCeXRlcyk6CisK
KyAgICAgICAgU2VlIG1haW4gQ2hhbmdlTG9nIGVudHJ5IGFib3ZlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmNyZWF0ZUl0ZW1C
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OmZvckVh
Y2hJdGVtQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
QnVmZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
cjo6c3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1CdWZmZXI6OmFwcGVuZERhdGFBbmRMZW5ndGgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlckhhbmRsZTo6b3BlcmF0
b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZl
ckhhbmRsZTo6b3BlcmF0b3IhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtSGFuZGxlOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpvcGVyYXRvciEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGU6OmlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlOjpnZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Ojp+SXRlbUJ1ZmZlcldyaXRpbmdD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJSZWFkaW5n
Q2xpZW50Ojp+SXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcjo6cmVhZE9ubHlCdWZmZXJzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyOjp1bmNoZWNrZWRBcHBlbmQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcDoKKworICAgICAgICBUaGUgY2hhbmdlcyBpbiB0aGlzIGZpbGUgbWFrZSB1cCBtb3N0IG9m
IHRoZSBjb2RlIGNodXJuIGluIHRoaXMgcGF0Y2gsIGJ1dCB0aGUgY2hhbmdlcyBhcmUgbW9zdGx5
IG1lY2hhbmljYWwuIEluCisgICAgICAgIHN1bW1hcnksIHRoaXMgcGF0Y2g6CisgICAgICAgIC0g
QWRkIHN0YXRpYyBjb25zdGV4cHJzIGZvciB0aGUgYEl0ZW1UeXBlYCBvZiBlYWNoIGRpc3BsYXkg
bGlzdCBpdGVtIGNsYXNzLCBhcyB3ZWxsIGFzIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MKKyAg
ICAgICAgICBpcyBpbmxpbmUsIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IGVhY2ggY2xhc3MgaXMg
YSBkcmF3aW5nIGl0ZW0uCisgICAgICAgIC0gUmVtb3ZlIGBlbmNvZGVgIGFuZCBgZGVjb2RlYCBt
ZXRob2RzIGZyb20gaW5saW5lIGl0ZW0gY2xhc3Nlcy4KKyAgICAgICAgLSBSZW1vdmUgYWxsIG92
ZXJyaWRkZW4gbWV0aG9kczsgZWFjaCBjbGFzcyBub3cgaW1wbGVtZW50cyBpbmRpdmlkdWFsIG1l
dGhvZHMgdG8gYGFwcGx5YCwgY29tcHV0ZQorICAgICAgICAgIGBnbG9iYWxCb3VuZHNgIChpZiBh
cHBsaWNhYmxlKSwgYW5kIGNvbXB1dGUgYGxvY2FsQm91bmRzYCAoYWdhaW4sIGlmIGFwcGxpY2Fi
bGUpLgorICAgICAgICAtIEFkanVzdHMgdGV4dHN0cmVhbSBkdW1waW5nIGhlbHBlcnMsIHNvIHRo
YXQgdGhleSBubyBsb25nZXIgZHVtcCBhcyBhIGBEcmF3aW5nSXRlbWAgYmVmb3JlIGR1bXBpbmcg
ZWFjaCBtZW1iZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVG
aWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3RhdGU6OlNldFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpEcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpEcmF3UGF0dGVybik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpE
cmF3Rm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0V2l0aEdyYWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFtZUZvck1lZGlh
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpJdGVtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06OkRyYXdpbmdJ
dGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpTYXZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpSZXN0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6
OlRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90
YXRlOjpSb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNj
YWxlOjpTY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
Q1RNOjpTZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNv
bmNhdGVuYXRlQ1RNOjpDb25jYXRlbmF0ZUNUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6U2V0TGluZUpv
aW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGlt
aXQ6OlNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNsZWFyU2hhZG93OjpDbGVhclNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcDo6Q2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcE91dDo6Q2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aDo6Q2xpcE91dFRvUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OkNsaXBUb0RyYXdpbmdDb21tYW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0dseXBoczo6bG9jYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6RHJhd0ltYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6RHJhd1RpbGVk
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxl
ZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdSZWN0OjpEcmF3UmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmU6OkRy
YXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpEcmF3
UGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3Vz
UmluZ1BhdGg6OkRyYXdGb2N1c1JpbmdQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdDo6RmlsbFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0OjpGaWxsQ29tcG9zaXRlZFJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVjdDo6RmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OkZpbGxQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6RmlsbEVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRp
YTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJv
a2VSZWN0OjpTdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjpTdHJv
a2VQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJl
Y3Q6OkNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OkVu
ZFRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpBcHBseVN0cm9rZVBhdHRlcm46OkFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6QXBwbHlGaWxs
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlE
ZXZpY2VTY2FsZUZhY3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTYXZlOjpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2F2ZTo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVzdG9yZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OlRy
YW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRl
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJv
dGF0ZTo6Um90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6
Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2Nh
bGU6OlNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTY2FsZTo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpnbG9i
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENUTTo6
U2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06OmxvY2FsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRDVE06Omdsb2Jh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q29uY2F0ZW5h
dGVDVE06OkNvbmNhdGVuYXRlQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
b25jYXRlbmF0ZUNUTTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6bG9jYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpjb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENv
bG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldElubGluZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNvbG9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6bG9j
YWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6U2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OnRoaWNrbmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlVGhpY2tuZXNzOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlNldFN0YXRlOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6U2V0TGluZUNhcCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZURhc2g6OlNldExpbmVEYXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6bG9jYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExp
bmVEYXNoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVK
b2luOjpTZXRMaW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGlu
ZUpvaW46OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRMaW5lSm9pbjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0Ojpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6Z2xvYmFsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRvdzo6bG9jYWxC
b3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyU2hhZG93
OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNs
aXA6OkNsaXApOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OnJlY3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXA6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OkNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OkNs
aXBPdXRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXRUb1Bh
dGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpD
bGlwT3V0VG9QYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBPdXRUb1BhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Q2xpcFBhdGg6OkNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Omxv
Y2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNvZGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kczo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzOjpnbG9iYWxCb3VuZHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHM6OmxvY2Fs
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlw
aHM6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlOjpE
cmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZTo6Z2xv
YmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3SW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U6OkRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3VGlsZWRJbWFnZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2Nh
bGVkSW1hZ2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6ZGVjb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OkRyYXdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ltYWdlQnVmZmVyOjpn
bG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJ
bWFnZUJ1ZmZlcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3TmF0aXZlSW1hZ2U6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdlOjpkZXN0aW5hdGlvblJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZTo6Z2xvYmFsQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TmF0aXZlSW1h
Z2U6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3TmF0aXZlSW1hZ2U6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1BhdHRlcm46OkRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UGF0dGVybjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXR0ZXJuOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXI6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpsb2NhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RW5kVHJhbnNwYXJlbmN5TGF5
ZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd1JlY3Q6OkRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
UmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3UmVjdDo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lOjpEcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd0xpbmU6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd0xpbmVzRm9yVGV4dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3TGluZXNGb3JUZXh0OjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OkRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OkRyYXdFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3RWxsaXBzZTo6cmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6RHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpnbG9iYWxCb3Vu
ZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjpsb2Nh
bEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdGg6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Bh
dGg6OkRyYXdGb2N1c1JpbmdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3Rm9jdXNSaW5nUGF0aDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUmVjdHM6Omdsb2JhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpGaWxsUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3Q6OnJlY3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpnbG9iYWxCb3VuZHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0Ojpsb2NhbEJvdW5k
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29s
b3I6OkZpbGxSZWN0V2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUmVjdFdpdGhDb2xvcjo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpyZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFk
aWVudDo6Z3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Ojpsb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRl
Y29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRSZWN0
OjpGaWxsQ29tcG9zaXRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxDb21wb3NpdGVkUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsQ29tcG9zaXRlZFJlY3Q6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJvdW5kZWRSZWN0OjpGaWxsUm91
bmRlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSb3VuZGVkUmVj
dDo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpG
aWxsUm91bmRlZFJlY3Q6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5l
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElu
bGluZVBhdGg6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsUGF0aDo6RmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OkZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpGaWxsRWxsaXBzZTo6Z2xvYmFsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpGaWxsRWxsaXBzZTo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6aW1hZ2VEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmxvY2FsQm91bmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6Omds
b2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1h
Z2VEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1
dEltYWdlRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWlu
dEZyYW1lRm9yTWVkaWE6OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6U3Ryb2tlUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpTdHJv
a2VJbmxpbmVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxp
bmVQYXRoOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6OlN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlN0cm9rZVBhdGg6Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U3Ryb2tlUGF0aDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTdHJva2VFbGxpcHNlOjpTdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpyZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VFbGxpcHNlOjpnbG9iYWxCb3VuZHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Q2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OnJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6Z2xvYmFsQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmxvY2FsQm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0cm9rZVBhdHRlcm46
OmxvY2FsQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBs
eVN0cm9rZVBhdHRlcm46Omdsb2JhbEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RmlsbFBhdHRlcm46Omdsb2JhbEJvdW5kcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3Rvcjo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6bG9jYWxCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Omdsb2JhbEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0l0ZW06
OnNldEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0l0ZW06OmV4dGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0l0ZW06OmV4dGVudEtub3duIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nSXRlbTo6bG9jYWxCb3VuZHMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdJdGVtOjpn
bG9iYWxCb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNhdmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2F2ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTYXZlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlc3RvcmU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6UmVzdG9yZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZXN0b3JlOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlRyYW5zbGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpUcmFuc2xhdGU6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6VHJhbnNsYXRlOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJvdGF0ZTo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSb3RhdGU6OmVuY29kZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Um90YXRlOjpkZWNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxlOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNjYWxl
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldENU
TTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRD
VE06OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0Q1RNOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkNvbmNhdGVuYXRlQ1RNOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNvbmNhdGVuYXRlQ1RNOjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVu
dDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsR3JhZGllbnQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZW5j
b2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJ
bmxpbmVGaWxsQ29sb3I6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lQ2FwOjpjcmVhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVDYXA6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TGluZUNhcDo6ZGVjb2Rl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5lRGFzaDo6
Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRMaW5l
Sm9pbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRMaW5lSm9pbjo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpTZXRMaW5lSm9pbjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRNaXRlckxpbWl0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldE1pdGVyTGltaXQ6OmVuY29kZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0TWl0ZXJMaW1pdDo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclNoYWRv
dzo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVh
clNoYWRvdzo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpDbGVhclNoYWRvdzo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpDbGlwOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkNsaXA6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Q2xpcDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkNsaXBPdXQ6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dDo6ZGVjb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlwT3V0VG9QYXRoOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21t
YW5kczo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3R2x5cGhzOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZTo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd05hdGl2ZUltYWdl
OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQ
YXR0ZXJuOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpCZWdpblRyYW5zcGFyZW5j
eUxheWVyOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVyOjplbmNvZGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkVuZFRyYW5zcGFyZW5jeUxheWVy
OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdS
ZWN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdSZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdMaW5lOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lOjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0VsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0Vs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd0VsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1JlY3RzOjpjcmVhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjpjcmVhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0OjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxS
ZWN0OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSZWN0V2l0aENvbG9yOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdDo6Y3JlYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUm91bmRlZFJlY3Q6OmNy
ZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmRlY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmNyZWF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVsbGlwc2U6
OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbEVs
bGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RmlsbEVsbGlwc2U6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OlBhaW50RnJhbWVGb3JNZWRpYTo6ZW5jb2RlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWE6
OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tl
UmVjdDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VSZWN0OjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVJlY3Q6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjplbmNvZGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBh
dGg6OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ry
b2tlUGF0aDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTdHJva2VFbGxpcHNlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZUVsbGlwc2U6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlRWxsaXBzZTo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGVhclJlY3Q6OmNyZWF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xlYXJSZWN0OjplbmNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsZWFyUmVjdDo6
ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseVN0
cm9rZVBhdHRlcm46OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6QXBwbHlTdHJva2VQYXR0ZXJuOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5U3Ryb2tlUGF0dGVybjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseUZpbGxQYXR0ZXJuOjpj
cmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5Rmls
bFBhdHRlcm46OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6QXBwbHlGaWxsUGF0dGVybjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkFwcGx5RGV2aWNlU2NhbGVGYWN0
b3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OmRlY29kZSk6IERlbGV0ZWQuCisKKyAgICAg
ICAgRGVsZXRlIHRoZSBnZW5lcmljIGBJdGVtOjplbmNvZGVgIGFuZCBgSXRlbTo6ZGVjb2RlYCBt
ZXRob2RzLCBzaW5jZSBvbmx5IG91dC1vZi1saW5lIGRpc3BsYXkgbGlzdCBpdGVtcyBoYXZlCisg
ICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGZ1bmN0aW9ucyBub3cuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmFwcGVuZFN0YXRlQ2hhbmdlSXRl
bSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUNhcCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNldExpbmVEYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzZXRNaXRlckxpbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd1RpbGVkSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnNhdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpyZXN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjpjb25jYXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlY29yZGVyOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmRyYXdQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwbHlGaWxsUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsaXApOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFj
dG9yKToKKworICAgICAgICBDaGFuZ2UgdGhlc2UgbWV0aG9kcyB0aGF0IGFwcGVuZCBkaXNwbGF5
IGxpc3QgaXRlbXMgZW4gbWFzc2UsIHN1Y2ggdGhhdCB0aGV5IGdvIGZyb20gdGhpczoKKworICAg
ICAgICAgICAgICAgIGBtX2Rpc3BsYXlMaXN0LmFwcGVuZChGb286OmNyZWF0ZShhcmcxLCBhcmcy
LCBhcmczKSk7YAorCisgICAgICAgIC4uLnRvIHRoaXM6CisKKyAgICAgICAgICAgICAgICBgbV9k
aXNwbGF5TGlzdC5hcHBlbmQ8Rm9vPihhcmcxLCBhcmcyLCBhcmczKTtgCisKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmFwcGVuZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlY29yZGVyOjp1cGRhdGVJdGVtRXh0ZW50IGNvbnN0KTogRGVsZXRlZC4KKworICAg
ICAgICBFeHRlbnRzIGFyZSBub3cgYXV0b21hdGljYWxseSB1cGRhdGVkICh1bmxlc3Mgb3RoZXJ3
aXNlIHNwZWNpZmllZCkgZm9yIGFueSBkcmF3aW5nIGl0ZW1zIHRoYXQgYXJlIGFwcGVuZGVkLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5k
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZXBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OnJl
cGxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVwbGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6
RGVsZWdhdGU6OmFwcGx5KToKKwogMjAyMC0xMS0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIGxvY2FsQ2FyZXRPZmZzZXQg
c2hvdWxkIHVzZSBpdGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBmOTYzYzA4YTVmYThhYmY0ZTA5YTA4MzE1
NzcyNTg3YjI2Y2M4OWIzLi5hYTk2MzdhZDZmZGRkZGQ1MjJiMTc2NzM2Y2FmN2RmMzVkZGE2NDA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDIwLTExLTAzICBXZW5zb24gSHNpZWggIDx3
ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb25jdXJyZW50IGRpc3BsYXkgbGlz
dHNdIEVuY29kZSBkaXNwbGF5IGxpc3QgaXRlbXMgZGlyZWN0bHkgaW50byBzaGFyZWQgbWVtb3J5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg0MDYK
KworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkanVzdCBmb3Ig
Y2hhbmdlcyB0byBkaXNwbGF5IGxpc3RzIGFuZCBkaXNwbGF5IGxpc3QgaXRlbXMgaW4gV2ViQ29y
ZSAoc2VlIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBmb3IgbW9yZQorICAgICAgICBpbmZvcm1h
dGlvbikuIEluIHBhcnRpY3VsYXIsIHdlIGltcGxlbWVudCB0aGUgcmVhZGluZyBhbmQgd3JpdGlu
ZyBjbGllbnQgaG9va3MgY29uc3VsdGVkIGJ5IEl0ZW1CdWZmZXIsIGFuZCB3ZQorICAgICAgICBh
bHNvIGFkZCBhIHRlbXBvcmFyeSBtZWNoYW5pc20gdGhhdCBhbGxvd3MgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IChpbiB0aGUgd2ViIHByb2Nlc3MpIHRvIHNlbmQgZGlzcGxheSBsaXN0Cisg
ICAgICAgIGl0ZW0gZGF0YSB0aHJvdWdoIHNoYXJlZCBtZW1vcnkgdG8gdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgKGluIHRoZSBHUFUgcHJvY2VzcykuIFRoaXMgdGVtcG9yYXJ5IG1lY2hhbmlz
bQorICAgICAgICBkb2VzIG5vdCBhdHRlbXB0IHRvIG1ha2UgYW55IHJlYWRpbmcgb3Igd3JpdGlu
ZyBpbiBzaGFyZWQgbWVtb3J5IGNvbmN1cnJlbnQgYmV0d2VlbiB0aGUgR1BVIGFuZCB3ZWIgcHJv
Y2Vzc2VzLAorICAgICAgICBhbmQgZXhpc3RzIG9ubHkgdG8gbWFrZSBzdXJlIHRoYXQgcmVuZGVy
aW5nIHdpdGggdGhlIEdQVSBwcm9jZXNzIHN0aWxsIHdvcmtzIHVzaW5nIHRoZXNlIG5ldyBkaXNw
bGF5IGxpc3QgaXRlbXMuCisKKyAgICAgICAgSW4gdGhlIG5leHQgcGF0Y2gsIEkgd2lsbCBhZGQg
YSBzaW1wbGUgY29uY3VycmVudCByZWFkZXIvd3JpdGVyIG1vZGVsIGZvciBkaXNwbGF5IGxpc3Qg
cHJvY2Vzc2luZyBiZXR3ZWVuIHRoZQorICAgICAgICB3ZWIgYW5kIEdQVSBwcm9jZXNzZXMsIGFu
ZCAoaW4gZG9pbmcgc28pIHJldmVydCBtb3N0IG9mIHRoZSBjaGFuZ2VzIGluIGBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kYCBhbmQKKyAgICAgICAgYFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eWAg
YmVsb3cuCisKKyAgICAgICAgU2VlIGNvbW1lbnRzIGJlbG93IGZvciBtb3JlIGRldGFpbC4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmRlY29kZUFuZENyZWF0ZSk6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6YXBwbHlSZXNvdXJjZUl0ZW0pOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjphcHBseU1lZGlhSXRlbSk6
CisKKyAgICAgICAgUmVmYWN0b3IgdGhlc2UgdG8gdGFrZSBgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1IYW5kbGVgLgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmFwcGx5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpmbHVzaERpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAg
KiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46
CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVk
L1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlOjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSk6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlOjpjcmVhdGVEaXNwbGF5TGlzdCBjb25z
dCk6CisgICAgICAgICogU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0SGFuZGxlLmg6IEFkZGVkLgor
CisgICAgICAgIEFkZCBhIFdlYktpdDIgaGVscGVyIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBkaXNw
bGF5IGxpc3QgZGF0YSBpbiBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgcHJvcGFnYXRlZCBmcm9tIHRo
ZSB3ZWIKKyAgICAgICAgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuIEluIHRoZSBuZXh0IHBh
dGNoLCB0aGlzIGNsYXNzIHdpbGwgYmUgcmV3cml0dGVuIHRvIHN1cHBvcnQgY29uY3VycmVudCBk
aXNwbGF5IGxpc3QKKyAgICAgICAgcmVhZGluZyBhbmQgd3JpdGluZywgd2l0aCBzcGVjaWFsaXpl
ZCBzdWJjbGFzc2VzIGluIHNlcnZpY2Ugb2YgYm90aCB0aGUgcmVhZGVyIChpLmUuIHRoZSBHUFUg
cHJvY2VzcykgYW5kIHRoZQorICAgICAgICB3cml0ZXIgKGkuZS4gdGhlIHdlYiBwcm9jZXNzKS4K
KworICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxh
eUxpc3RIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6
OmRlY29kZSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxheUxpc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmZsdXNoRGlzcGxh
eUxpc3RBbmRDb21taXQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZUl0ZW1CdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHku
Y3BwOgorCiAyMDIwLTExLTA1ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEVuY29kaW5nIFB1dEltYWdlRGF0YSBzaG91bGQgbm90IHNlcmlhbGl6ZSBz
ZXBhcmF0ZSBJUEMgYXR0YWNobWVudHMgZm9yIHRoZSBpbWFnZSBkYXRhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCBiMzUxNWQzZDViN2Y3M2Y3OTYxMzk2MGJlMDRiMzdiNDU3OTIyOTgxLi5hNDNjMjA1
ODE2NWU4NDU5M2Y4OTRjNmFjYmU2ODQyZTJiY2E1ZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTEyNTMsNiArMTI1Myw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbVR5cGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGE0ZTczMTdiMzMwOTYw
MmRmYTliNTU3MGQzNTZjOGJiYjMzYjg0NDMuLmY3NDNkZGE1Yjc5MGRlZWY1ZmE1NGViYTVlNTE4
YzMwZGFjZjdlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTYzLDYgKzE5NjMsNyBAQCBwbGF0Zm9y
bS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVMaWdodGluZ05FT04uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1UeXBlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4NWQ2MmUyMjEzMWIyY2Qw
ZDk3MTk0YjVkOWI0ZDBiNmQ3YTc3YmE3Li41NDI5OWJiMGNhY2NhZjI3YjAyZTQ5NGUzMzJkYmRh
MTU4ZDFmNzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC01MjAyLDYgKzUyMDIsNyBAQAogCQlGNEM1RjIwNzI0NzlFODgyMDBF
OUI0RjUgLyogQ2xpcGJvYXJkSW1hZ2VSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0QzVGMjA1MjQ3OUU3RUUwMEU5QjRGNSAvKiBDbGlwYm9h
cmRJbWFnZVJlYWRlci5oICovOyB9OwogCQlGNEQwNzU1ODIzNEQ4MjJEMDA4ODFFNzMgLyogQ2xp
cGJvYXJkSXRlbURhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NkM0NDdBMjM0NjUzNUUwMDM5QTc5RCAvKiBDbGlwYm9hcmRJdGVtRGF0
YVNvdXJjZS5oICovOyB9OwogCQlGNEQwNzU1OTIzNEQ4MjMzMDA4ODFFNzMgLyogQ2xpcGJvYXJk
SXRlbVBhc3RlYm9hcmREYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDZDNDQ4MDIzNDY1NDdBMDAzOUE3OUQgLyogQ2xpcGJvYXJkSXRl
bVBhc3RlYm9hcmREYXRhU291cmNlLmggKi87IH07CisJCUY0RDQwQkM5MjU1NDYzQkYwMDcyMTM0
OSAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBEaXNwbGF5TGlz
dEl0ZW1CdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlGNEQ0M0Q2NjIxODgwMzhCMDBFQ0VDQUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnRE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEQ0
M0Q2NDIxODgwMkU2MDBFQ0VDQUMgLyogU2VyaWFsaXplZEF0dGFjaG1lbnREYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjRFNTdFREMyMTNG
M0Y1RjAwNEVBOThFIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEU1N0VEQTIxM0YzRjVGMDA0RUE5OEUgLyog
Rm9udEF0dHJpYnV0ZUNoYW5nZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGNEU1N0VFMTIxM0Y0MzRBMDA0RUE5OEUgLyogV2ViQ29yZU5TRm9u
dE1hbmFnZXJFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0RTU3RURGMjEzRjQzNEEwMDRFQTk4RSAvKiBXZWJDb3JlTlNGb250TWFuYWdlckV4
dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xNjMzOCw2ICsxNjMzOSw4IEBACiAJCUYzRDQ2MTQ3MTE2MUQ1MzIwMENBMEQwOSAvKiBKU0Vy
cm9ySGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Vycm9ySGFu
ZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NTIzNjNCNThDMDAw
NDQ1NTAgLyogRW50ZXJLZXlIaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVudGVyS2V5SGludC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDAzRTc4NjIzNjNCNThDMDAwNDQ1NTAgLyog
RW50ZXJLZXlIaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVudGVyS2V5SGludC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI1MjUzRjcwNjUwMDRFNzdFOCAvKiBE
aXNwbGF5TGlzdEl0ZW1CdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJdGVtQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0MjJCOEI2MjUzRjcwNjUwMDRF
NzdFOCAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlz
cGxheUxpc3RJdGVtQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQy
OTI2MTcyNTI2NEQ0NDAwMDA3ODk4IC8qIE1lZGlhUGxheWVySWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVBsYXllcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRjQyQ0VCNTQyMTQwMzFFRTAwMkRDQTcyIC8qIEZvbnRBdHRyaWJ1dGVDaGFuZ2VzQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGb250QXR0cmlidXRlQ2hhbmdlc0NvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDMzRTkwMjFEQkJEQkEyMDBFRjBEMTQg
LyogU3RhdGljUGFzdGVib2FyZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dGF0aWNQYXN0ZWJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzY0Nyw2
ICsxNzY1MCw4IEBACiAJCQkJNTVDMEEyOTUyM0ZFMkNFMDAwRjJDQjkzIC8qIERpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuY3BwICovLAogCQkJCTcyRUEwOUY5MjNGQ0NDNkEwMDg1MDRBNSAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJNzJFQTA5RjcyM0ZDQ0IzRDAwODUw
NEE1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKKwkJCQlGNDIyQjhCNjI1M0Y3MDY1
MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcCAqLywKKwkJCQlGNDIyQjhCNTI1
M0Y3MDY1MDA0RTc3RTggLyogRGlzcGxheUxpc3RJdGVtQnVmZmVyLmggKi8sCiAJCQkJMEZFNUZC
Q0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVG
QkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJRjQzNzdE
NTYyNTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuY3BwICovLApAQCAtMzE0
ODYsNiArMzE0OTEsNyBAQAogCQkJCTFDQUY1NkRCMjUzMDFBQzgwMDE3QjQ3MiAvKiBEaXNwbGF5
TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBRDA5NDAyNDA4
OTY0MDAwREU0RDJGIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU1QUQwOTNFMjQwODk2MzUwMERFNEQyRiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGNEQ0MEJDOTI1NTQ2M0JGMDA3MjEzNDkgLyogRGlzcGxh
eUxpc3RJdGVtQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAw
N0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQzNzdENTcy
NTUxQzlDNjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggOTYzNTNhZGVkZmYxMWVkNWQ0MTVhZDU3ZmRmZGI0YjI4MGQ1
MDRkZC4uMGIzNWFjNjRmYThiOWZmZTBjOTQ0ODVlOTczZjI0YzJhYTBmMzQ5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAg
LTE2MywxMCArMTYzLDEwIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgV0VC
Q09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dFN0YXRlKCk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOworICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBo
aWNzQ29udGV4dFN0YXRlKEdyYXBoaWNzQ29udGV4dFN0YXRlJiYpOwogCiAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBvcGVyYXRvcj0oR3JhcGhpY3NDb250ZXh0U3RhdGUmJik7
CisgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0U3RhdGUmIG9wZXJhdG9yPShHcmFw
aGljc0NvbnRleHRTdGF0ZSYmKTsKIAogICAgIGVudW0gQ2hhbmdlIDogdWludDMyX3QgewogICAg
ICAgICBTdHJva2VHcmFkaWVudENoYW5nZSAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmNwcAppbmRleCA0MjRkOWEwNGMxNjM0MmQ5MDY5NjYzOGEyMmNm
MzcyNzRlMjhlMGUyLi40MDYxZjhjMjhhZTU4YTI1ZTlhMjU4ZGIwMGIzNjBhNjBhZTZjZDVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5jcHAKQEAgLTI2LDggKzI2LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKIAorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0SXRlbUJ1ZmZlci5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC00
OCwxOCArNTAsNDMgQEAgdm9pZCBEaXNwbGF5TGlzdDo6ZHVtcCgpIGNvbnN0CiB9CiAjZW5kaWYK
IAorRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KERpc3BsYXlMaXN0JiYgb3RoZXIpCisgICAgOiBt
X2ltYWdlQnVmZmVycyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faW1hZ2VCdWZmZXJzLCB7IH0pKQor
ICAgICwgbV9pdGVtcyhzdGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXMsIG51bGxwdHIpKQorICAg
ICwgbV9kcmF3aW5nSXRlbUV4dGVudHMoc3RkOjpleGNoYW5nZShvdGhlci5tX2RyYXdpbmdJdGVt
RXh0ZW50cywgeyB9KSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KEl0ZW1CdWZm
ZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAgICA6IG1faXRlbXMobWFrZVVuaXF1ZTxJdGVtQnVmZmVy
PihXVEZNb3ZlKGhhbmRsZXMpKSkKK3sKK30KKworRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0KCkg
PSBkZWZhdWx0OworRGlzcGxheUxpc3Q6On5EaXNwbGF5TGlzdCgpID0gZGVmYXVsdDsKKworRGlz
cGxheUxpc3QmIERpc3BsYXlMaXN0OjpvcGVyYXRvcj0oRGlzcGxheUxpc3QmJiBvdGhlcikKK3sK
KyAgICBtX2ltYWdlQnVmZmVycyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pbWFnZUJ1ZmZlcnMs
IHsgfSk7CisgICAgbV9pdGVtcyA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9pdGVtcywgbnVsbHB0
cik7CisgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZHJh
d2luZ0l0ZW1FeHRlbnRzLCB7IH0pOworICAgIHJldHVybiAqdGhpczsKK30KKwogdm9pZCBEaXNw
bGF5TGlzdDo6Y2xlYXIoKQogewotICAgIG1fbGlzdC5jbGVhcigpOworICAgIGlmIChtX2l0ZW1z
KQorICAgICAgICBtX2l0ZW1zLT5jbGVhcigpOworICAgIG1fZHJhd2luZ0l0ZW1FeHRlbnRzLmNs
ZWFyKCk7CiAgICAgbV9pbWFnZUJ1ZmZlcnMuY2xlYXIoKTsKIH0KIAotYm9vbCBEaXNwbGF5TGlz
dDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdzLCBjb25zdCBJdGVtJiBpdGVt
KQorYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzIGZsYWdz
LCBJdGVtSGFuZGxlIGl0ZW0pCiB7CiAgICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICBpZiAoIShmbGFncyAmIEFzVGV4dEZsYWc6
OkluY2x1ZGVzUGxhdGZvcm1PcGVyYXRpb25zKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYg
c3RhdGVJdGVtID0gZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pOworICAgICAgICAgICAgY29uc3Qg
YXV0byYgc3RhdGVJdGVtID0gaXRlbS5nZXQ8U2V0U3RhdGU+KCk7CiAgICAgICAgICAgICAvLyBG
SVhNRTogZm9yIG5vdywgb25seSBkcm9wIHRoZSBpdGVtIGlmIHRoZSBvbmx5IHN0YXRlLWNoYW5n
ZSBmbGFncyBhcmUgcGxhdGZvcm0tc3BlY2lmaWMuCiAgICAgICAgICAgICBpZiAoc3RhdGVJdGVt
LnN0YXRlKCkubV9jaGFuZ2VGbGFncyA9PSBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTg0LDEwICsxMTEsMTQgQEAgYm9vbCBEaXNwbGF5TGlzdDo6c2hvdWxkRHVtcEZvckZsYWdz
KEFzVGV4dEZsYWdzIGZsYWdzLCBjb25zdCBJdGVtJiBpdGVtKQogU3RyaW5nIERpc3BsYXlMaXN0
Ojphc1RleHQoQXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7CiAgICAgVGV4dFN0cmVhbSBzdHJl
YW0oVGV4dFN0cmVhbTo6TGluZU1vZGU6Ok11bHRpcGxlTGluZSwgVGV4dFN0cmVhbTo6Rm9ybWF0
dGluZzo6U1ZHU3R5bGVSZWN0KTsKLSAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2xpc3QpIHsKKyAg
ICBmb3IgKGF1dG8gW2l0ZW0sIGV4dGVudF0gOiAqdGhpcykgewogICAgICAgICBpZiAoIXNob3Vs
ZER1bXBGb3JGbGFncyhmbGFncywgaXRlbSkpCiAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHN0cmVhbSk7CiAgICAgICAgIHN0cmVh
bSA8PCBpdGVtOworICAgICAgICBpZiAoaXRlbS5pc0RyYXdpbmdJdGVtKCkpCisgICAgICAgICAg
ICBzdHJlYW0gPDwgIiBleHRlbnQgIiA8PCBleHRlbnQ7CiAgICAgfQogICAgIHJldHVybiBzdHJl
YW0ucmVsZWFzZSgpOwogfQpAQCAtOTcsMTAgKzEyOCwxMSBAQCB2b2lkIERpc3BsYXlMaXN0Ojpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3Jv
dXAodHMpOwogICAgIHRzIDw8ICJkaXNwbGF5IGxpc3QiOwogCi0gICAgc2l6ZV90IG51bUl0ZW1z
ID0gbV9saXN0LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUl0ZW1zOyAr
K2kpIHsKLSAgICAgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7Ci0gICAgICAg
IHRzIDw8IGkgPDwgIiAiIDw8IG1fbGlzdFtpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8gW2l0ZW0s
IGV4dGVudF0gOiAqdGhpcykgeworICAgICAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3Vw
KHRzKTsKKyAgICAgICAgdHMgPDwgaXRlbTsKKyAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRl
bSgpKQorICAgICAgICAgICAgdHMgPDwgIiBleHRlbnQgIiA8PCBleHRlbnQ7CiAgICAgfQogICAg
IHRzLnN0YXJ0R3JvdXAoKTsKICAgICB0cyA8PCAic2l6ZSBpbiBieXRlczogIiA8PCBzaXplSW5C
eXRlcygpOwpAQCAtMTA5LDEzICsxNDEsMjc1IEBAIHZvaWQgRGlzcGxheUxpc3Q6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0CiAKIHNpemVfdCBEaXNwbGF5TGlzdDo6c2l6ZUluQnl0ZXMoKSBj
b25zdAogewotICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIGZvciAoYXV0byYgcmVmIDogbV9s
aXN0KQotICAgICAgICByZXN1bHQgKz0gSXRlbTo6c2l6ZUluQnl0ZXMocmVmKTsKKyAgICByZXR1
cm4gbV9pdGVtcyA/IG1faXRlbXMtPnNpemVJbkJ5dGVzKCkgOiAwOworfQorCitib29sIERpc3Bs
YXlMaXN0Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXRlbXMgfHwgbV9pdGVt
cy0+aXNFbXB0eSgpOworfQorCitJdGVtQnVmZmVyJiBEaXNwbGF5TGlzdDo6aXRlbUJ1ZmZlcigp
Cit7CisgICAgaWYgKCFtX2l0ZW1zKQorICAgICAgICBtX2l0ZW1zID0gbWFrZVVuaXF1ZTxJdGVt
QnVmZmVyPigpOworICAgIHJldHVybiAqbV9pdGVtczsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6
c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KQorewor
ICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBEaXNwbGF5TGlz
dDo6c2V0SXRlbUJ1ZmZlckNsaWVudChJdGVtQnVmZmVyV3JpdGluZ0NsaWVudCogY2xpZW50KQor
eworICAgIGl0ZW1CdWZmZXIoKS5zZXRDbGllbnQoY2xpZW50KTsKK30KKwordm9pZCBEaXNwbGF5
TGlzdDo6Zm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVmZmVySGFu
ZGxlJik+JiYgbWFwRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgaWYgKG1faXRlbXMpCisgICAgICAg
IG1faXRlbXMtPmZvckVhY2hJdGVtQnVmZmVyKFdURk1vdmUobWFwRnVuY3Rpb24pKTsKK30KIAot
ICAgIHJldHVybiByZXN1bHQ7Cit2b2lkIERpc3BsYXlMaXN0OjpzZXRUcmFja3NEcmF3aW5nSXRl
bUV4dGVudHMoYm9vbCB2YWx1ZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pdGVtcyB8fCBt
X2l0ZW1zLT5pc0VtcHR5KCkpOworICAgIG1fdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzID0gdmFs
dWU7CiB9CiAKK3ZvaWQgRGlzcGxheUxpc3Q6OmFwcGVuZChJdGVtSGFuZGxlIGl0ZW0pCit7Cisg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgeworICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8U2F2ZT4oaXRlbS5nZXQ8U2F2ZT4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6UmVzdG9yZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxSZXN0b3JlPihpdGVtLmdldDxS
ZXN0b3JlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6CisgICAgICAgIHJldHVy
biBhcHBlbmQ8VHJhbnNsYXRlPihpdGVtLmdldDxUcmFuc2xhdGU+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OlJvdGF0ZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxSb3RhdGU+KGl0ZW0uZ2V0PFJv
dGF0ZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8U2NhbGU+KGl0ZW0uZ2V0PFNjYWxlPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRl
bmF0ZUNUTToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDb25jYXRlbmF0ZUNUTT4oaXRlbS5nZXQ8
Q29uY2F0ZW5hdGVDVE0+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKKyAgICAgICAg
cmV0dXJuIGFwcGVuZDxTZXRDVE0+KGl0ZW0uZ2V0PFNldENUTT4oKSk7CisgICAgY2FzZSBJdGVt
VHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICByZXR1cm4gYXBwZW5kPFNldElu
bGluZUZpbGxHcmFkaWVudD4oaXRlbS5nZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBhcHBl
bmQ8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVGaWxsQ29sb3I+KCkpOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICByZXR1cm4g
YXBwZW5kPFNldElubGluZVN0cm9rZUNvbG9yPihpdGVtLmdldDxTZXRJbmxpbmVTdHJva2VDb2xv
cj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgorICAgICAgICBy
ZXR1cm4gYXBwZW5kPFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbS5nZXQ8U2V0U3Ryb2tlVGhpY2tu
ZXNzPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKKyAgICAgICAgcmV0dXJuIGFw
cGVuZDxTZXRTdGF0ZT4oaXRlbS5nZXQ8U2V0U3RhdGU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldExpbmVDYXA6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TGluZUNhcD4oaXRlbS5nZXQ8
U2V0TGluZUNhcD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFNldExpbmVEYXNoPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxTZXRM
aW5lSm9pbj4oaXRlbS5nZXQ8U2V0TGluZUpvaW4+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dE1pdGVyTGltaXQ6CisgICAgICAgIHJldHVybiBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4oaXRlbS5n
ZXQ8U2V0TWl0ZXJMaW1pdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6Cisg
ICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJTaGFkb3c+KGl0ZW0uZ2V0PENsZWFyU2hhZG93Pigp
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgorICAgICAgICByZXR1cm4gYXBwZW5kPENsaXA+
KGl0ZW0uZ2V0PENsaXA+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8Q2xpcE91dD4oaXRlbS5nZXQ8Q2xpcE91dD4oKSk7CisgICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dFRvUGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwT3V0VG9Q
YXRoPihpdGVtLmdldDxDbGlwT3V0VG9QYXRoPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
UGF0aDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxDbGlwUGF0aD4oaXRlbS5nZXQ8Q2xpcFBhdGg+
KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczogeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogU3VwcG9y
dCB0aGUgYWJpbGl0eSB0byBjbG9uZSBkaXNwbGF5IGxpc3RzICh0aGlzIGlzIGN1cnJlbnRseSBv
bmx5IHVzZWQgZm9yIGRpc3BsYXkgbGlzdCB0cmFja2luZykuCisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdHbHlwaHM6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0dseXBocz4oaXRl
bS5nZXQ8RHJhd0dseXBocz4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOgorICAg
ICAgICByZXR1cm4gYXBwZW5kPERyYXdJbWFnZT4oaXRlbS5nZXQ8RHJhd0ltYWdlPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxE
cmF3VGlsZWRJbWFnZT4oaXRlbS5nZXQ8RHJhd1RpbGVkSW1hZ2U+KCkpOworICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdU
aWxlZFNjYWxlZEltYWdlPihpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICByZXR1cm4gYXBwZW5kPERy
YXdJbWFnZUJ1ZmZlcj4oaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd05hdGl2
ZUltYWdlPihpdGVtLmdldDxEcmF3TmF0aXZlSW1hZ2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6
OkRyYXdQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5kPERyYXdQYXR0ZXJuPihpdGVtLmdl
dDxEcmF3UGF0dGVybj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1JlY3Q6CisgICAgICAg
IHJldHVybiBhcHBlbmQ8RHJhd1JlY3Q+KGl0ZW0uZ2V0PERyYXdSZWN0PigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3TGluZT4oaXRl
bS5nZXQ8RHJhd0xpbmU+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lc0ZvclRleHQ6
CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oaXRlbS5nZXQ8RHJhd0xp
bmVzRm9yVGV4dD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcjoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihp
dGVtLmdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3RWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxEcmF3RWxsaXBzZT4oaXRlbS5n
ZXQ8RHJhd0VsbGlwc2U+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXRoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPERyYXdQYXRoPihpdGVtLmdldDxEcmF3UGF0aD4oKSk7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJh
d0ZvY3VzUmluZ1BhdGg+KGl0ZW0uZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RHJh
d0ZvY3VzUmluZ1JlY3RzPihpdGVtLmdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSZWN0Pihp
dGVtLmdldDxGaWxsUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29s
b3I6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PEZp
bGxSZWN0V2l0aENvbG9yPigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFk
aWVudDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbS5n
ZXQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21w
b3NpdGVkUmVjdDoKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsQ29tcG9zaXRlZFJlY3Q+KGl0
ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJv
dW5kZWRSZWN0OgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxSb3VuZGVkUmVjdD4oaXRlbS5n
ZXQ8RmlsbFJvdW5kZWRSZWN0PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4oaXRlbS5nZXQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KCkpOworI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAg
ICByZXR1cm4gYXBwZW5kPEZpbGxJbmxpbmVQYXRoPihpdGVtLmdldDxGaWxsSW5saW5lUGF0aD4o
KSk7CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgcmV0dXJu
IGFwcGVuZDxGaWxsUGF0aD4oaXRlbS5nZXQ8RmlsbFBhdGg+KCkpOworICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxFbGxpcHNlOgorICAgICAgICByZXR1cm4gYXBwZW5kPEZpbGxFbGxpcHNlPihpdGVt
LmdldDxGaWxsRWxsaXBzZT4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgor
ICAgICAgICByZXR1cm4gYXBwZW5kPFB1dEltYWdlRGF0YT4oaXRlbS5nZXQ8UHV0SW1hZ2VEYXRh
PigpKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIHJl
dHVybiBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihpdGVtLmdldDxQYWludEZyYW1lRm9yTWVk
aWE+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6CisgICAgICAgIHJldHVybiBh
cHBlbmQ8U3Ryb2tlUmVjdD4oaXRlbS5nZXQ8U3Ryb2tlUmVjdD4oKSk7CisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZDxTdHJva2VJbmxpbmVQYXRoPihpdGVtLmdldDxTdHJva2VJbmxp
bmVQYXRoPigpKTsKKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CisgICAg
ICAgIHJldHVybiBhcHBlbmQ8U3Ryb2tlUGF0aD4oaXRlbS5nZXQ8U3Ryb2tlUGF0aD4oKSk7Cisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKKyAgICAgICAgcmV0dXJuIGFwcGVuZDxT
dHJva2VFbGxpcHNlPihpdGVtLmdldDxTdHJva2VFbGxpcHNlPigpKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpDbGVhclJlY3Q6CisgICAgICAgIHJldHVybiBhcHBlbmQ8Q2xlYXJSZWN0PihpdGVtLmdl
dDxDbGVhclJlY3Q+KCkpOworICAgIGNhc2UgSXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oaXRlbS5n
ZXQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4oKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6RW5kVHJh
bnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIHJldHVybiBhcHBlbmQ8RW5kVHJhbnNwYXJlbmN5TGF5
ZXI+KGl0ZW0uZ2V0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigpKTsKKyNpZiBVU0UoQ0cpCisgICAg
Y2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5k
PEFwcGx5U3Ryb2tlUGF0dGVybj4oaXRlbS5nZXQ8QXBwbHlTdHJva2VQYXR0ZXJuPigpKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICByZXR1cm4gYXBwZW5k
PEFwcGx5RmlsbFBhdHRlcm4+KGl0ZW0uZ2V0PEFwcGx5RmlsbFBhdHRlcm4+KCkpOworI2VuZGlm
CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoKKyAgICAgICAgcmV0
dXJuIGFwcGVuZDxBcHBseURldmljZVNjYWxlRmFjdG9yPihpdGVtLmdldDxBcHBseURldmljZVNj
YWxlRmFjdG9yPigpKTsKKyAgICB9Cit9CisKK2Jvb2wgRGlzcGxheUxpc3Q6Oml0ZXJhdG9yOjph
dEVuZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8mIGl0ZW1zID0gKm1fZGlzcGxheUxpc3QubV9pdGVt
czsKKyAgICBhdXRvIGVuZEN1cnNvciA9IGl0ZW1zLm1fd3JpdGFibGVCdWZmZXIuZGF0YSArIGl0
ZW1zLm1fd3JpdHRlbk51bWJlck9mQnl0ZXM7CisgICAgcmV0dXJuIG1fY3Vyc29yID09IGVuZEN1
cnNvcjsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6OnVwZGF0ZUN1cnJlbnRJdGVt
KCkKK3sKKyAgICBjbGVhckN1cnJlbnRJdGVtKCk7CisKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byYgaXRlbXMgPSAqbV9kaXNwbGF5TGlzdC5tX2l0ZW1zOwor
ICAgIGF1dG8gaXRlbVR5cGUgPSBzdGF0aWNfY2FzdDxJdGVtVHlwZT4obV9jdXJzb3JbMF0pOwor
ICAgIGlmIChpc0RyYXdpbmdJdGVtKGl0ZW1UeXBlKSAmJiAhbV9kaXNwbGF5TGlzdC5tX2RyYXdp
bmdJdGVtRXh0ZW50cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9jdXJyZW50RXh0ZW50ID0gbV9k
aXNwbGF5TGlzdC5tX2RyYXdpbmdJdGVtRXh0ZW50c1ttX2RyYXdpbmdJdGVtSW5kZXhdOworICAg
ICAgICBtX2RyYXdpbmdJdGVtSW5kZXgrKzsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50
RXh0ZW50ID0gV1RGOjpudWxsb3B0OworCisgICAgYXV0byogY2xpZW50ID0gaXRlbXMubV9yZWFk
aW5nQ2xpZW50OworICAgIGF1dG8gc2l6ZU9mVHlwZUFuZEl0ZW0gPSBzaXplT2ZJdGVtSW5CeXRl
cyhpdGVtVHlwZSkgKyBzaXplb2YoSXRlbVR5cGUpOworICAgIG1fY3VycmVudEJ1ZmZlckZvckl0
ZW0gPSBzaXplT2ZUeXBlQW5kSXRlbSA8PSBzaXplT2ZGaXhlZEJ1ZmZlckZvckN1cnJlbnRJdGVt
ID8gbV9maXhlZEJ1ZmZlckZvckN1cnJlbnRJdGVtIDogcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oZmFzdE1hbGxvYyhzaXplT2ZUeXBlQW5kSXRlbSkpOworICAgIGlmICghaXNJbmxpbmVJdGVt
KGl0ZW1UeXBlKSAmJiBjbGllbnQpIHsKKyAgICAgICAgYXV0byBzaXplT2ZEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxzaXplX3QqPihtX2N1cnNvciArIHNpemVvZihJdGVtVHlwZSkpWzBdOworICAg
ICAgICBhdXRvKiBzdGFydE9mUGFkZGluZyA9IG1fY3Vyc29yICsgc2l6ZW9mKEl0ZW1UeXBlKSAr
IHNpemVvZihzaXplX3QpOworICAgICAgICBzaXplX3QgcGFkZGluZyA9IChhbGlnbm9mKHVpbnQ2
NF90KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydE9mUGFkZGluZykgJSBhbGln
bm9mKHVpbnQ2NF90KSkgJSBhbGlnbm9mKHVpbnQ2NF90KTsKKyAgICAgICAgYXV0byBkZWNvZGVk
SXRlbUhhbmRsZSA9IGNsaWVudC0+ZGVjb2RlSXRlbShzdGFydE9mUGFkZGluZyArIHBhZGRpbmcs
IHNpemVPZkRhdGEsIGl0ZW1UeXBlLCBtX2N1cnJlbnRCdWZmZXJGb3JJdGVtKTsKKyAgICAgICAg
aWYgKCFkZWNvZGVkSXRlbUhhbmRsZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEluc3RlYWQg
b2YgY3Jhc2hpbmcsIHRoaXMgbmVlZHMgdG8gZmFpbCBncmFjZWZ1bGx5IGFuZCBpbmZvcm0gdGhl
IGNhbGxlci4KKyAgICAgICAgICAgIC8vIEZvciB0aGUgdGltZSBiZWluZywgdGhpcyBhc3NlcnRp
b24gbWFrZXMgYnVncyBpbiBpdGVtIGJ1ZmZlciBlbmNvZGluZyBsb2dpYyBlYXNpZXIKKyAgICAg
ICAgICAgIC8vIHRvIGNhdGNoIGJ5IGF2b2lkaW5nIG15c3RlcmlvdXMgb3V0LW9mLWJvdW5kcyBy
ZWFkcyBhbmQgaW5jb3JyZWN0bHkgYWxpZ25lZCBpdGVtcworICAgICAgICAgICAgLy8gZG93biB0
aGUgbGluZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jdXJyZW50QnVmZmVyRm9ySXRlbVswXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGl0ZW1UeXBlKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciA9IHNp
emVvZihJdGVtVHlwZSkgKyBzaXplb2Yoc2l6ZV90KSArIHBhZGRpbmcgKyBzaXplT2ZEYXRhOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEl0ZW1IYW5kbGUgeyBtX2N1cnNvciB9LmNvcHlUbyh7IG1f
Y3VycmVudEJ1ZmZlckZvckl0ZW0gfSk7CisgICAgICAgIG1fY3VycmVudEl0ZW1TaXplSW5CdWZm
ZXIgPSBzaXplT2ZUeXBlQW5kSXRlbTsKKyAgICB9Cit9CisKK3ZvaWQgRGlzcGxheUxpc3Q6Oml0
ZXJhdG9yOjphZHZhbmNlKCkKK3sKKyAgICBpZiAoYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jdXJzb3IgKz0gbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlcjsKKworICAgIGlmICht
X2N1cnNvciA9PSBtX2N1cnJlbnRFbmRPZkJ1ZmZlciAmJiBtX3JlYWRPbmx5QnVmZmVySW5kZXgg
PCBtX2Rpc3BsYXlMaXN0Lm1faXRlbXMtPm1fcmVhZE9ubHlCdWZmZXJzLnNpemUoKSkgeworICAg
ICAgICBtX3JlYWRPbmx5QnVmZmVySW5kZXgrKzsKKyAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRP
ZkN1cnJlbnRCdWZmZXIoKTsKKyAgICB9CisKKyAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworfQor
Cit2b2lkIERpc3BsYXlMaXN0OjppdGVyYXRvcjo6Y2xlYXJDdXJyZW50SXRlbSgpCit7CisgICAg
aWYgKG1fY3VycmVudEJ1ZmZlckZvckl0ZW0pIHsKKyAgICAgICAgSXRlbUhhbmRsZSB7IG1fY3Vy
cmVudEJ1ZmZlckZvckl0ZW0gfS5kZXN0cm95KCk7CisgICAgICAgIGlmIChVTkxJS0VMWShtX2N1
cnJlbnRCdWZmZXJGb3JJdGVtICE9IG1fZml4ZWRCdWZmZXJGb3JDdXJyZW50SXRlbSkpCisgICAg
ICAgICAgICBmYXN0RnJlZShtX2N1cnJlbnRCdWZmZXJGb3JJdGVtKTsKKyAgICB9CisKKyAgICBt
X2N1cnJlbnRJdGVtU2l6ZUluQnVmZmVyID0gMDsKKyAgICBtX2N1cnJlbnRCdWZmZXJGb3JJdGVt
ID0gbnVsbHB0cjsKK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1vdmVUb0VuZCgp
Cit7CisgICAgaWYgKGF1dG8mIGl0ZW1zID0gbV9kaXNwbGF5TGlzdC5tX2l0ZW1zKSB7CisgICAg
ICAgIG1fY3Vyc29yID0gaXRlbXMtPm1fd3JpdGFibGVCdWZmZXIuZGF0YSArIGl0ZW1zLT5tX3dy
aXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgICAgICBtX2N1cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vy
c29yOworICAgICAgICBtX3JlYWRPbmx5QnVmZmVySW5kZXggPSBpdGVtcy0+bV9yZWFkT25seUJ1
ZmZlcnMuc2l6ZSgpOworICAgIH0KK30KKwordm9pZCBEaXNwbGF5TGlzdDo6aXRlcmF0b3I6Om1v
dmVDdXJzb3JUb1N0YXJ0T2ZDdXJyZW50QnVmZmVyKCkKK3sKKyAgICBhdXRvJiBpdGVtcyA9IG1f
ZGlzcGxheUxpc3QubV9pdGVtczsKKyAgICBpZiAoIWl0ZW1zKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIG51bWJlck9mUmVhZE9ubHlCdWZmZXJzID0gaXRlbXMtPm1fcmVhZE9ubHlCdWZm
ZXJzLnNpemUoKTsKKyAgICBpZiAobV9yZWFkT25seUJ1ZmZlckluZGV4IDwgbnVtYmVyT2ZSZWFk
T25seUJ1ZmZlcnMpIHsKKyAgICAgICAgYXV0byYgbmV4dEJ1ZmZlckhhbmRsZSA9IGl0ZW1zLT5t
X3JlYWRPbmx5QnVmZmVyc1ttX3JlYWRPbmx5QnVmZmVySW5kZXhdOworICAgICAgICBtX2N1cnNv
ciA9IG5leHRCdWZmZXJIYW5kbGUuZGF0YTsKKyAgICAgICAgbV9jdXJyZW50RW5kT2ZCdWZmZXIg
PSBtX2N1cnNvciArIG5leHRCdWZmZXJIYW5kbGUuY2FwYWNpdHk7CisgICAgfSBlbHNlIGlmICht
X3JlYWRPbmx5QnVmZmVySW5kZXggPT0gbnVtYmVyT2ZSZWFkT25seUJ1ZmZlcnMpIHsKKyAgICAg
ICAgbV9jdXJzb3IgPSBpdGVtcy0+bV93cml0YWJsZUJ1ZmZlci5kYXRhOworICAgICAgICBtX2N1
cnJlbnRFbmRPZkJ1ZmZlciA9IG1fY3Vyc29yICsgaXRlbXMtPm1fd3JpdHRlbk51bWJlck9mQnl0
ZXM7CisgICAgfQorfQorCisKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CiAKIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDg1ZDAxMmE0NzUw
YjJhYmViMGI4YjM1YjgzZjAyOTAzODAyNzczZDkuLjQ3NGViZjI3OTdkOGRlMGQ1NWRjNTE0NjM2
ODNkZDQzODMzODUwMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgiCiAj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtVHlwZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMzIsNiArMzMsOCBAQAogI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC00MiwzNCArNDUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIEl0ZW0gOiBwdWJsaWMgUmVmQ291bnRl
ZDxJdGVtPiB7Ci1wdWJsaWM6Ci0gICAgSXRlbSgpID0gZGVsZXRlOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgSXRlbShJdGVtVHlwZSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SXRlbSgp
OwotCi0gICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90
eXBlOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNEcmF3aW5nSXRlbSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKLSAg
ICBXVEY6OkNTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKLSNlbmRpZgotICAgIHN0YXRpYyBz
aXplX3Qgc2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8SXRlbT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgSXRlbVR5cGUgbV90eXBlOwotfTsKLQogZW51bSBBc1RleHRGbGFnIHsKICAg
ICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwKICAgICBJbmNsdWRlc1BsYXRm
b3JtT3BlcmF0aW9ucyAgICAgID0gMSA8PCAwLApAQCAtODIsNDggKzU3LDk3IEBAIGNsYXNzIERp
c3BsYXlMaXN0IHsKICAgICBmcmllbmQgY2xhc3MgUmVjb3JkZXI7CiAgICAgZnJpZW5kIGNsYXNz
IFJlcGxheWVyOwogcHVibGljOgotICAgIERpc3BsYXlMaXN0KCkgPSBkZWZhdWx0OwotICAgIERp
c3BsYXlMaXN0KERpc3BsYXlMaXN0JiYpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBE
aXNwbGF5TGlzdCgpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KERpc3BsYXlMaXN0
JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIERpc3BsYXlMaXN0KEl0ZW1CdWZmZXJIYW5kbGVzJiYp
OwogCi0gICAgRGlzcGxheUxpc3QmIG9wZXJhdG9yPShEaXNwbGF5TGlzdCYmKSA9IGRlZmF1bHQ7
CisgICAgV0VCQ09SRV9FWFBPUlQgfkRpc3BsYXlMaXN0KCk7CiAKLSAgICB2b2lkIGR1bXAoV1RG
OjpUZXh0U3RyZWFtJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRGlzcGxheUxpc3QmIG9w
ZXJhdG9yPShEaXNwbGF5TGlzdCYmKTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWY8SXRlbT4+JiBs
aXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9Ci0gICAgSXRlbSYgaXRlbUF0KHNpemVfdCBp
bmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fbGlzdC5zaXplKCkpOwotICAg
ICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigp
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHNpemVfdCBzaXplSW5CeXRlcygpIGNvbnN0OwogCi0gICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0LmlzRW1wdHkoKTsgfQotICAgIHNpemVfdCBzaXplSW5CeXRl
cygpIGNvbnN0OwotICAgIAogICAgIFN0cmluZyBhc1RleHQoQXNUZXh0RmxhZ3MpIGNvbnN0Owog
CiAgICAgY29uc3QgSW1hZ2VCdWZmZXJIYXNoTWFwJiBpbWFnZUJ1ZmZlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlQnVmZmVyczsgfQogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJdGVt
QnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJSZWFkaW5nQ2xpZW50Kik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJdGVtQnVmZmVyQ2xpZW50KEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50Kik7CisK
ICNpZiAhZGVmaW5lZChOREVCVUcpIHx8ICFMT0dfRElTQUJMRUQKICAgICBXVEY6OkNTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoKSBjb25z
dDsKICNlbmRpZgogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxEaXNwbGF5TGlzdD4gZGVjb2RlKERlY29kZXImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGZvckVhY2hJdGVtQnVmZmVyKEZ1bmN0aW9uPHZvaWQoY29uc3QgSXRlbUJ1ZmZlckhhbmRsZSYp
PiYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZv
aWQgYXBwZW5kKEFyZ3MmJi4uLiBhcmdzKTsKKyAgICB2b2lkIGFwcGVuZChJdGVtSGFuZGxlKTsK
KworICAgIGJvb2wgdHJhY2tzRHJhd2luZ0l0ZW1FeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gbV90
cmFja3NEcmF3aW5nSXRlbUV4dGVudHM7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRy
YWNrc0RyYXdpbmdJdGVtRXh0ZW50cyhib29sKTsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIGVudW0gY2xhc3MgSW1tZWRpYXRlbHlNb3ZlVG9FbmQgeyBObywg
WWVzIH07CisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwg
SW1tZWRpYXRlbHlNb3ZlVG9FbmQgaW1tZWRpYXRlbHlNb3ZlVG9FbmQgPSBJbW1lZGlhdGVseU1v
dmVUb0VuZDo6Tm8pCisgICAgICAgICAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseU1vdmVUb0VuZCA9PSBJbW1lZGlh
dGVseU1vdmVUb0VuZDo6WWVzKQorICAgICAgICAgICAgICAgIG1vdmVUb0VuZCgpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbW92ZUN1cnNvclRvU3RhcnRPZkN1cnJlbnRC
dWZmZXIoKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgfml0ZXJhdG9yKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY2xlYXJDdXJyZW50SXRlbSgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gJm1fZGlzcGxheUxpc3QgPT0g
Jm90aGVyLm1fZGlzcGxheUxpc3QgJiYgbV9jdXJzb3IgPT0gb3RoZXIubV9jdXJzb3I7IH0KKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCkgeyBhZHZhbmNlKCk7
IH0KKyAgICAgICAgc3RkOjpwYWlyPEl0ZW1IYW5kbGUsIE9wdGlvbmFsPEZsb2F0UmVjdD4+IG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHsgSXRlbUhhbmRsZSB7IG1fY3VycmVudEJ1ZmZlckZv
ckl0ZW0gfSwgbV9jdXJyZW50RXh0ZW50IH07IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVPZkZpeGVkQnVmZmVyRm9yQ3VycmVudEl0ZW0gPSAy
NTY7CisKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3ZlQ3Vyc29yVG9TdGFydE9mQ3Vy
cmVudEJ1ZmZlcigpOworICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdmVUb0VuZCgpOwor
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVudEl0ZW0oKTsKKyAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVDdXJyZW50SXRlbSgpOworICAgICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGFkdmFuY2UoKTsKKyAgICAgICAgYm9vbCBhdEVuZCgpIGNvbnN0OworCisg
ICAgICAgIGNvbnN0IERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworICAgICAgICB1aW50OF90
KiBtX2N1cnNvciB7IG51bGxwdHIgfTsKKyAgICAgICAgc2l6ZV90IG1fcmVhZE9ubHlCdWZmZXJJ
bmRleCB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fZHJhd2luZ0l0ZW1JbmRleCB7IDAgfTsKKyAg
ICAgICAgdWludDhfdCogbV9jdXJyZW50RW5kT2ZCdWZmZXIgeyBudWxscHRyIH07CisKKyAgICAg
ICAgdWludDhfdCBtX2ZpeGVkQnVmZmVyRm9yQ3VycmVudEl0ZW1bc2l6ZU9mRml4ZWRCdWZmZXJG
b3JDdXJyZW50SXRlbV0geyAwIH07CisgICAgICAgIHVpbnQ4X3QqIG1fY3VycmVudEJ1ZmZlckZv
ckl0ZW0geyBudWxscHRyIH07CisgICAgICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbV9jdXJyZW50
RXh0ZW50OworICAgICAgICBzaXplX3QgbV9jdXJyZW50SXRlbVNpemVJbkJ1ZmZlciB7IDAgfTsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiB7ICp0aGlzIH07
IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7ICp0aGlzLCBpdGVyYXRvcjo6
SW1tZWRpYXRlbHlNb3ZlVG9FbmQ6OlllcyB9OyB9CiAKIHByaXZhdGU6Ci0gICAgSXRlbSYgYXBw
ZW5kKFJlZjxJdGVtPiYmIGl0ZW0pCi0gICAgewotICAgICAgICBtX2xpc3QuYXBwZW5kKFdURk1v
dmUoaXRlbSkpOwotICAgICAgICByZXR1cm4gbV9saXN0Lmxhc3QoKS5nZXQoKTsKLSAgICB9Cisg
ICAgSXRlbUJ1ZmZlciogaXRlbUJ1ZmZlcklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVt
cy5nZXQoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1CdWZmZXImIGl0ZW1CdWZmZXIoKTsK
IAotICAgIC8vIExlc3MgZWZmaWNpZW50IGFwcGVuZCwgb25seSB1c2VkIGZvciB0cmFja2luZyBy
ZXBsYXkuCi0gICAgdm9pZCBhcHBlbmRJdGVtKEl0ZW0mIGl0ZW0pCisgICAgdm9pZCBhZGREcmF3
aW5nSXRlbUV4dGVudChPcHRpb25hbDxGbG9hdFJlY3Q+JiYgZXh0ZW50KQogICAgIHsKLSAgICAg
ICAgbV9saXN0LmFwcGVuZChpdGVtKTsKKyAgICAgICAgQVNTRVJUKG1fdHJhY2tzRHJhd2luZ0l0
ZW1FeHRlbnRzKTsKKyAgICAgICAgbV9kcmF3aW5nSXRlbUV4dGVudHMuYXBwZW5kKFdURk1vdmUo
ZXh0ZW50KSk7CiAgICAgfQogCiAgICAgdm9pZCBjYWNoZUltYWdlQnVmZmVyKFJlZjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcikKQEAgLTEzMSw0NCArMTU1LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIG1faW1hZ2VCdWZmZXJzLmFkZChpbWFnZUJ1ZmZlci0+cmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgYm9vbCBzaG91bGREdW1wRm9yRmxhZ3MoQXNUZXh0RmxhZ3MsIGNvbnN0IEl0ZW0mKTsK
LQotICAgIFZlY3RvcjxSZWY8SXRlbT4+JiBsaXN0KCkgeyByZXR1cm4gbV9saXN0OyB9CisgICAg
c3RhdGljIGJvb2wgc2hvdWxkRHVtcEZvckZsYWdzKEFzVGV4dEZsYWdzLCBJdGVtSGFuZGxlKTsK
IAotICAgIFZlY3RvcjxSZWY8SXRlbT4+IG1fbGlzdDsKICAgICBJbWFnZUJ1ZmZlckhhc2hNYXAg
bV9pbWFnZUJ1ZmZlcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW1CdWZmZXI+IG1faXRlbXM7
CisgICAgVmVjdG9yPE9wdGlvbmFsPEZsb2F0UmVjdD4+IG1fZHJhd2luZ0l0ZW1FeHRlbnRzOwor
ICAgIGJvb2wgbV90cmFja3NEcmF3aW5nSXRlbUV4dGVudHMgeyB0cnVlIH07CiB9OwogCi0KLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERpc3BsYXlMaXN0OjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+Cit2b2lk
IERpc3BsYXlMaXN0OjphcHBlbmQoQXJncyYmLi4uIGFyZ3MpCiB7Ci0gICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4obV9saXN0LnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX2xpc3QpCi0gICAgICAgIGVuY29kZXIgPDwgaXRlbS5nZXQoKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDY0X3Q+IGl0ZW1Db3Vu
dDsKLSAgICBkZWNvZGVyID4+IGl0ZW1Db3VudDsKLSAgICBpZiAoIWl0ZW1Db3VudCkKLSAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIERpc3BsYXlMaXN0IGRpc3BsYXlMaXN0Owot
Ci0gICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8ICppdGVtQ291bnQ7IGkrKykgewotICAgICAg
ICBhdXRvIGl0ZW0gPSBJdGVtOjpkZWNvZGUoZGVjb2Rlcik7Ci0gICAgICAgIC8vIEZJWE1FOiBP
bmNlIHdlIGNhbiBkZWNvZGUgYWxsIHR5cGVzLCBmYWlsaW5nIHRvIGRlY29kZSBhbiBpdGVtIHNo
b3VsZCB0dXJuIGludG8gYSBkZWNvZGUgZmFpbHVyZS4KLSAgICAgICAgLy8gRm9yIG5vdywgd2Ug
anVzdCBoYXZlIHRvIGlnbm9yZSBpdC4KLSAgICAgICAgaWYgKCFpdGVtKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGRpc3BsYXlMaXN0LmFwcGVuZChXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGRpc3BsYXlMaXN0OworICAgIGl0ZW1CdWZmZXIoKS5hcHBlbmQ8
VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAogfSAvLyBEaXNwbGF5TGlzdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGQ1ZmVjODdmZTBmZTAxNjFiMzMzNTZiNTYzZmViNWQ3
OGFjZGQ1YWIuLjRjZDAyYThlNmE4ZDM3YTE5ZTQwMzAxODQ1MzA4YjlkZTJkNDZlMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNv
cmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBn
c3RhdAogICAgIHVwZGF0ZVN0cm9rZUNvbG9yKENHR1N0YXRlR2V0U3Ryb2tlQ29sb3IoZ3N0YXRl
KSk7CiAgICAgdXBkYXRlU2hhZG93KENHR1N0YXRlR2V0U3R5bGUoZ3N0YXRlKSk7CiAKLSAgICBt
X293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0dseXBoczo6Y3JlYXRlKCptX29y
aWdpbmFsRm9udCwgZ2x5cGhzLCBjb21wdXRlQWR2YW5jZXNGcm9tUG9zaXRpb25zKHBvc2l0aW9u
cywgY291bnQsIGN1cnJlbnRUZXh0TWF0cml4KS5kYXRhKCksIGNvdW50LCBjdXJyZW50VGV4dE1h
dHJpeC5tYXBQb2ludChwb3NpdGlvbnNbMF0pLCBtX3Ntb290aGluZ01vZGUpKTsKKyAgICBtX293
bmVyLmFwcGVuZDxEcmF3R2x5cGhzPigqbV9vcmlnaW5hbEZvbnQsIGdseXBocywgY29tcHV0ZUFk
dmFuY2VzRnJvbVBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvdW50LCBjdXJyZW50VGV4dE1hdHJpeCku
ZGF0YSgpLCBjb3VudCwgY3VycmVudFRleHRNYXRyaXgubWFwUG9pbnQocG9zaXRpb25zWzBdKSwg
bV9zbW9vdGhpbmdNb2RlKTsKIAogICAgIG1fb3duZXIuY29uY2F0Q1RNKGludmVyc2VDVE1GaXh1
cCk7CiB9CkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29y
ZERyYXdJbWFnZShDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdGUKICAgICBt
X293bmVyLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogCiAgICAgYXV0byBpbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoY2dJbWFnZSk7Ci0gICAgbV9vd25lci5hcHBlbmRJdGVtQW5kVXBkYXRl
RXh0ZW50KERyYXdJbWFnZTo6Y3JlYXRlKGltYWdlLCByZWN0LCB7eyB9LCBpbWFnZS0+c2l6ZSgp
fSwgeyBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0IH0pKTsKKyAgICBtX293bmVyLmFw
cGVuZDxEcmF3SW1hZ2U+KGltYWdlLCBGbG9hdFJlY3QocmVjdCksIEZsb2F0UmVjdCB7eyB9LCBp
bWFnZS0+c2l6ZSgpfSwgSW1hZ2VQYWludGluZ09wdGlvbnMgeyBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Ub3BMZWZ0IH0pOwogCiAgICAgLy8gVW5kbyB0aGUgYWJvdmUgeS1mbGlwIHRvIHJlc3Rv
cmUgdGhlIGNvbnRleHQuCiAgICAgbV9vd25lci5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKQEAg
LTM2Myw3ICszNjMsNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ltYWdl
KENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0ZQogdm9pZCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
CiAgICAgaWYgKG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uID09IERyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbjo6RG9udERlY29uc3RydWN0KSB7Ci0gICAgICAgIG1fb3duZXIuYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgICAgIG1fb3duZXIuYXBwZW5kPERyYXdHbHlwaHM+KGZv
bnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSks
IG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlckhhcmZCdXp6LmNwcAppbmRleCAwYmI4NzQ0MzJiNGU2OGZiYjQ0YTg3
MjQ5MjlhYTBlN2VmOWZiNWJjLi5iMWRkM2UwOTAyYzJhYzk0NWE4MDZjYjc3MDMzZDc5NGZlYTFm
MDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJIYXJmQnV6ei5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVySGFyZkJ1enouY3BwCkBAIC00Myw3ICs0Myw3IEBAIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uCiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewotICAgIG1fb3duZXIuYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBzdGFydFBvaW50
LCBzbW9vdGhpbmdNb2RlKSk7CisgICAgbV9vd25lci5hcHBlbmQ8RHJhd0dseXBocz4oZm9udCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzLCBzdGFydFBvaW50LCBzbW9vdGhpbmdNb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXJXaW4uY3BwCmluZGV4IDBiYjg3NDQzMmI0ZTY4ZmJiNDRhODcyNDkyOWFh
MGU3ZWY5ZmI1YmMuLmIxZGQzZTA5MDJjMmFjOTQ1YTgwNmNiNzcwMzNkNzk0ZmVhMWYwOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyV2luLmNwcApAQCAtNDMsNyArNDMsNyBAQCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbgogCiB2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKIHsKLSAgICBtX293bmVyLmFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJh
d0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgc3RhcnRQb2ludCwgc21vb3RoaW5nTW9kZSkp
OworICAgIG1fb3duZXIuYXBwZW5kPERyYXdHbHlwaHM+KGZvbnQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgc3RhcnRQb2lu
dCwgc21vb3RoaW5nTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAppbmRleCAyMmVkMjU2
ZTgwYWQyOTNhMDUyMDY5Yjc0MzA4OGExMzUxZjQ3Y2MwLi45NmU0YjFlZmY5ODFlNDIyNzlkNzQ2
ZGM2YmIzOWM4YWE1MjhlMTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4
dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVj
b3JkZXIoKTsKLSAgICBEaXNwbGF5TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7IHJldHVybiBXVEZN
b3ZlKG1fZGlzcGxheUxpc3QpOyB9CisgICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkg
eyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7
IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5ZWREaXNwbGF5TGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5nZXQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1
ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjE0YmMxZTY2ZjFiNWYwMTFl
OWFiNjQ0Yzc4ZTQyMGM0ZWJjNDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5jcHAK
QEAgLTAsMCArMSw4NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgiCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0
ZW1zLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgIUxP
R19ESVNBQkxFRAorQ1N0cmluZyBJdGVtSGFuZGxlOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7Cisg
ICAgVGV4dFN0cmVhbSB0czsKKyAgICB0cyA8PCAqdGhpczsKKyAgICByZXR1cm4gdHMucmVsZWFz
ZSgpLnV0ZjgoKTsKK30KKyNlbmRpZgorCit2b2lkIEl0ZW1IYW5kbGU6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgSXRl
bVR5cGU6OlNhdmU6IHsKKyAgICAgICAgZ2V0PFNhdmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAg
ICBnZXQ8UmVzdG9yZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsKKyAgICAgICAgZ2V0PFRyYW5zbGF0ZT4o
KS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpSb3RhdGU6IHsKKyAgICAgICAgZ2V0PFJvdGF0ZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTY2FsZTogeworICAgICAg
ICBnZXQ8U2NhbGU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06IHsKKyAgICAgICAgZ2V0PENvbmNhdGVu
YXRlQ1RNPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlNldENUTTogeworICAgICAgICBnZXQ8U2V0Q1RNPigpLmFwcGx5KGNvbnRl
eHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxHcmFkaWVudDogeworICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbEdyYWRpZW50PigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxDb2xvcjogeworICAgICAgICBnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigp
LmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB7CisgICAgICAgIGdldDxTZXRJbmxpbmVTdHJva2VD
b2xvcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHsKKyAgICAgICAgZ2V0PFNldFN0cm9rZVRo
aWNrbmVzcz4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZTogeworICAgICAgICBnZXQ8U2V0U3RhdGU+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDogeworICAgICAgICBnZXQ8U2V0TGluZUNhcD4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogewor
ICAgICAgICBnZXQ8U2V0TGluZURhc2g+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpvaW46IHsKKyAgICAgICAgZ2V0
PFNldExpbmVKb2luPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAgICAgICAgZ2V0PFNldE1pdGVy
TGltaXQ+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c6IHsKKyAgICAgICAgZ2V0PENsZWFyU2hhZG93PigpLmFw
cGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXA6IHsKKyAgICAgICAgZ2V0PENsaXA+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDogeworICAgICAgICBnZXQ8
Q2xpcE91dD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOiB7CisgICAgICAgIGdldDxDbGlwT3V0VG9QYXRo
PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OkNsaXBQYXRoOiB7CisgICAgICAgIGdldDxDbGlwUGF0aD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHM6IHsKKyAgICAgICAgZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKS5hcHBs
eShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3R2x5cGhzOiB7CisgICAgICAgIGdldDxEcmF3R2x5cGhzPigpLmFwcGx5KGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZTogewor
ICAgICAgICBnZXQ8RHJhd0ltYWdlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOiB7CisgICAgICAgIGdl
dDxEcmF3VGlsZWRJbWFnZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBn
ZXQ8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAg
IGdldDxEcmF3SW1hZ2VCdWZmZXI+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOiB7CisgICAgICAgIGdl
dDxEcmF3TmF0aXZlSW1hZ2U+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46IHsKKyAgICAgICAgZ2V0PERyYXdQ
YXR0ZXJuPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdSZWN0OiB7CisgICAgICAgIGdldDxEcmF3UmVjdD4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TGluZTogeworICAgICAgICBnZXQ8RHJhd0xpbmU+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDogewor
ICAgICAgICBnZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyOiB7CisgICAgICAgIGdldDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigpLmFwcGx5KGNv
bnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdF
bGxpcHNlOiB7CisgICAgICAgIGdldDxEcmF3RWxsaXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAg
ICAgICBnZXQ8RHJhd1BhdGg+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0
PERyYXdGb2N1c1JpbmdQYXRoPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBn
ZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIGdldDxGaWxs
UmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRo
Q29sb3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0
V2l0aEdyYWRpZW50PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8Rmls
bENvbXBvc2l0ZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSb3VuZGVkUmVjdDogeworICAgICAgICBnZXQ8Rmls
bFJvdW5kZWRSZWN0PigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB7CisgICAgICAgIGdl
dDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsSW5saW5lUGF0aDogeworICAgICAgICBnZXQ8RmlsbElubGluZVBhdGg+KCkuYXBw
bHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCkuYXBwbHkoY29udGV4
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlw
c2U6IHsKKyAgICAgICAgZ2V0PEZpbGxFbGxpcHNlPigpLmFwcGx5KGNvbnRleHQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAg
ICAgICBnZXQ8UHV0SW1hZ2VEYXRhPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYTogeworICAgICAg
ICBnZXQ8UGFpbnRGcmFtZUZvck1lZGlhPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6IHsKKyAgICAgICAgZ2V0
PFN0cm9rZVJlY3Q+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5s
aW5lUGF0aDogeworICAgICAgICBnZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKS5hcHBseShjb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVBhdGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuYXBwbHkoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTog
eworICAgICAgICBnZXQ8U3Ryb2tlRWxsaXBzZT4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHsKKyAgICAgICAg
Z2V0PENsZWFyUmVjdD4oKS5hcHBseShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVyOiB7CisgICAgICAgIGdl
dDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigpLmFwcGx5KGNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOiB7Cisg
ICAgICAgIGdldDxFbmRUcmFuc3BhcmVuY3lMYXllcj4oKS5hcHBseShjb250ZXh0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlT
dHJva2VQYXR0ZXJuOiB7CisgICAgICAgIGdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkuYXBwbHko
Y29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBw
bHlGaWxsUGF0dGVybjogeworICAgICAgICBnZXQ8QXBwbHlGaWxsUGF0dGVybj4oKS5hcHBseShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5
cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6IHsKKyAgICAgICAgZ2V0PEFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3I+KCkuYXBwbHkoY29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
fQorfQorCit2b2lkIEl0ZW1IYW5kbGU6OmRlc3Ryb3koKQoreworICAgIHN3aXRjaCAodHlwZSgp
KSB7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogeworICAgICAgICBnZXQ8Q2xp
cE91dFRvUGF0aD4oKS5+Q2xpcE91dFRvUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOiB7CisgICAgICAgIGdldDxDbGlwUGF0aD4oKS5+
Q2xpcFBhdGgoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6IHsKKyAgICAgICAgZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5k
cz4oKS5+Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdG
b2N1c1JpbmdQYXRoPigpLn5EcmF3Rm9jdXNSaW5nUGF0aCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czogeworICAgICAgICBn
ZXQ8RHJhd0ZvY3VzUmluZ1JlY3RzPigpLn5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOiB7CisgICAgICAg
IGdldDxEcmF3R2x5cGhzPigpLn5EcmF3R2x5cGhzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB7CisgICAgICAgIGdldDxEcmF3SW1hZ2U+
KCkufkRyYXdJbWFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5
cGU6OkRyYXdMaW5lc0ZvclRleHQ6IHsKKyAgICAgICAgZ2V0PERyYXdMaW5lc0ZvclRleHQ+KCku
fkRyYXdMaW5lc0ZvclRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U6IHsKKyAgICAgICAgZ2V0PERyYXdOYXRpdmVJbWFnZT4o
KS5+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd1BhdGg6IHsKKyAgICAgICAgZ2V0PERyYXdQYXRoPigpLn5EcmF3UGF0aCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJu
OiB7CisgICAgICAgIGdldDxEcmF3UGF0dGVybj4oKS5+RHJhd1BhdHRlcm4oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZTogeworICAg
ICAgICBnZXQ8RHJhd1RpbGVkSW1hZ2U+KCkufkRyYXdUaWxlZEltYWdlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U6IHsK
KyAgICAgICAgZ2V0PERyYXdUaWxlZFNjYWxlZEltYWdlPigpLn5EcmF3VGlsZWRTY2FsZWRJbWFn
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21w
b3NpdGVkUmVjdDogeworICAgICAgICBnZXQ8RmlsbENvbXBvc2l0ZWRSZWN0PigpLn5GaWxsQ29t
cG9zaXRlZFJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBl
OjpGaWxsUGF0aDogeworICAgICAgICBnZXQ8RmlsbFBhdGg+KCkufkZpbGxQYXRoKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6
IHsKKyAgICAgICAgZ2V0PEZpbGxSZWN0V2l0aENvbG9yPigpLn5GaWxsUmVjdFdpdGhDb2xvcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OiB7CisgICAgICAgIGdldDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oKS5+RmlsbFJl
Y3RXaXRoR3JhZGllbnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogeworICAgICAgICBnZXQ8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KCkufkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OiB7CisgICAgICAg
IGdldDxGaWxsUm91bmRlZFJlY3Q+KCkufkZpbGxSb3VuZGVkUmVjdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YTogeworICAgICAgICBn
ZXQ8UHV0SW1hZ2VEYXRhPigpLn5QdXRJbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDogeworICAgICAgICBnZXQ8U2V0TGlu
ZURhc2g+KCkuflNldExpbmVEYXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0U3RhdGU6IHsKKyAgICAgICAgZ2V0PFNldFN0YXRlPigpLn5TZXRTdGF0
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBh
dGg6IHsKKyAgICAgICAgZ2V0PFN0cm9rZVBhdGg+KCkuflN0cm9rZVBhdGgoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9y
OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxl
PEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjaWYgVVNFKENHKQorICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46IHsKKyAg
ICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlG
aWxsUGF0dGVybj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8QXBwbHlTdHJva2VQYXR0ZXJuPjo6dmFsdWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5U
cmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxCZWdpblRyYW5zcGFyZW5jeUxheWVyPjo6dmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDogeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGVhclJlY3Q+
Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0
cnVjdGlibGU8Q2xlYXJTaGFkb3c+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDbGlwPjo6dmFsdWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8Q2xpcE91dD46OnZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxDb25j
YXRlbmF0ZUNUTT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOiB7CisgICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXI+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd0VsbGlwc2U6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGU8RHJhd0VsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOiB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPERyYXdJbWFnZUJ1ZmZlcj46OnZh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGlu
ZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJs
ZTxEcmF3TGluZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3UmVjdDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxEcmF3UmVjdD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxFbmRUcmFuc3BhcmVu
Y3lMYXllcj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsRWxsaXBzZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxGaWxsRWxsaXBzZT46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsSW5saW5lUGF0aDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxGaWxsSW5saW5lUGF0aD46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEZpbGxSZWN0Pjo6dmFs
dWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlBhaW50RnJh
bWVGb3JNZWRpYTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rl
c3RydWN0aWJsZTxQYWludEZyYW1lRm9yTWVkaWE+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZTogeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZXN0b3JlPjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSb3RhdGU+Ojp2
YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2ZTog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
YXZlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6
OlNjYWxlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPFNjYWxlPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
SXRlbVR5cGU6OlNldENUTTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxTZXRDVE0+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldElubGluZUZpbGxDb2xv
cj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8U2V0SW5saW5lRmlsbEdyYWRpZW50Pjo6dmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNv
bG9yOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFNldElubGluZVN0cm9rZUNvbG9yPjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVDYXA6IHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8U2V0TGluZUNhcD46OnZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lSm9pbjogewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTZXRM
aW5lSm9pbj46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRNaXRlckxpbWl0OiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldE1pdGVyTGltaXQ+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB7CisgICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFNldFN0cm9r
ZVRoaWNrbmVzcz46OnZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFN0cm9rZUVsbGlwc2U+Ojp2YWx1ZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVt
VHlwZTo6U3Ryb2tlSW5saW5lUGF0aDogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxTdHJva2VJbmxpbmVQYXRoPjo6dmFsdWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDog
eworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxT
dHJva2VSZWN0Pjo6dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRl
bVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxUcmFuc2xhdGU+Ojp2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgfQorfQorCit2b2lkIEl0ZW1IYW5kbGU6OmNvcHlUbyhJdGVtSGFuZGxlIGRlc3Rp
bmF0aW9uKSBjb25zdAoreworICAgIGF1dG8gaXRlbVR5cGUgPSB0eXBlKCk7CisgICAgZGVzdGlu
YXRpb24uZGF0YVswXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGl0ZW1UeXBlKTsKKyAgICBzd2l0
Y2ggKGl0ZW1UeXBlKSB7CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dFRvUGF0aDogeworICAg
ICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDbGlwT3V0VG9Q
YXRoKGdldDxDbGlwT3V0VG9QYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEg
KyBzaXplb2YoSXRlbVR5cGUpKSBDbGlwUGF0aChnZXQ8Q2xpcFBhdGg+KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczog
eworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZ2V0PENsaXBUb0RyYXdpbmdDb21tYW5kcz4oKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6IHsK
KyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0Zv
Y3VzUmluZ1BhdGgoZ2V0PERyYXdGb2N1c1JpbmdQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUmVjdHM6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0ZvY3VzUmluZ1Jl
Y3RzKGdldDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlv
bi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0dseXBocyhnZXQ8RHJhd0dseXBocz4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlOiB7
CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdJ
bWFnZShnZXQ8RHJhd0ltYWdlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXI6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5k
YXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd0ltYWdlQnVmZmVyKGdldDxEcmF3SW1hZ2VCdWZm
ZXI+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdM
aW5lc0ZvclRleHQ6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0
ZW1UeXBlKSkgRHJhd0xpbmVzRm9yVGV4dChnZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOiB7
CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdO
YXRpdmVJbWFnZShnZXQ8RHJhd05hdGl2ZUltYWdlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBEcmF3UGF0aChnZXQ8RHJhd1BhdGg+KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdQYXR0ZXJuOiB7
CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdQ
YXR0ZXJuKGdldDxEcmF3UGF0dGVybj4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlv
bi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRHJhd1RpbGVkSW1hZ2UoZ2V0PERyYXdUaWxlZElt
YWdlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
VGlsZWRTY2FsZWRJbWFnZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXpl
b2YoSXRlbVR5cGUpKSBEcmF3VGlsZWRTY2FsZWRJbWFnZShnZXQ8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdDogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2Yo
SXRlbVR5cGUpKSBGaWxsQ29tcG9zaXRlZFJlY3QoZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHsK
KyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFBh
dGgoZ2V0PEZpbGxQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRh
dGEgKyBzaXplb2YoSXRlbVR5cGUpKSBGaWxsUmVjdFdpdGhDb2xvcihnZXQ8RmlsbFJlY3RXaXRo
Q29sb3I+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aEdyYWRpZW50OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIEZpbGxSZWN0V2l0aEdyYWRpZW50KGdldDxGaWxsUmVjdFdpdGhHcmFk
aWVudD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsg
c2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoZ2V0PEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUm91bmRlZFJlY3Q6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsg
c2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbFJvdW5kZWRSZWN0KGdldDxGaWxsUm91bmRlZFJlY3Q+KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0
YTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBQ
dXRJbWFnZURhdGEoZ2V0PFB1dEltYWdlRGF0YT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6IHsKKyAgICAgICAgbmV3IChkZXN0aW5h
dGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0TGluZURhc2goZ2V0PFNldExpbmVEYXNo
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0
ZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBT
ZXRTdGF0ZShnZXQ8U2V0U3RhdGU+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRh
ICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU3Ryb2tlUGF0aChnZXQ8U3Ryb2tlUGF0aD4oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBBcHBseURldmljZVNjYWxlRmFjdG9yKGdldDxBcHBseURldmljZVNjYWxlRmFjdG9yPigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBVU0UoQ0cpCisgICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlGaWxsUGF0dGVybjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXpl
b2YoSXRlbVR5cGUpKSBBcHBseUZpbGxQYXR0ZXJuKGdldDxBcHBseUZpbGxQYXR0ZXJuPigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0cm9rZVBh
dHRlcm46IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBl
KSkgQXBwbHlTdHJva2VQYXR0ZXJuKGdldDxBcHBseVN0cm9rZVBhdHRlcm4+KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3Bh
cmVuY3lMYXllcjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRl
bVR5cGUpKSBCZWdpblRyYW5zcGFyZW5jeUxheWVyKGdldDxCZWdpblRyYW5zcGFyZW5jeUxheWVy
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJl
Y3Q6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkg
Q2xlYXJSZWN0KGdldDxDbGVhclJlY3Q+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OkNsZWFyU2hhZG93OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24u
ZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIENsZWFyU2hhZG93KGdldDxDbGVhclNoYWRvdz4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDogeworICAg
ICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBDbGlwKGdldDxD
bGlwPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpDbGlw
T3V0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkp
IENsaXBPdXQoZ2V0PENsaXBPdXQ+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNh
c2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24u
ZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIENvbmNhdGVuYXRlQ1RNKGdldDxDb25jYXRlbmF0ZUNU
TT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBz
aXplb2YoSXRlbVR5cGUpKSBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGdldDxEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0
ZW1UeXBlOjpEcmF3RWxsaXBzZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBz
aXplb2YoSXRlbVR5cGUpKSBEcmF3RWxsaXBzZShnZXQ8RHJhd0VsbGlwc2U+KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOiB7CisgICAgICAg
IG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIERyYXdMaW5lKGdldDxE
cmF3TGluZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
RHJhd1JlY3Q6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1U
eXBlKSkgRHJhd1JlY3QoZ2V0PERyYXdSZWN0PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBuZXcg
KGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBFbmRUcmFuc3BhcmVuY3lMYXll
cihnZXQ8RW5kVHJhbnNwYXJlbmN5TGF5ZXI+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRp
b24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIEZpbGxFbGxpcHNlKGdldDxGaWxsRWxsaXBzZT4o
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHsKKyAgICAgICAgbmV3IChkZXN0
aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgRmlsbElubGluZVBhdGgoZ2V0PEZpbGxJ
bmxpbmVQYXRoPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxSZWN0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIEZpbGxSZWN0KGdldDxGaWxsUmVjdD4oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlhOiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFBhaW50RnJhbWVG
b3JNZWRpYShnZXQ8UGFpbnRGcmFtZUZvck1lZGlhPigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRp
b24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFJlc3RvcmUoZ2V0PFJlc3RvcmU+KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZTogeworICAgICAg
ICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBSb3RhdGUoZ2V0PFJv
dGF0ZT4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2F2
ZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBT
YXZlKGdldDxTYXZlPigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1U
eXBlOjpTY2FsZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRl
bVR5cGUpKSBTY2FsZShnZXQ8U2NhbGU+KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXRlbVR5cGU6OlNldENUTTogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEg
KyBzaXplb2YoSXRlbVR5cGUpKSBTZXRDVE0oZ2V0PFNldENUTT4oKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOiB7CisgICAg
ICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldElubGluZUZp
bGxDb2xvcihnZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAg
bmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0SW5saW5lRmlsbEdy
YWRpZW50KGdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB7CisgICAgICAg
IG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlwZSkpIFNldElubGluZVN0cm9r
ZUNvbG9yKGdldDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNhcDogeworICAgICAgICBuZXcgKGRlc3Rp
bmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBTZXRMaW5lQ2FwKGdldDxTZXRMaW5lQ2Fw
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Sm9pbjogeworICAgICAgICBuZXcgKGRlc3RpbmF0aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUp
KSBTZXRMaW5lSm9pbihnZXQ8U2V0TGluZUpvaW4+KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6IHsKKyAgICAgICAgbmV3IChkZXN0
aW5hdGlvbi5kYXRhICsgc2l6ZW9mKEl0ZW1UeXBlKSkgU2V0TWl0ZXJMaW1pdChnZXQ8U2V0TWl0
ZXJMaW1pdD4oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0U3Ryb2tlVGhpY2tuZXNzOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNp
emVvZihJdGVtVHlwZSkpIFNldFN0cm9rZVRoaWNrbmVzcyhnZXQ8U2V0U3Ryb2tlVGhpY2tuZXNz
PigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VF
bGxpcHNlOiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlw
ZSkpIFN0cm9rZUVsbGlwc2UoZ2V0PFN0cm9rZUVsbGlwc2U+KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6IHsKKyAgICAgICAgbmV3IChkZXN0aW5hdGlvbi5kYXRhICsgc2l6
ZW9mKEl0ZW1UeXBlKSkgU3Ryb2tlSW5saW5lUGF0aChnZXQ8U3Ryb2tlSW5saW5lUGF0aD4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJv
a2VSZWN0OiB7CisgICAgICAgIG5ldyAoZGVzdGluYXRpb24uZGF0YSArIHNpemVvZihJdGVtVHlw
ZSkpIFN0cm9rZVJlY3QoZ2V0PFN0cm9rZVJlY3Q+KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZTogeworICAgICAgICBuZXcgKGRlc3RpbmF0
aW9uLmRhdGEgKyBzaXplb2YoSXRlbVR5cGUpKSBUcmFuc2xhdGUoZ2V0PFRyYW5zbGF0ZT4oKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgfQorfQorCitJdGVtQnVmZmVyOjpJdGVtQnVm
ZmVyKEl0ZW1CdWZmZXJIYW5kbGVzJiYgaGFuZGxlcykKKyAgICA6IG1fcmVhZE9ubHlCdWZmZXJz
KFdURk1vdmUoaGFuZGxlcykpCit7Cit9CisKK0l0ZW1CdWZmZXI6Okl0ZW1CdWZmZXIoKSA9IGRl
ZmF1bHQ7CisKK0l0ZW1CdWZmZXI6On5JdGVtQnVmZmVyKCkKK3sKKyAgICBjbGVhcigpOworfQor
CitJdGVtQnVmZmVyOjpJdGVtQnVmZmVyKEl0ZW1CdWZmZXImJiBvdGhlcikKKyAgICA6IG1fcmVh
ZGluZ0NsaWVudChzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fcmVhZGluZ0NsaWVudCwgbnVsbHB0cikp
CisgICAgLCBtX3dyaXRpbmdDbGllbnQoc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRpbmdDbGll
bnQsIG51bGxwdHIpKQorICAgICwgbV9pdGVtc1RvRGVzdHJveUluQWxsb2NhdGVkQnVmZmVycyhz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRlZEJ1ZmZlcnMsIHsg
fSkpCisgICAgLCBtX2FsbG9jYXRlZEJ1ZmZlcnMoc3RkOjpleGNoYW5nZShvdGhlci5tX2FsbG9j
YXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgLCBtX3JlYWRPbmx5QnVmZmVycyhzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fcmVhZE9ubHlCdWZmZXJzLCB7IH0pKQorICAgICwgbV93cml0YWJsZUJ1ZmZlcihz
dGQ6OmV4Y2hhbmdlKG90aGVyLm1fd3JpdGFibGVCdWZmZXIsIHsgfSkpCisgICAgLCBtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV93cml0dGVuTnVtYmVyT2ZCeXRl
cywgMCkpCit7Cit9CisKK0l0ZW1CdWZmZXImIEl0ZW1CdWZmZXI6Om9wZXJhdG9yPShJdGVtQnVm
ZmVyJiYgb3RoZXIpCit7CisgICAgbV9yZWFkaW5nQ2xpZW50ID0gc3RkOjpleGNoYW5nZShvdGhl
ci5tX3JlYWRpbmdDbGllbnQsIG51bGxwdHIpOworICAgIG1fd3JpdGluZ0NsaWVudCA9IHN0ZDo6
ZXhjaGFuZ2Uob3RoZXIubV93cml0aW5nQ2xpZW50LCBudWxscHRyKTsKKyAgICBtX2l0ZW1zVG9E
ZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2l0ZW1zVG9E
ZXN0cm95SW5BbGxvY2F0ZWRCdWZmZXJzLCB7IH0pOworICAgIG1fYWxsb2NhdGVkQnVmZmVycyA9
IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9hbGxvY2F0ZWRCdWZmZXJzLCB7IH0pOworICAgIG1fcmVh
ZE9ubHlCdWZmZXJzID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3JlYWRPbmx5QnVmZmVycywgeyB9
KTsKKyAgICBtX3dyaXRhYmxlQnVmZmVyID0gc3RkOjpleGNoYW5nZShvdGhlci5tX3dyaXRhYmxl
QnVmZmVyLCB7IH0pOworICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fd3JpdHRlbk51bWJlck9mQnl0ZXMsIDApOworICAgIHJldHVybiAqdGhpczsKK30K
KworSXRlbUJ1ZmZlckhhbmRsZSBJdGVtQnVmZmVyOjpjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBj
YXBhY2l0eSkKK3sKKyAgICBpZiAobV93cml0aW5nQ2xpZW50KSB7CisgICAgICAgIGlmIChhdXRv
IGhhbmRsZSA9IG1fd3JpdGluZ0NsaWVudC0+Y3JlYXRlSXRlbUJ1ZmZlcihjYXBhY2l0eSkpCisg
ICAgICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKworICAgIGNvbnN0ZXhwciBzaXplX3Qg
ZGVmYXVsdEl0ZW1CdWZmZXJDYXBhY2l0eSA9IDEgPDwgMTA7CisKKyAgICBhdXRvIG5ld0J1ZmZl
ckNhcGFjaXR5ID0gc3RkOjptYXgoY2FwYWNpdHksIGRlZmF1bHRJdGVtQnVmZmVyQ2FwYWNpdHkp
OworICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGZhc3RNYWxs
b2MobmV3QnVmZmVyQ2FwYWNpdHkpKTsKKyAgICBtX2FsbG9jYXRlZEJ1ZmZlcnMuYXBwZW5kKGJ1
ZmZlcik7CisgICAgcmV0dXJuIHsgSXRlbUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCksIGJ1
ZmZlciwgbmV3QnVmZmVyQ2FwYWNpdHkgfTsKK30KKwordm9pZCBJdGVtQnVmZmVyOjpmb3JFYWNo
SXRlbUJ1ZmZlcihGdW5jdGlvbjx2b2lkKGNvbnN0IEl0ZW1CdWZmZXJIYW5kbGUmKT4mJiBtYXBG
dW5jdGlvbikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IG1fcmVhZE9ubHlCdWZm
ZXJzKQorICAgICAgICBtYXBGdW5jdGlvbihoYW5kbGUpOworCisgICAgaWYgKG1fd3JpdGFibGVC
dWZmZXIgJiYgbV93cml0dGVuTnVtYmVyT2ZCeXRlcykKKyAgICAgICAgbWFwRnVuY3Rpb24oeyBt
X3dyaXRhYmxlQnVmZmVyLmlkZW50aWZpZXIsIG1fd3JpdGFibGVCdWZmZXIuZGF0YSwgbV93cml0
dGVuTnVtYmVyT2ZCeXRlcyB9KTsKK30KKwordm9pZCBJdGVtQnVmZmVyOjpjbGVhcigpCit7Cisg
ICAgZm9yIChhdXRvIGl0ZW0gOiBzdGQ6OmV4Y2hhbmdlKG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9j
YXRlZEJ1ZmZlcnMsIHsgfSkpCisgICAgICAgIGl0ZW0uZGVzdHJveSgpOworCisgICAgZm9yIChh
dXRvKiBidWZmZXIgOiBzdGQ6OmV4Y2hhbmdlKG1fYWxsb2NhdGVkQnVmZmVycywgeyB9KSkKKyAg
ICAgICAgZmFzdEZyZWUoYnVmZmVyKTsKKworICAgIG1fcmVhZE9ubHlCdWZmZXJzLmNsZWFyKCk7
CisgICAgbV93cml0YWJsZUJ1ZmZlciA9IHsgfTsKKyAgICBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVz
ID0gMDsKK30KKwordm9pZCBJdGVtQnVmZmVyOjpzd2FwV3JpdGFibGVCdWZmZXJJZk5lZWRlZChz
aXplX3QgbnVtYmVyT2ZCeXRlcykKK3sKKyAgICBpZiAobV93cml0dGVuTnVtYmVyT2ZCeXRlcyAr
IG51bWJlck9mQnl0ZXMgPD0gbV93cml0YWJsZUJ1ZmZlci5jYXBhY2l0eSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byBuZXh0QnVmZmVyID0gY3JlYXRlSXRlbUJ1ZmZlcihudW1iZXJPZkJ5
dGVzKTsKKyAgICBib29sIGhhZFByZXZpb3VzQnVmZmVyID0gbV93cml0YWJsZUJ1ZmZlcjsKKyAg
ICBhdXRvIHByZXZpb3VzQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX3dyaXRhYmxlQnVmZmVyLCB7
IH0pOworICAgIHByZXZpb3VzQnVmZmVyLmNhcGFjaXR5ID0gc3RkOjpleGNoYW5nZShtX3dyaXR0
ZW5OdW1iZXJPZkJ5dGVzLCAwKTsKKyAgICBpZiAoaGFkUHJldmlvdXNCdWZmZXIpCisgICAgICAg
IG1fcmVhZE9ubHlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzQnVmZmVyKSk7CisKKyAg
ICBtX3dyaXRhYmxlQnVmZmVyID0gV1RGTW92ZShuZXh0QnVmZmVyKTsKK30KKwordm9pZCBJdGVt
QnVmZmVyOjphcHBlbmREYXRhQW5kTGVuZ3RoKFJlZjxTaGFyZWRCdWZmZXI+JiYgZGF0YSwgdWlu
dDhfdCogbG9jYXRpb24pCit7CisgICAgcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihsb2NhdGlv
bilbMF0gPSBkYXRhLT5zaXplKCk7CisKKyAgICBhdXRvKiBzdGFydE9mUGFkZGluZyA9IGxvY2F0
aW9uICsgc2l6ZW9mKHNpemVfdCk7CisgICAgc2l6ZV90IHBhZGRpbmcgPSAoYWxpZ25vZih1aW50
NjRfdCkgLSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnRPZlBhZGRpbmcpICUgYWxp
Z25vZih1aW50NjRfdCkpICUgYWxpZ25vZih1aW50NjRfdCk7CisgICAgYXV0byogc3RhcnRPZkRh
dGEgPSBzdGFydE9mUGFkZGluZyArIHBhZGRpbmc7CisgICAgbWVtY3B5KHN0YXJ0T2ZEYXRhLCBk
YXRhLT5kYXRhQXNVSW50OFB0cigpLCBkYXRhLT5zaXplKCkpOworCisgICAgbV93cml0dGVuTnVt
YmVyT2ZCeXRlcyArPSBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBwYWRkaW5n
ICsgZGF0YS0+c2l6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBEaXNwbGF5TGlzdAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbUJ1ZmZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdiNDgyZTBlOGIzYTQ3ZTA1YjFjODM2ZDY2ZTNkYzY3MjhjY2Y0ZDYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtQnVmZmVyLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbVR5cGUuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFz
cyBEaXNwbGF5TGlzdDsKKworZW51bSBJdGVtQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgSXRlbUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEl0ZW1CdWZmZXJJZGVu
dGlmaWVyVHlwZT47CisKKy8vIEFuIEl0ZW1CdWZmZXJIYW5kbGUgd3JhcHMgYSBwb2ludGVyIHRv
IGEgYnVmZmVyIHRoYXQgY29udGFpbnMgZGlzcGxheSBsaXN0IGl0ZW0gZGF0YS4KK3N0cnVjdCBJ
dGVtQnVmZmVySGFuZGxlIHsKKyAgICBJdGVtQnVmZmVySWRlbnRpZmllciBpZGVudGlmaWVyOwor
ICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgc2l6ZV90IGNhcGFjaXR5IHsgMCB9
OworCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCp0aGlzKTsgfQorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWRhdGE7IH0KK307CisKK3VzaW5nIEl0
ZW1CdWZmZXJIYW5kbGVzID0gVmVjdG9yPEl0ZW1CdWZmZXJIYW5kbGUsIDI+OworCisvLyBBbiBJ
dGVtSGFuZGxlIHdyYXBzIGEgcG9pbnRlciB0byBhbiBJdGVtVHlwZSwgZm9sbG93ZWQgaW1tZWRp
YXRlbHkgYnkgYW4gaXRlbSBvZiB0aGF0IHR5cGUuCitzdHJ1Y3QgSXRlbUhhbmRsZSB7CisgICAg
dWludDhfdCogZGF0YSB7IG51bGxwdHIgfTsKKworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0Jik7CisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgYm9vbCBpc0RyYXdpbmdJdGVtKCkgY29u
c3QgeyByZXR1cm4gV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmlzRHJhd2luZ0l0ZW0odHlwZSgpKTsg
fQorCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhKCp0aGlzKTsgfQorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWRhdGE7IH0KKworI2lmICFkZWZpbmVk
KE5ERUJVRykgfHwgIUxPR19ESVNBQkxFRAorICAgIENTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25z
dDsKKyNlbmRpZgorCisgICAgSXRlbVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PEl0ZW1UeXBlPihkYXRhWzBdKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gc2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKHR5cGUoKSk7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaXMoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0g
VDo6aXRlbVR5cGU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUJiBnZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzPFQ+KCkpOworICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8VCo+KCZkYXRhW3NpemVvZihJdGVtVHlwZSldKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvcHlUbyhJdGVtSGFuZGxlIGRlc3RpbmF0aW9uKSBjb25zdDsKK307CisKK2NsYXNzIEl0ZW1C
dWZmZXJXcml0aW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyV3Jp
dGluZ0NsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCBJdGVtQnVmZmVySGFuZGxlIGNyZWF0ZUl0
ZW1CdWZmZXIoc2l6ZV90KSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBl
bmNvZGVJdGVtKEl0ZW1IYW5kbGUpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIEl0ZW1CdWZmZXJS
ZWFkaW5nQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JdGVtQnVmZmVyUmVhZGluZ0Ns
aWVudCgpIHsgfQorCisgICAgdmlydHVhbCBPcHRpb25hbDxJdGVtSGFuZGxlPiBXQVJOX1VOVVNF
RF9SRVRVUk4gZGVjb2RlSXRlbShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCwgSXRlbVR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKSA9IDA7Cit9OworCisvLyBBbiBJ
dGVtQnVmZmVyIGNvbnRhaW5zIGRpc3BsYXkgbGlzdCBpdGVtIGRhdGEsIGFuZCBjb25zaXN0cyBv
ZiBhIHJlYWR3cml0ZSBJdGVtQnVmZmVySGFuZGxlICh0byB3aGljaCBkaXNwbGF5CisvLyBsaXN0
IGl0ZW1zIGFyZSBhcHBlbmRlZCkgYXMgd2VsbCBhcyBhIG51bWJlciBvZiByZWFkb25seSBJdGVt
QnVmZmVySGFuZGxlcy4gSXRlbXMgYXJlIGFwcGVuZGVkIHRvIHRoZSByZWFkd3JpdGUKKy8vIGJ1
ZmZlciB1bnRpbCBhbGwgYXZhaWxhYmxlIGNhcGFjaXR5IGlzIGV4aGF1c3RlZCwgYXQgd2hpY2gg
cG9pbnQgd2Ugd2lsbCBtb3ZlIHRoaXMgd3JpdGFibGUgaGFuZGxlIHRvIHRoZSBsaXN0CisvLyBv
ZiByZWFkb25seSBoYW5kbGVzLgorY2xhc3MgSXRlbUJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSXRlbUJ1ZmZlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIGZyaWVuZCBjbGFzcyBEaXNwbGF5TGlzdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIEl0ZW1C
dWZmZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+SXRlbUJ1ZmZlcigpOworICAgIEl0ZW1CdWZm
ZXIoSXRlbUJ1ZmZlckhhbmRsZXMmJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBJdGVtQnVmZmVy
KEl0ZW1CdWZmZXImJik7CisgICAgV0VCQ09SRV9FWFBPUlQgSXRlbUJ1ZmZlciYgb3BlcmF0b3I9
KEl0ZW1CdWZmZXImJik7CisKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoYXV0byBidWZmZXIgOiBt
X3JlYWRPbmx5QnVmZmVycykKKyAgICAgICAgICAgIHJlc3VsdCArPSBidWZmZXIuY2FwYWNpdHk7
CisgICAgICAgIHJlc3VsdCArPSBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fd3JpdHRlbk51bWJlck9mQnl0ZXMg
JiYgbV9yZWFkT25seUJ1ZmZlcnMuaXNFbXB0eSgpOworICAgIH0KKworICAgIFdFQkNPUkVfRVhQ
T1JUIEl0ZW1CdWZmZXJIYW5kbGUgY3JlYXRlSXRlbUJ1ZmZlcihzaXplX3QpOworCisgICAgLy8g
SXRlbUJ1ZmZlcjo6YXBwZW5kPFQ+KC4uLikgYXBwZW5kcyBhIGRpc3BsYXkgbGlzdCBpdGVtIG9m
IHR5cGUgVCB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50CisgICAgLy8gd3JpdGFibGUgYnVmZmVy
IGhhbmRsZTsgaWYgcmVtYWluaW5nIGJ1ZmZlciBjYXBhY2l0eSBpcyBpbnN1ZmZpY2llbnQgdG8g
c3RvcmUgdGhlIGl0ZW0sIGEKKyAgICAvLyBuZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkIChl
aXRoZXIgYnkgdGhlIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50LCBpZiBzZXQsIG9yIGJ5IHRoZSBp
dGVtCisgICAgLy8gYnVmZmVyIGl0c2VsZiBpZiB0aGVyZSBpcyBubyBjbGllbnQpLiBJdGVtcyBh
cmUgcGxhY2VkIGJhY2stdG8tYmFjayBpbiB0aGVzZSBpdGVtIGJ1ZmZlcnMsCisgICAgLy8gd2l0
aCBhbiBJdGVtVHlwZSBzZXBhcmF0aW5nIGVhY2ggaXRlbS4KKyAgICAvLworICAgIC8vIElmIGEg
d3JpdGluZyBjbGllbnQgaXMgcHJlc2VudCBhbmQgcmVxdWlyZXMgY3VzdG9tIGVuY29kaW5nIGZv
ciB0aGUgZ2l2ZW4gaXRlbSB0eXBlIFQsIHRoZQorICAgIC8vIGl0ZW0gYnVmZmVyIHdpbGwgYXNr
IHRoZSBjbGllbnQgZm9yIGFuIG9wYXF1ZSBTaGFyZWRCdWZmZXIgY29udGFpbmluZyBlbmNvZGVk
IGRhdGEgZm9yIHRoZQorICAgIC8vIGl0ZW0uIFRoaXMgZW5jb2RlZCBkYXRhIGlzIHRoZW4gYXBw
ZW5kZWQgdG8gdGhlIGl0ZW0gYnVmZmVyLCB3aXRoIHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQKKyAg
ICAvLyB0aGUgc3RhcnQgb2YgdGhpcyBkYXRhIGlzIGFsaWduZWQgdG8gOCBieXRlcywgaWYgbmVj
ZXNzYXJ5LiBXaGVuIGNvbnN1bWluZyBlbmNvZGVkIGl0ZW0KKyAgICAvLyBkYXRhLCBhIGNvcnJl
c3BvbmRpbmcgSXRlbUJ1ZmZlclJlYWRpbmdDbGllbnQgd2lsbCBiZSByZXF1aXJlZCB0byBjb252
ZXJ0IHRoaXMgZW5jb2RlZCBkYXRhCisgICAgLy8gYmFjayBpbnRvIGFuIGl0ZW0gb2YgdHlwZSBU
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzLi4uIEFyZ3M+IHZvaWQgYXBwZW5kKEFy
Z3MmJi4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlIHx8ICFUOjppc0lubGluZUl0ZW0pOworICAgICAg
ICBjb25zdGV4cHIgYXV0byBzaXplT2ZUeXBlQW5kSXRlbSA9IHNpemVvZihJdGVtVHlwZSkgKyBz
aXplb2YoVCk7CisKKyAgICAgICAgaWYgKCFUOjppc0lubGluZUl0ZW0gJiYgbV93cml0aW5nQ2xp
ZW50KSB7CisgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBpdGVtQnVmZmVyW3NpemVPZlR5cGVB
bmRJdGVtXTsKKyAgICAgICAgICAgIGl0ZW1CdWZmZXJbMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90
PihUOjppdGVtVHlwZSk7CisgICAgICAgICAgICBuZXcgKGl0ZW1CdWZmZXIgKyBzaXplb2YoSXRl
bVR5cGUpKSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgICAgICBpZiAo
YXV0byBzaGFyZWRCdWZmZXIgPSBtX3dyaXRpbmdDbGllbnQtPmVuY29kZUl0ZW0oeyBpdGVtQnVm
ZmVyIH0pKSB7CisgICAgICAgICAgICAgICAgc3dhcFdyaXRhYmxlQnVmZmVySWZOZWVkZWQoc2hh
cmVkQnVmZmVyLT5zaXplKCkgKyBzaXplb2YoSXRlbVR5cGUpICsgc2l6ZW9mKHNpemVfdCkgKyBh
bGlnbm9mKHVpbnQ2NF90KSk7CisgICAgICAgICAgICAgICAgbV93cml0YWJsZUJ1ZmZlci5kYXRh
W21fd3JpdHRlbk51bWJlck9mQnl0ZXNdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oVDo6aXRlbVR5
cGUpOworICAgICAgICAgICAgICAgIGFwcGVuZERhdGFBbmRMZW5ndGgoc2hhcmVkQnVmZmVyLnJl
bGVhc2VOb25OdWxsKCksIG1fd3JpdGFibGVCdWZmZXIuZGF0YSArIG1fd3JpdHRlbk51bWJlck9m
Qnl0ZXMgKyBzaXplb2YoSXRlbVR5cGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3YXBXcml0YWJsZUJ1ZmZlcklmTmVlZGVkKHNp
emVPZlR5cGVBbmRJdGVtKTsKKworICAgICAgICBpZiAoIXN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3Ry
dWN0aWJsZTxUPjo6dmFsdWUpCisgICAgICAgICAgICBtX2l0ZW1zVG9EZXN0cm95SW5BbGxvY2F0
ZWRCdWZmZXJzLmFwcGVuZCh7ICZtX3dyaXRhYmxlQnVmZmVyLmRhdGFbbV93cml0dGVuTnVtYmVy
T2ZCeXRlc10gfSk7CisKKyAgICAgICAgdW5jaGVja2VkQXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdm9pZCBzZXRDbGllbnQoSXRlbUJ1ZmZlcldy
aXRpbmdDbGllbnQqIGNsaWVudCkgeyBtX3dyaXRpbmdDbGllbnQgPSBjbGllbnQ7IH0KKyAgICB2
b2lkIHNldENsaWVudChJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogY2xpZW50KSB7IG1fcmVhZGlu
Z0NsaWVudCA9IGNsaWVudDsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEl0ZW1CdWZmZXJIYW5k
bGVzJiByZWFkT25seUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX3JlYWRPbmx5QnVmZmVyczsg
fQorICAgIHZvaWQgZm9yRWFjaEl0ZW1CdWZmZXIoRnVuY3Rpb248dm9pZChjb25zdCBJdGVtQnVm
ZmVySGFuZGxlJik+JiYpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzd2FwV3Jp
dGFibGVCdWZmZXJJZk5lZWRlZChzaXplX3QgbnVtYmVyT2ZCeXRlcyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBlbmREYXRhQW5kTGVuZ3RoKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ4
X3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBjbGFzcy4uLiBBcmdzPiB2b2lkIHVuY2hl
Y2tlZEFwcGVuZChBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIGF1dG8qIHN0YXJ0T2ZJ
dGVtID0gJm1fd3JpdGFibGVCdWZmZXIuZGF0YVttX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzXTsKKyAg
ICAgICAgc3RhcnRPZkl0ZW1bMF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihUOjppdGVtVHlwZSk7
CisgICAgICAgIG5ldyAoc3RhcnRPZkl0ZW0gKyBzaXplb2YoSXRlbVR5cGUpKSBUKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIG1fd3JpdHRlbk51bWJlck9mQnl0ZXMgKz0g
c2l6ZW9mKEl0ZW1UeXBlKSArIHNpemVPZkl0ZW1JbkJ5dGVzKFQ6Oml0ZW1UeXBlKTsKKyAgICB9
CisKKyAgICBJdGVtQnVmZmVyUmVhZGluZ0NsaWVudCogbV9yZWFkaW5nQ2xpZW50IHsgbnVsbHB0
ciB9OworICAgIEl0ZW1CdWZmZXJXcml0aW5nQ2xpZW50KiBtX3dyaXRpbmdDbGllbnQgeyBudWxs
cHRyIH07CisgICAgVmVjdG9yPEl0ZW1IYW5kbGU+IG1faXRlbXNUb0Rlc3Ryb3lJbkFsbG9jYXRl
ZEJ1ZmZlcnM7CisgICAgVmVjdG9yPHVpbnQ4X3QqPiBtX2FsbG9jYXRlZEJ1ZmZlcnM7CisgICAg
SXRlbUJ1ZmZlckhhbmRsZXMgbV9yZWFkT25seUJ1ZmZlcnM7CisgICAgSXRlbUJ1ZmZlckhhbmRs
ZSBtX3dyaXRhYmxlQnVmZmVyOworICAgIHNpemVfdCBtX3dyaXR0ZW5OdW1iZXJPZkJ5dGVzIHsg
MCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgRGlzcGxheUxpc3QKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCA2ODc3MDM2MGFl
ZTQ2MGE1ODVkZWFmYzJhNDU2YTQ4NTdiZWQ1Zjg1Li41ZWM4YzJlYTAwNDcyMzc0MGEyMzMzNDBj
Y2U4YzJkYTRmYzI5NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBA
IC00NCwyMDQgKzQ0LDE2IEBAIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAvLyBTaG91bGQgbWF0
Y2ggUmVuZGVyVGhlbWU6OnBsYXRmb3JtRm9jdXNSaW5nV2lkdGgoKQogc3RhdGljIGNvbnN0IGZs
b2F0IHBsYXRmb3JtRm9jdXNSaW5nV2lkdGggPSAzOwogCi0jaWYgIWRlZmluZWQoTkRFQlVHKSB8
fCAhTE9HX0RJU0FCTEVECi1XVEY6OkNTdHJpbmcgSXRlbTo6ZGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIFRleHRTdHJlYW0gdHM7Ci0gICAgdHMgPDwgKnRoaXM7Ci0gICAgcmV0dXJuIHRzLnJl
bGVhc2UoKS51dGY4KCk7Ci19Ci0jZW5kaWYKLQotSXRlbTo6SXRlbShJdGVtVHlwZSB0eXBlKQot
ICAgIDogbV90eXBlKHR5cGUpCi17Ci19Ci0KLUl0ZW06On5JdGVtKCkgPSBkZWZhdWx0OwotCi1z
aXplX3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYgaXRlbSkKLXsKLSAgICBzd2l0Y2gg
KGl0ZW0udHlwZSgpKSB7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2F2ZToKLSAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxTYXZlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9y
ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxSZXN0b3JlPihpdGVtKSk7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6VHJhbnNsYXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFRyYW5zbGF0ZT4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlJvdGF0ZToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxSb3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTY2FsZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTY2FsZT4oaXRlbSkpOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTZXRDVE0+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5s
aW5lU3Ryb2tlQ29sb3I6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0SW5saW5l
U3Ryb2tlQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihp
dGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
Q2FwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVDYXA+KGl0ZW0pKTsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRMaW5lRGFzaD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVK
b2luOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldExpbmVKb2luPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TWl0ZXJMaW1pdDoKLSAgICAgICAgcmV0dXJuIHNpemVv
Zihkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xl
YXJTaGFkb3c6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJTaGFkb3c+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PENsaXA+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0OgotICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBPdXQ+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENsaXBP
dXRUb1BhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxDbGlwUGF0aD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5
cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
R2x5cGhzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdHbHlwaHM+KGl0ZW0p
KTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3SW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2Yo
ZG93bmNhc3Q8RHJhd0ltYWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1RpbGVk
SW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1RpbGVkSW1hZ2U+KGl0
ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3
TmF0aXZlSW1hZ2U6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd05hdGl2ZUlt
YWdlPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd1BhdHRlcm46Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UmVjdD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICByZXR1cm4gc2l6
ZW9mKGRvd25jYXN0PERyYXdMaW5lPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xp
bmVzRm9yVGV4dDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3TGluZXNGb3JU
ZXh0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8RHJhd0VsbGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpEcmF3UGF0aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxEcmF3UGF0aD4o
aXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdQYXRoOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1JlY3RzOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PERyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0PihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxGaWxsUmVjdFdpdGhHcmFkaWVudD4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxD
b21wb3NpdGVkUmVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsQ29tcG9z
aXRlZFJlY3Q+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PihpdGVtKSk7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0pKTsKLSNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0
aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSkp
OwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6Ci0gICAgICAgIHJldHVybiBz
aXplb2YoZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
RWxsaXBzZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsRWxsaXBzZT4oaXRl
bSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxQdXRJbWFnZURhdGE+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8UGFpbnRG
cmFtZUZvck1lZGlhPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VSZWN0PihpdGVtKSk7Ci0jaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0
aDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPihpdGVt
KSk7Ci0jZW5kaWYKLSAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZUVs
bGlwc2U+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8Q2xlYXJSZWN0PihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPihpdGVtKSk7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RW5k
VHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8RW5kVHJh
bnNwYXJlbmN5TGF5ZXI+KGl0ZW0pKTsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6
QXBwbHlTdHJva2VQYXR0ZXJuOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEFwcGx5
U3Ryb2tlUGF0dGVybj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5RmlsbFBhdHRl
cm46Ci0gICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4oaXRl
bSkpOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2FsZUZhY3RvcjoK
LSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxBcHBseURldmljZVNjYWxlRmFjdG9yPihp
dGVtKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd2luZ0l0ZW0mIGl0ZW0pCi17Ci0gICAg
dHMuc3RhcnRHcm91cCgpOwotICAgIHRzIDw8ICJleHRlbnQgIjsKLSAgICBpZiAoaXRlbS5leHRl
bnRLbm93bigpKQotICAgICAgICB0cyA8PCBpdGVtLmV4dGVudCgpOwotICAgIGVsc2UKLSAgICAg
ICAgdHMgPDwgInVua25vd24iOwotICAgIAotICAgIHRzLmVuZEdyb3VwKCk7Ci0gICAgcmV0dXJu
IHRzOwotfQotCi1EcmF3aW5nSXRlbTo6RHJhd2luZ0l0ZW0oSXRlbVR5cGUgdHlwZSkKLSAgICA6
IEl0ZW0odHlwZSkKLXsKLX0KLQotRHJhd2luZ0l0ZW06On5EcmF3aW5nSXRlbSgpID0gZGVmYXVs
dDsKLQotU2F2ZTo6U2F2ZSgpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTYXZlKQotewotfQotCi1T
YXZlOjp+U2F2ZSgpID0gZGVmYXVsdDsKLQogdm9pZCBTYXZlOjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zYXZlKCk7CiB9CiAKLVJlc3RvcmU6
OlJlc3RvcmUoKQotICAgIDogSXRlbShJdGVtVHlwZTo6UmVzdG9yZSkKLXsKLX0KLQotUmVzdG9y
ZTo6flJlc3RvcmUoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgUmVzdG9yZTo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQucmVzdG9yZSgpOwogfQogCi1U
cmFuc2xhdGU6OlRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotICAgIDogSXRlbShJdGVtVHlw
ZTo6VHJhbnNsYXRlKQotICAgICwgbV94KHgpCi0gICAgLCBtX3koeSkKLXsKLX0KLQotVHJhbnNs
YXRlOjp+VHJhbnNsYXRlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFRyYW5zbGF0ZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQudHJhbnNsYXRlKG1f
eCwgbV95KTsKQEAgLTI1NSwxNCArNjcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgVHJhbnNsYXRlJiBpdGVtKQogICAgIHJldHVybiB0czsK
IH0KIAotUm90YXRlOjpSb3RhdGUoZmxvYXQgYW5nbGUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpS
b3RhdGUpCi0gICAgLCBtX2FuZ2xlKGFuZ2xlKQotewotfQotCi1Sb3RhdGU6On5Sb3RhdGUoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgUm90YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5yb3RhdGUobV9hbmdsZSk7CkBAIC0yNzUsMTQgKzc5LDYg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJv
dGF0ZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNjYWxlOjpTY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTY2FsZSkKLSAgICAsIG1fc2l6ZShz
aXplKQotewotfQotCi1TY2FsZTo6flNjYWxlKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNjYWxlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zY2Fs
ZShtX3NpemUpOwpAQCAtMjk1LDE0ICs5MSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTY2FsZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9
CiAKLVNldENUTTo6U2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotICAg
IDogSXRlbShJdGVtVHlwZTo6U2V0Q1RNKQotICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQot
ewotfQotCi1TZXRDVE06On5TZXRDVE0oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0Q1RNOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRDVE0o
bV90cmFuc2Zvcm0pOwpAQCAtMzE1LDE0ICsxMDMsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0Q1RNJiBpdGVtKQogICAgIHJldHVybiB0
czsKIH0KIAotQ29uY2F0ZW5hdGVDVE06OkNvbmNhdGVuYXRlQ1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0pCi0g
ICAgLCBtX3RyYW5zZm9ybSh0cmFuc2Zvcm0pCi17Ci19Ci0KLUNvbmNhdGVuYXRlQ1RNOjp+Q29u
Y2F0ZW5hdGVDVE0oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ29uY2F0ZW5hdGVDVE06OmFwcGx5KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNvbmNhdENUTSht
X3RyYW5zZm9ybSk7CkBAIC0zMzYsOCArMTE2LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbmNhdGVuYXRlQ1RNJiBpdGVtKQogfQogCiBT
ZXRJbmxpbmVGaWxsR3JhZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVu
dCYgZ3JhZGllbnQpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQp
Ci0gICAgLCBtX2RhdGEoZ3JhZGllbnQuZGF0YSgpKQorICAgIDogbV9kYXRhKGdyYWRpZW50LmRh
dGEoKSkKICAgICAsIG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKGdyYWRpZW50LmdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0oKSkKICAgICAsIG1fc3ByZWFkTWV0aG9kKGdyYWRpZW50LnNwcmVh
ZE1ldGhvZCgpKQogICAgICwgbV9jb2xvclN0b3BDb3VudChzdGF0aWNfY2FzdDx1aW50OF90Pihn
cmFkaWVudC5zdG9wcygpLnNpemUoKSkpCkBAIC0zNTksMTQgKzEzOCw4IEBAIFJlZjxHcmFkaWVu
dD4gU2V0SW5saW5lRmlsbEdyYWRpZW50OjpncmFkaWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGdy
YWRpZW50OwogfQogCi1SZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmNyZWF0ZShjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRpZW50KGdyYWRpZW50KSk7Ci19Ci0KIFNldElu
bGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4
Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRd
LCBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFk
aWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhv
ZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxHcmFkaWVudCkKLSAgICAsIG1fZGF0YShkYXRhKQorICAgIDogbV9kYXRhKGRhdGEpCiAg
ICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudFNwYWNlVHJhbnNmb3Jt
YXRpb24pCiAgICAgLCBtX3NwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpCiAgICAgLCBtX2NvbG9y
U3RvcENvdW50KGNvbG9yU3RvcENvdW50KQpAQCAtMzc4LDggKzE1MSw2IEBAIFNldElubGluZUZp
bGxHcmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JT
dG9wQ291bnRdLCBTCiAgICAgfQogfQogCi1TZXRJbmxpbmVGaWxsR3JhZGllbnQ6On5TZXRJbmxp
bmVGaWxsR3JhZGllbnQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKG1fY29s
b3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpCkBAIC00MDUsMTMgKzE3Niw2IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxp
bmVGaWxsR3JhZGllbnQmKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldElubGluZUZpbGxD
b2xvcj4gU2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUoU1JHQkE8dWludDhfdD4gY29sb3JEYXRh
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxDb2xvcihjb2xvckRh
dGEpKTsKLX0KLQotU2V0SW5saW5lRmlsbENvbG9yOjp+U2V0SW5saW5lRmlsbENvbG9yKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwpA
QCAtNDIzLDEzICsxODcsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU2V0SW5saW5lRmlsbENvbG9yJiBzdGF0ZSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLVJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNy
ZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0SW5saW5lU3Ryb2tlQ29sb3IoY29sb3JEYXRhKSk7Ci19Ci0KLVNldElubGluZVN0cm9r
ZUNvbG9yOjp+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgU2V0SW5s
aW5lU3Ryb2tlQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yKCkpOwpAQCAtNDQxLDEzICsxOTgsNiBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
SW5saW5lU3Ryb2tlQ29sb3ImIHN0YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldFN0
cm9rZVRoaWNrbmVzcz4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoZmxvYXQgdGhpY2tuZXNz
KQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25l
c3MpKTsKLX0KLQotU2V0U3Ryb2tlVGhpY2tuZXNzOjp+U2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBk
ZWZhdWx0OwotCiB2b2lkIFNldFN0cm9rZVRoaWNrbmVzczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fdGhp
Y2tuZXNzKTsKQEAgLTQ2MCwxOSArMjEwLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogfQog
CiBTZXRTdGF0ZTo6U2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLSAgICA6IEl0ZW0o
SXRlbVR5cGU6OlNldFN0YXRlKQotICAgICwgbV9zdGF0ZShzdGF0ZSwgZmxhZ3MpCisgICAgOiBt
X3N0YXRlKHN0YXRlLCBmbGFncykKIHsKIH0KIAogU2V0U3RhdGU6OlNldFN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoYW5nZSkKLSAgICA6IEl0ZW0oSXRlbVR5
cGU6OlNldFN0YXRlKQotICAgICwgbV9zdGF0ZShzdGF0ZUNoYW5nZSkKKyAgICA6IG1fc3RhdGUo
c3RhdGVDaGFuZ2UpCiB7CiB9CiAKLVNldFN0YXRlOjp+U2V0U3RhdGUoKSA9IGRlZmF1bHQ7Ci0K
IHZvaWQgU2V0U3RhdGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
ICAgICBtX3N0YXRlLmFwcGx5KGNvbnRleHQpOwpAQCAtNDg0LDE0ICsyMzAsNiBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3RhdGUmIHN0
YXRlKQogICAgIHJldHVybiB0czsKIH0KIAotU2V0TGluZUNhcDo6U2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lQ2FwKQotICAgICwgbV9saW5l
Q2FwKGxpbmVDYXApCi17Ci19Ci0KLVNldExpbmVDYXA6On5TZXRMaW5lQ2FwKCkgPSBkZWZhdWx0
OwotCiB2b2lkIFNldExpbmVDYXA6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKIHsKICAgICBjb250ZXh0LnNldExpbmVDYXAobV9saW5lQ2FwKTsKQEAgLTUwMywxNSArMjQx
LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFNldExpbmVDYXAmIGxpbmVDYXApCiAgICAgcmV0dXJuIHRzOwogfQogCi1TZXRMaW5lRGFzaDo6
U2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoQXJyYXksIGZsb2F0IGRhc2hPZmZzZXQp
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRMaW5lRGFzaCkKLSAgICAsIG1fZGFzaEFycmF5KGRh
c2hBcnJheSkKLSAgICAsIG1fZGFzaE9mZnNldChkYXNoT2Zmc2V0KQotewotfQotCi1TZXRMaW5l
RGFzaDo6flNldExpbmVEYXNoKCkgPSBkZWZhdWx0OwotCiB2b2lkIFNldExpbmVEYXNoOjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5zZXRMaW5l
RGFzaChtX2Rhc2hBcnJheSwgbV9kYXNoT2Zmc2V0KTsKQEAgLTUyNCwxNCArMjUzLDYgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldExpbmVE
YXNoJiBsaW5lRGFzaCkKICAgICByZXR1cm4gdHM7CiB9CiAKLVNldExpbmVKb2luOjpTZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldExpbmVKb2lu
KQotICAgICwgbV9saW5lSm9pbihsaW5lSm9pbikKLXsKLX0KLQotU2V0TGluZUpvaW46On5TZXRM
aW5lSm9pbigpID0gZGVmYXVsdDsKLQogdm9pZCBTZXRMaW5lSm9pbjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuc2V0TGluZUpvaW4obV9saW5l
Sm9pbik7CkBAIC01NDMsMTQgKzI2NCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRMaW5lSm9pbiYgbGluZUpvaW4pCiAgICAgcmV0dXJu
IHRzOwogfQogCi1TZXRNaXRlckxpbWl0OjpTZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQp
Ci0gICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0KQotICAgICwgbV9taXRlckxpbWl0
KG1pdGVyTGltaXQpCi17Ci19Ci0KLVNldE1pdGVyTGltaXQ6On5TZXRNaXRlckxpbWl0KCkgPSBk
ZWZhdWx0OwotCiB2b2lkIFNldE1pdGVyTGltaXQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LnNldE1pdGVyTGltaXQobV9taXRlckxpbWl0KTsK
QEAgLTU2MiwyNiArMjc1LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBTZXRNaXRlckxpbWl0JiBtaXRlckxpbWl0KQogICAgIHJldHVybiB0
czsKIH0KIAotQ2xlYXJTaGFkb3c6OkNsZWFyU2hhZG93KCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6
OkNsZWFyU2hhZG93KQotewotfQotCi1DbGVhclNoYWRvdzo6fkNsZWFyU2hhZG93KCkgPSBkZWZh
dWx0OwotCiB2b2lkIENsZWFyU2hhZG93OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGVhclNoYWRvdygpOwogfQogCi1DbGlwOjpDbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkNsaXApCi0gICAgLCBt
X3JlY3QocmVjdCkKLXsKLX0KLQotQ2xpcDo6fkNsaXAoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xp
cDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
Y2xpcChtX3JlY3QpOwpAQCAtNTkzLDE0ICsyOTEsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcCYgaXRlbSkKICAgICByZXR1cm4gdHM7
CiB9CiAKLUNsaXBPdXQ6OkNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogSXRl
bShJdGVtVHlwZTo6Q2xpcE91dCkKLSAgICAsIG1fcmVjdChyZWN0KQotewotfQotCi1DbGlwT3V0
Ojp+Q2xpcE91dCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwT3V0OjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5jbGlwT3V0KG1fcmVjdCk7CkBA
IC02MTIsMTQgKzMwMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDbGlwT3V0JiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotQ2xpcE91
dFRvUGF0aDo6Q2xpcE91dFRvUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogSXRlbShJdGVt
VHlwZTo6Q2xpcE91dFRvUGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1DbGlwT3V0
VG9QYXRoOjp+Q2xpcE91dFRvUGF0aCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwT3V0VG9QYXRo
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5j
bGlwT3V0KG1fcGF0aCk7CkBAIC02MzEsMTUgKzMxMyw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwT3V0VG9QYXRoJiBpdGVtKQogICAg
IHJldHVybiB0czsKIH0KIAotQ2xpcFBhdGg6OkNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIHdpbmRSdWxlKQotICAgIDogSXRlbShJdGVtVHlwZTo6Q2xpcFBhdGgpCi0gICAgLCBt
X3BhdGgocGF0aCkKLSAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCi17Ci19Ci0KLUNsaXBQYXRo
Ojp+Q2xpcFBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQ2xpcFBhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsaXBQYXRoKG1fcGF0aCwg
bV93aW5kUnVsZSk7CkBAIC02NTIsMTYgKzMyNSw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUGF0aCYgaXRlbSkKICAgICByZXR1cm4g
dHM7CiB9CiAKLUNsaXBUb0RyYXdpbmdDb21tYW5kczo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgRGlzcGxh
eUxpc3QmJiBkcmF3aW5nQ29tbWFuZHMpCi0gICAgOiBJdGVtKEl0ZW1UeXBlOjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHMpCi0gICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9j
b2xvclNwYWNlKGNvbG9yU3BhY2UpCi0gICAgLCBtX2RyYXdpbmdDb21tYW5kcyhXVEZNb3ZlKGRy
YXdpbmdDb21tYW5kcykpCi17Ci19Ci0KLUNsaXBUb0RyYXdpbmdDb21tYW5kczo6fkNsaXBUb0Ry
YXdpbmdDb21tYW5kcygpID0gZGVmYXVsdDsKLQogdm9pZCBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNs
aXBUb0RyYXdpbmdDb21tYW5kcyhtX2Rlc3RpbmF0aW9uLCBtX2NvbG9yU3BhY2UsIFsmXSAoR3Jh
cGhpY3NDb250ZXh0JiBjbGlwcGluZ0NvbnRleHQpIHsKQEAgLTY3OCw4ICszNDEsNyBAQCBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzJiBpdGVtKQogfQogCiBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8
R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxv
Y2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIDogRHJhd2lu
Z0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2ZvbnQoY29uc3RfY2FzdDxGb250
Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25zdF9jYXN0PEZvbnQmPihmb250
KSkpCiAgICAgLCBtX2dseXBocyhXVEZNb3ZlKGdseXBocykpCiAgICAgLCBtX2FkdmFuY2VzKFdU
Rk1vdmUoYWR2YW5jZXMpKQogICAgICwgbV9sb2NhbEFuY2hvcihsb2NhbEFuY2hvcikKQEAgLTY4
OSw4ICszNTEsNyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIFZl
Y3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLAogfQogCiBEcmF3R2x5cGhzOjpE
cmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQsIGNv
bnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdHbHlwaHMpCi0gICAgLCBtX2Zv
bnQoY29uc3RfY2FzdDxGb250Jj4oZm9udCkpCisgICAgOiBtX2ZvbnQobWFrZVJlZlB0cihjb25z
dF9jYXN0PEZvbnQmPihmb250KSkpCiAgICAgLCBtX2xvY2FsQW5jaG9yKGxvY2FsQW5jaG9yKQog
ICAgICwgbV9zbW9vdGhpbmdNb2RlKHNtb290aGluZ01vZGUpCiB7CkBAIC03MDMsMTkgKzM2NCwx
NyBAQCBEcmF3R2x5cGhzOjpEcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgRwogICAgIGNvbXB1dGVCb3VuZHMoKTsKIH0KIAot
RHJhd0dseXBoczo6fkRyYXdHbHlwaHMoKSA9IGRlZmF1bHQ7Ci0KIGlubGluZSBHbHlwaEJ1ZmZl
ciBEcmF3R2x5cGhzOjpnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3QKIHsKICAgICBHbHlwaEJ1
ZmZlciByZXN1bHQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7
ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChtX2dseXBoc1tpXSwgbV9mb250LmdldCgpLCBtX2Fk
dmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQpOworICAgICAgICByZXN1bHQuYWRkKG1f
Z2x5cGhzW2ldLCAqbV9mb250LCBtX2FkdmFuY2VzW2ldLCBHbHlwaEJ1ZmZlcjo6bm9PZmZzZXQp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRHJhd0dseXBoczo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuZHJhd0dseXBocyhtX2Zv
bnQsIGdlbmVyYXRlR2x5cGhCdWZmZXIoKSwgMCwgbV9nbHlwaHMuc2l6ZSgpLCBhbmNob3JQb2lu
dCgpLCBtX3Ntb290aGluZ01vZGUpOworICAgIGNvbnRleHQuZHJhd0dseXBocygqbV9mb250LCBn
ZW5lcmF0ZUdseXBoQnVmZmVyKCksIDAsIG1fZ2x5cGhzLnNpemUoKSwgYW5jaG9yUG9pbnQoKSwg
bV9zbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkK
QEAgLTczNSwxNCArMzk0LDggQEAgdm9pZCBEcmF3R2x5cGhzOjpjb21wdXRlQm91bmRzKCkKICAg
ICB9CiB9CiAKLU9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0dseXBoczo6bG9jYWxCb3VuZHMoY29u
c3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ib3VuZHM7Ci19Ci0K
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3
R2x5cGhzJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVt
Jj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGR1bXAgbW9yZSBzdHVmZi4KICAgICB0cy5kdW1wUHJv
cGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVtcFBy
b3BlcnR5KCJhbmNob3ItcG9pbnQiLCBpdGVtLmFuY2hvclBvaW50KCkpOwpAQCAtNzUxLDE3ICs0
MDQsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0dseXBocyYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdJbWFnZTo6RHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3Qg
RmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2UpCi0gICAg
LCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAs
IG1fc291cmNlKHNvdXJjZSkKLSAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCi17Ci19Ci0KLURyYXdJbWFnZTo6fkRyYXdJbWFnZSgpID0gZGVmYXVsdDsK
LQogdm9pZCBEcmF3SW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
IHsKICAgICBjb250ZXh0LmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBt
X3NvdXJjZSwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjksMjYgKzQxMSwxMiBAQCB2
b2lkIERyYXdJbWFnZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0lt
YWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4o
aXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAg
dHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvbigpKTsKICAgICByZXR1cm4g
dHM7CiB9CiAKLURyYXdUaWxlZEltYWdlOjpEcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29u
c3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCi0gICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2UpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAg
ICwgbV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAg
ICAsIG1fdGlsZVNpemUodGlsZVNpemUpCi0gICAgLCBtX3NwYWNpbmcoc3BhY2luZykKLSAgICAs
IG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCi17Ci19Ci0KLURy
YXdUaWxlZEltYWdlOjp+RHJhd1RpbGVkSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd1Rp
bGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBj
b250ZXh0LmRyYXdUaWxlZEltYWdlKG1faW1hZ2UuZ2V0KCksIG1fZGVzdGluYXRpb24sIG1fc291
cmNlLCBtX3RpbGVTaXplLCBtX3NwYWNpbmcsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAt
Nzk2LDcgKzQyNCw2IEBAIHZvaWQgRHJhd1RpbGVkSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdUaWxlZEltYWdlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRp
Y19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJp
bWFnZSIsIGl0ZW0uaW1hZ2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcG9pbnQi
LCBpdGVtLnNvdXJjZSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImRlc3QtcmVjdCIsIGl0ZW0u
ZGVzdGluYXRpb24oKSk7CkBAIC04MDUsMjAgKzQzMiw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3VGlsZWRJbWFnZSYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLURyYXdUaWxlZFNjYWxlZEltYWdlOjpEcmF3VGlsZWRTY2FsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBt
X2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwg
bV90aWxlU2NhbGVGYWN0b3IodGlsZVNjYWxlRmFjdG9yKQotICAgICwgbV9oUnVsZShoUnVsZSkK
LSAgICAsIG1fdlJ1bGUodlJ1bGUpCi0gICAgLCBtX2ltYWdlUGFpbnRpbmdPcHRpb25zKGltYWdl
UGFpbnRpbmdPcHRpb25zKQotewotfQotCi1EcmF3VGlsZWRTY2FsZWRJbWFnZTo6fkRyYXdUaWxl
ZFNjYWxlZEltYWdlKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdUaWxlZFNjYWxlZEltYWdlOjph
cHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3
VGlsZWRJbWFnZShtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3NvdXJjZSwgbV90aWxl
U2NhbGVGYWN0b3IsIG1faFJ1bGUsIG1fdlJ1bGUsIG1faW1hZ2VQYWludGluZ09wdGlvbnMpOwpA
QCAtODI2LDI2ICs0MzksMTMgQEAgdm9pZCBEcmF3VGlsZWRTY2FsZWRJbWFnZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1RpbGVkU2NhbGVkSW1hZ2UmIGl0ZW0pCiB7
Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0
cy5kdW1wUHJvcGVydHkoImltYWdlIiwgaXRlbS5pbWFnZSgpKTsKICAgICB0cy5kdW1wUHJvcGVy
dHkoInNvdXJjZS1yZWN0IiwgaXRlbS5zb3VyY2UoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJk
ZXN0LXJlY3QiLCBpdGVtLmRlc3RpbmF0aW9uKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRHJh
d0ltYWdlQnVmZmVyOjpEcmF3SW1hZ2VCdWZmZXIoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3SW1hZ2VCdWZmZXIpCi0gICAg
LCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpCi0gICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKLSAgICAsIG1fc3JjUmVjdChz
cmNSZWN0KQotICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCi17Ci0gICAgQVNTRVJUKG1fcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLX0KLQotRHJhd0ltYWdlQnVmZmVyOjp+RHJhd0ltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwotCi12b2lkIERyYXdJbWFnZUJ1ZmZlcjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QKK05PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgRHJhd0ltYWdl
QnVmZmVyOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQpAQCAtODU3LDE2ICs0NTcsMTQgQEAgdm9pZCBEcmF3SW1hZ2VCdWZmZXI6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGlt
YWcKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IERyYXdJbWFnZUJ1ZmZlciYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBE
cmF3aW5nSXRlbSY+KGl0ZW0pOwotICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVtb3RlLXJlc291cmNl
LWlkZW50aWZpZXIiLCBpdGVtLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpKTsKKyAgICB0
cy5kdW1wUHJvcGVydHkoInJlbmRlcmluZy1yZXNvdXJjZS1pZGVudGlmaWVyIiwgaXRlbS5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2Ut
cmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0Iiwg
aXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBEcmF3TmF0aXZl
SW1hZ2U6OkRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZSkKLSAgICAsIG1faW1h
Z2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGltYWdlKQogICAgICwgbV9pbWFnZVNpemUoaW1hZ2VT
aXplKQogICAgICwgbV9kZXN0aW5hdGlvblJlY3QoZGVzdFJlY3QpCiAgICAgLCBtX3NyY1JlY3Qo
c3JjUmVjdCkKQEAgLTg3NCw4ICs0NzIsNiBAQCBEcmF3TmF0aXZlSW1hZ2U6OkRyYXdOYXRpdmVJ
bWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaQogewog
fQogCi1EcmF3TmF0aXZlSW1hZ2U6On5EcmF3TmF0aXZlSW1hZ2UoKSA9IGRlZmF1bHQ7Ci0KIHZv
aWQgRHJhd05hdGl2ZUltYWdlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiB7CiAgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFnZSwgbV9pbWFnZVNpemUsIG1f
ZGVzdGluYXRpb25SZWN0LCBtX3NyY1JlY3QsIG1fb3B0aW9ucyk7CkBAIC04ODMsNyArNDc5LDYg
QEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25z
dCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIC8vIEZJWE1FOiBkdW1wIG1vcmUgc3R1ZmYuCiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJzb3VyY2UtcmVjdCIsIGl0ZW0uc291cmNlKCkpOwogICAgIHRz
LmR1bXBQcm9wZXJ0eSgiZGVzdC1yZWN0IiwgaXRlbS5kZXN0aW5hdGlvblJlY3QoKSk7CkBAIC04
OTEsOCArNDg2LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IERyYXdOYXRpdmVJbWFnZSYgaXRlbSkKIH0KIAogRHJhd1BhdHRlcm46OkRyYXdQ
YXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3UGF0dGVybikKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCisgICAgOiBtX2ltYWdlKGlt
YWdlKQogICAgICwgbV9wYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm0pCiAgICAgLCBt
X3RpbGVSZWN0KHRpbGVSZWN0KQogICAgICwgbV9kZXN0aW5hdGlvbihkZXN0UmVjdCkKQEAgLTkw
Miw4ICs0OTYsNiBAQCBEcmF3UGF0dGVybjo6RHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlYwogewogfQogCi1EcmF3UGF0dGVy
bjo6fkRyYXdQYXR0ZXJuKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3UGF0dGVy
bihtX2ltYWdlLmdldCgpLCBtX2Rlc3RpbmF0aW9uLCBtX3RpbGVSZWN0LCBtX3BhdHRlcm5UcmFu
c2Zvcm0sIG1fcGhhc2UsIG1fc3BhY2luZywgbV9vcHRpb25zKTsKQEAgLTkxMSw3ICs1MDMsNiBA
QCB2b2lkIERyYXdQYXR0ZXJuOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3UGF0dGVybiYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5n
SXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgiaW1hZ2UiLCBpdGVtLmltYWdlKCkp
OwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0dGVybi10cmFuc2Zvcm0iLCBpdGVtLnBhdHRlcm5U
cmFuc2Zvcm0oKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJ0aWxlLXJlY3QiLCBpdGVtLnRpbGVS
ZWN0KCkpOwpAQCAtOTIxLDE1ICs1MTIsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdHRlcm4mIGl0ZW0pCiAgICAgcmV0dXJuIHRz
OwogfQogCi1EcmF3UmVjdDo6RHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd1JlY3QpCi0g
ICAgLCBtX3JlY3QocmVjdCkKLSAgICAsIG1fYm9yZGVyVGhpY2tuZXNzKGJvcmRlclRoaWNrbmVz
cykKLXsKLX0KLQotRHJhd1JlY3Q6On5EcmF3UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3
UmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRl
eHQuZHJhd1JlY3QobV9yZWN0LCBtX2JvcmRlclRoaWNrbmVzcyk7CkBAIC05MzcsMjEgKzUxOSwx
MSBAQCB2b2lkIERyYXdSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBE
cmF3UmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRl
bSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoImJvcmRlci10aGlja25lc3MiLCBpdGVtLmJvcmRlclRoaWNrbmVz
cygpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdMaW5lOjpEcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLSAgICA6IERyYXdpbmdJ
dGVtKEl0ZW1UeXBlOjpEcmF3TGluZSkKLSAgICAsIG1fcG9pbnQxKHBvaW50MSkKLSAgICAsIG1f
cG9pbnQyKHBvaW50MikKLXsKLX0KLQotRHJhd0xpbmU6On5EcmF3TGluZSgpID0gZGVmYXVsdDsK
LQogT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3TGluZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgYm91bmRzOwpAQCAtOTY2LDE1ICs1
MzgsMTMgQEAgdm9pZCBEcmF3TGluZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0xpbmUmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTEiLCBpdGVtLnBvaW50
MSgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBvaW50LTIiLCBpdGVtLnBvaW50MigpKTsKICAg
ICByZXR1cm4gdHM7CiB9CiAKIERyYXdMaW5lc0ZvclRleHQ6OkRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hv
ciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcykKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpEcmF3TGlu
ZXNGb3JUZXh0KQotICAgICwgbV9ibG9ja0xvY2F0aW9uKGJsb2NrTG9jYXRpb24pCisgICAgOiBt
X2Jsb2NrTG9jYXRpb24oYmxvY2tMb2NhdGlvbikKICAgICAsIG1fbG9jYWxBbmNob3IobG9jYWxB
bmNob3IpCiAgICAgLCBtX3dpZHRocyh3aWR0aHMpCiAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25l
c3MpCkBAIC05ODMsOCArNTUzLDYgQEAgRHJhd0xpbmVzRm9yVGV4dDo6RHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFMKIHsKIH0KIAot
RHJhd0xpbmVzRm9yVGV4dDo6fkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQg
RHJhd0xpbmVzRm9yVGV4dDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuZHJhd0xpbmVzRm9yVGV4dChwb2ludCgpLCBtX3RoaWNrbmVzcywgbV93
aWR0aHMsIG1fcHJpbnRpbmcsIG1fZG91YmxlTGluZXMpOwpAQCAtMTAwNCw3ICs1NzIsNiBAQCBP
cHRpb25hbDxGbG9hdFJlY3Q+IERyYXdMaW5lc0ZvclRleHQ6OmxvY2FsQm91bmRzKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3TGluZXNGb3JUZXh0JiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJibG9jay1sb2NhdGlvbiIsIGl0ZW0uYmxvY2tMb2NhdGlvbigpKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoImxvY2FsLWFuY2hvciIsIGl0ZW0ubG9jYWxBbmNob3IoKSk7CiAgICAgdHMuZHVt
cFByb3BlcnR5KCJwb2ludCIsIGl0ZW0ucG9pbnQoKSk7CkBAIC0xMDE2LDE1ICs1ODMsNiBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0xp
bmVzRm9yVGV4dCYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXI6OkRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAg
LCBtX3N0eWxlKHN0eWxlKQotewotfQotCi1EcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjp+RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcigpID0gZGVmYXVsdDsKLQogdm9pZCBEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgY29udGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcmVjdCwgbV9zdHlsZSk7CkBA
IC0xMDM3LDE5ICs1OTUsMTAgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBEcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQKIAogc3RhdGljIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXImIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2lu
Z0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7
CiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3RWxsaXBzZTo6RHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkRyYXdFbGxpcHNlKQot
ICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLURyYXdFbGxpcHNlOjp+RHJhd0VsbGlwc2UoKSA9
IGRlZmF1bHQ7Ci0KIHZvaWQgRHJhd0VsbGlwc2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmRyYXdFbGxpcHNlKG1fcmVjdCk7CkBAIC0xMDYx
LDE0ICs2MTAsNiBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1EcmF3UGF0
aDo6RHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBl
OjpEcmF3UGF0aCkKLSAgICAsIG1fcGF0aChwYXRoKQotewotfQotCi1EcmF3UGF0aDo6fkRyYXdQ
YXRoKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiB7CiAjaWYgVVNFKENHKQpAQCAtMTA3OCwyNCArNjE5LDEyIEBAIHZv
aWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICNlbmRp
ZgogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd1BhdGgmIGl0ZW0pCitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0
IERyYXdpbmdJdGVtJj4oaXRlbSk7Ci0vLyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVt
LnBhdGgoKSk7IC8vIEZJWE1FOiBhZGQgbG9nZ2luZyBmb3IgcGF0aHMuCisgICAgLy8gRklYTUU6
IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KICAgICByZXR1cm4gdHM7CiB9CiAKLURyYXdGb2N1c1Jp
bmdQYXRoOjpEcmF3Rm9jdXNSaW5nUGF0aChjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGgpCi0gICAgLCBtX3BhdGgocGF0aCkKLSAgICAsIG1fd2lk
dGgod2lkdGgpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQot
ewotfQotCi1EcmF3Rm9jdXNSaW5nUGF0aDo6fkRyYXdGb2N1c1JpbmdQYXRoKCkgPSBkZWZhdWx0
OwotCiB2b2lkIERyYXdGb2N1c1JpbmdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5kcmF3Rm9jdXNSaW5nKG1fcGF0aCwgbV93aWR0aCwg
bV9vZmZzZXQsIG1fY29sb3IpOwpAQCAtMTExMCw3ICs2MzksNiBAQCBPcHRpb25hbDxGbG9hdFJl
Y3Q+IERyYXdGb2N1c1JpbmdQYXRoOjpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQm
KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRHJhd0ZvY3VzUmluZ1BhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKIC8vICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIs
IGl0ZW0ucGF0aCgpKTsgLy8gRklYTUU6IGFkZCBsb2dnaW5nIGZvciBwYXRocy4KICAgICB0cy5k
dW1wUHJvcGVydHkoIndpZHRoIiwgaXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHko
Im9mZnNldCIsIGl0ZW0ub2Zmc2V0KCkpOwpAQCAtMTExOSwxNiArNjQ3LDEzIEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5n
UGF0aCYgaXRlbSkKIH0KIAogRHJhd0ZvY3VzUmluZ1JlY3RzOjpEcmF3Rm9jdXNSaW5nUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RHJhd0Zv
Y3VzUmluZ1JlY3RzKQotICAgICwgbV9yZWN0cyhyZWN0cykKKyAgICA6IG1fcmVjdHMocmVjdHMp
CiAgICAgLCBtX3dpZHRoKHdpZHRoKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9j
b2xvcihjb2xvcikKIHsKIH0KIAotRHJhd0ZvY3VzUmluZ1JlY3RzOjp+RHJhd0ZvY3VzUmluZ1Jl
Y3RzKCkgPSBkZWZhdWx0OwotCiB2b2lkIERyYXdGb2N1c1JpbmdSZWN0czo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZHJhd0ZvY3VzUmluZyht
X3JlY3RzLCBtX3dpZHRoLCBtX29mZnNldCwgbV9jb2xvcik7CkBAIC0xMTQ1LDcgKzY3MCw2IEBA
IE9wdGlvbmFsPEZsb2F0UmVjdD4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zCiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3Rm9jdXNSaW5nUmVjdHMmIGl0ZW0pCiB7Ci0gICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1w
UHJvcGVydHkoInJlY3RzIiwgaXRlbS5yZWN0cygpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIndp
ZHRoIiwgaXRlbS53aWR0aCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoIm9mZnNldCIsIGl0ZW0u
b2Zmc2V0KCkpOwpAQCAtMTE1MywxNCArNjc3LDYgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdGb2N1c1JpbmdSZWN0cyYgaXRlbSkKICAg
ICByZXR1cm4gdHM7CiB9CiAKLUZpbGxSZWN0OjpGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbFJlY3QpCi0gICAgLCBtX3JlY3Qo
cmVjdCkKLXsKLX0KLQotRmlsbFJlY3Q6On5GaWxsUmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBG
aWxsUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNv
bnRleHQuZmlsbFJlY3QobV9yZWN0KTsKQEAgLTExNjgsMjAgKzY4NCwxMCBAQCB2b2lkIEZpbGxS
ZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdCYgaXRlbSkK
IHsKLSAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAg
IHRzLmR1bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9
CiAKLUZpbGxSZWN0V2l0aENvbG9yOjpGaWxsUmVjdFdpdGhDb2xvcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpG
aWxsUmVjdFdpdGhDb2xvcikKLSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9jb2xvcihjb2xv
cikKLXsKLX0KLQotRmlsbFJlY3RXaXRoQ29sb3I6On5GaWxsUmVjdFdpdGhDb2xvcigpID0gZGVm
YXVsdDsKLQogdm9pZCBGaWxsUmVjdFdpdGhDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yKTsK
QEAgLTExODksMjEgKzY5NSwxNyBAQCB2b2lkIEZpbGxSZWN0V2l0aENvbG9yOjphcHBseShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhDb2xvciYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNv
bG9yIiwgaXRlbS5jb2xvcigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKIEZpbGxSZWN0V2l0aEdy
YWRpZW50OjpGaWxsUmVjdFdpdGhHcmFkaWVudChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhH
cmFkaWVudCkKLSAgICAsIG1fcmVjdChyZWN0KQorICAgIDogbV9yZWN0KHJlY3QpCiAgICAgLCBt
X2dyYWRpZW50KGdyYWRpZW50KQogewogfQogCi1GaWxsUmVjdFdpdGhHcmFkaWVudDo6fkZpbGxS
ZWN0V2l0aEdyYWRpZW50KCkgPSBkZWZhdWx0OwotCiB2b2lkIEZpbGxSZWN0V2l0aEdyYWRpZW50
OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5m
aWxsUmVjdChtX3JlY3QsIG1fZ3JhZGllbnQuZ2V0KCkpOwpAQCAtMTIxMSwyMyArNzEzLDExIEBA
IHZvaWQgRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEZpbGxSZWN0V2l0aEdyYWRpZW50JiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgLy8gRklYTUU6IGxvZyBncmFkaWVu
dC4KICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJu
IHRzOwogfQogCi1GaWxsQ29tcG9zaXRlZFJlY3Q6OkZpbGxDb21wb3NpdGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3As
IEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6RmlsbENv
bXBvc2l0ZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBtX2NvbG9yKGNvbG9yKQot
ICAgICwgbV9vcChvcCkKLSAgICAsIG1fYmxlbmRNb2RlKGJsZW5kTW9kZSkKLXsKLX0KLQotRmls
bENvbXBvc2l0ZWRSZWN0Ojp+RmlsbENvbXBvc2l0ZWRSZWN0KCkgPSBkZWZhdWx0OwotCiB2b2lk
IEZpbGxDb21wb3NpdGVkUmVjdDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAogewogICAgIGNvbnRleHQuZmlsbFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX29wLCBtX2JsZW5k
TW9kZSk7CkBAIC0xMjM1LDcgKzcyNSw2IEBAIHZvaWQgRmlsbENvbXBvc2l0ZWRSZWN0OjphcHBs
eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJjb2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJjb21wb3Np
dGUtb3BlcmF0aW9uIiwgaXRlbS5jb21wb3NpdGVPcGVyYXRvcigpKTsKQEAgLTEyNDMsMTYgKzcz
Miw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGaWxsQ29tcG9zaXRlZFJlY3QmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUm91
bmRlZFJlY3Q6OkZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi0gICAgLCBt
X2NvbG9yKGNvbG9yKQotICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQotewotfQotCi1GaWxs
Um91bmRlZFJlY3Q6On5GaWxsUm91bmRlZFJlY3QoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFJv
dW5kZWRSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QobV9yZWN0LCBtX2NvbG9yLCBtX2JsZW5kTW9kZSk7CkBA
IC0xMjYwLDIzICs3MzksMTIgQEAgdm9pZCBGaWxsUm91bmRlZFJlY3Q6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSb3VuZGVkUmVjdCYgaXRlbSkKIHsKLSAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9w
ZXJ0eSgicmVjdCIsIGl0ZW0ucm91bmRlZFJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJj
b2xvciIsIGl0ZW0uY29sb3IoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJibGVuZC1tb2RlIiwg
aXRlbS5ibGVuZE1vZGUoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkK
LSAgICAsIG1fcmVjdChyZWN0KQotICAgICwgbV9yb3VuZGVkSG9sZVJlY3Qocm91bmRlZEhvbGVS
ZWN0KQotICAgICwgbV9jb2xvcihjb2xvcikKLXsKLX0KLQotRmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU6On5GaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpID0gZGVmYXVsdDsKLQogdm9pZCBGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAog
ewogICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9yZWN0LCBtX3JvdW5kZWRI
b2xlUmVjdCwgbV9jb2xvcik7CkBAIC0xMjg0LDcgKzc1Miw2IEBAIHZvaWQgRmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERy
YXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJyZWN0IiwgaXRlbS5yZWN0
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicm91bmRlZC1ob2xlLXJlY3QiLCBpdGVtLnJvdW5k
ZWRIb2xlUmVjdCgpKTsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgaXRlbS5jb2xvcigp
KTsKQEAgLTEyOTMsMTQgKzc2MCw2IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlCiAKICNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotRmlsbElubGluZVBhdGg6OkZpbGxJbmxpbmVQYXRo
KGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1U
eXBlOjpGaWxsSW5saW5lUGF0aCkKLSAgICAsIG1fcGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0K
LUZpbGxJbmxpbmVQYXRoOjp+RmlsbElubGluZVBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmls
bElubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAg
ICBjb250ZXh0LmZpbGxQYXRoKHBhdGgoKSk7CkBAIC0xMzA4LDIxICs3NjcsMTIgQEAgdm9pZCBG
aWxsSW5saW5lUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbElu
bGluZVBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0
ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CiAg
ICAgcmV0dXJuIHRzOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCiAK
LUZpbGxQYXRoOjpGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0KLUZpbGxQYXRo
Ojp+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7
CkBAIC0xMzMwLDE5ICs3ODAsMTAgQEAgdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRmlsbFBhdGgmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nh
c3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgi
LCBpdGVtLnBhdGgoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1GaWxsRWxsaXBzZTo6RmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6
OkZpbGxFbGxpcHNlKQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUZpbGxFbGxpcHNlOjp+
RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgRmlsbEVsbGlwc2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxFbGxpcHNlKG1f
cmVjdCk7CkBAIC0xMzUwLDE0ICs3OTEsMTIgQEAgdm9pZCBGaWxsRWxsaXBzZTo6YXBwbHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbEVsbGlwc2UmIGl0ZW0pCiB7Ci0gICAgdHMg
PDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJv
cGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCiBQdXRJbWFn
ZURhdGE6OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQot
ICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3JjUmVj
dChzcmNSZWN0KQorICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChk
ZXN0UG9pbnQpCiAgICAgLCBtX2ltYWdlRGF0YShpbWFnZURhdGEuZGVlcENsb25lKCkpIC8vIFRo
aXMgY29weSBpcyBhY3R1YWxseSByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgc2VtYW50aWNzIG9m
IHB1dEltYWdlRGF0YSgpLgogICAgICwgbV9pbnB1dEZvcm1hdChpbnB1dEZvcm1hdCkKQEAgLTEz
NjYsOCArODA1LDcgQEAgUHV0SW1hZ2VEYXRhOjpQdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJgogfQogCiBQdXRJbWFnZURhdGE6
OlB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1h
Z2VEYXRhPiYmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQotICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlB1dEltYWdlRGF0YSkKLSAgICAsIG1fc3JjUmVjdChzcmNS
ZWN0KQorICAgIDogbV9zcmNSZWN0KHNyY1JlY3QpCiAgICAgLCBtX2Rlc3RQb2ludChkZXN0UG9p
bnQpCiAgICAgLCBtX2ltYWdlRGF0YShXVEZNb3ZlKGltYWdlRGF0YSkpCiAgICAgLCBtX2lucHV0
Rm9ybWF0KGlucHV0Rm9ybWF0KQpAQCAtMTM3NSw5ICs4MTMsNyBAQCBQdXRJbWFnZURhdGE6OlB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBSZWY8SW1hZ2VE
YXRhPiYmCiB7CiB9CiAKLVB1dEltYWdlRGF0YTo6flB1dEltYWdlRGF0YSgpID0gZGVmYXVsdDsK
LQotdm9pZCBQdXRJbWFnZURhdGE6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CitOT19S
RVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIFB1dEltYWdlRGF0YTo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgZGVsZWdhdGUu
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzg1LDcgKzgyMSw2IEBAIHZvaWQgUHV0
SW1hZ2VEYXRhOjphcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVt
KQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJpbnB1dEZvcm1hdCIsIGl0ZW0uaW5wdXRGb3JtYXQoKSk7CiAg
ICAgdHMuZHVtcFByb3BlcnR5KCJpbWFnZURhdGFTaXplIiwgaXRlbS5pbWFnZURhdGEoKS5zaXpl
KCkpOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgic3JjUmVjdCIsIGl0ZW0uc3JjUmVjdCgpKTsKQEAg
LTEzOTQsMzMgKzgyOSwxMyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUHV0SW1hZ2VEYXRhJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAot
UmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbikp
OwotfQotCi1SZWY8UGFpbnRGcmFtZUZvck1lZGlhPiBQYWludEZyYW1lRm9yTWVkaWE6OmNyZWF0
ZShNZWRpYVBsYXllcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYWludEZyYW1lRm9yTWVkaWEo
aWRlbnRpZmllciwgZGVzdGluYXRpb24pKTsKLX0KLQogUGFpbnRGcmFtZUZvck1lZGlhOjpQYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWEp
Ci0gICAgLCBtX2lkZW50aWZpZXIocGxheWVyLmlkZW50aWZpZXIoKSkKLSAgICAsIG1fZGVzdGlu
YXRpb24oZGVzdGluYXRpb24pCi17Ci19Ci0KLVBhaW50RnJhbWVGb3JNZWRpYTo6UGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlBhaW50RnJhbWVG
b3JNZWRpYSkKLSAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIDogbV9pZGVudGlm
aWVyKHBsYXllci5pZGVudGlmaWVyKCkpCiAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQogewogfQogCi1QYWludEZyYW1lRm9yTWVkaWE6On5QYWludEZyYW1lRm9yTWVkaWEoKSA9IGRl
ZmF1bHQ7Ci0KLXZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdAorTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9pZCBQYWludEZyYW1lRm9yTWVkaWE6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGhhbmRs
ZWQgYnkgdGhlIGRlbGVnYXRlLgogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQyOCwy
MCArODQzLDEwIEBAIHZvaWQgUGFpbnRGcmFtZUZvck1lZGlhOjphcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgUGFpbnRGcmFtZUZvck1lZGlhJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19j
YXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJkZXN0
aW5hdGlvbiIsIGl0ZW0uZGVzdGluYXRpb24oKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1TdHJv
a2VSZWN0OjpTdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVJlY3QpCi0gICAgLCBtX3JlY3Qo
cmVjdCkKLSAgICAsIG1fbGluZVdpZHRoKGxpbmVXaWR0aCkKLXsKLX0KLQotU3Ryb2tlUmVjdDo6
flN0cm9rZVJlY3QoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUmVj
dDo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QKIHsKICAgICBGbG9h
dFJlY3QgYm91bmRzID0gbV9yZWN0OwpAQCAtMTQ1Niw3ICs4NjEsNiBAQCB2b2lkIFN0cm9rZVJl
Y3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIAogc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZVJlY3QmIGl0ZW0p
CiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAg
ICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBpdGVtLnJlY3QoKSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJsaW5lLXdpZHRoIiwgaXRlbS5saW5lV2lkdGgoKSk7CiAgICAgcmV0dXJuIHRzOwpAQCAt
MTQ3OSwxOSArODgzLDEwIEBAIHZvaWQgU3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKIHsKLSAgICB0cyA8PCBzdGF0aWNfY2Fz
dDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1bXBQcm9wZXJ0eSgicGF0aCIs
IGl0ZW0ucGF0aCgpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVN0cm9rZUVsbGlwc2U6OlN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5
cGU6OlN0cm9rZUVsbGlwc2UpCi0gICAgLCBtX3JlY3QocmVjdCkKLXsKLX0KLQotU3Ryb2tlRWxs
aXBzZTo6flN0cm9rZUVsbGlwc2UoKSA9IGRlZmF1bHQ7Ci0KIE9wdGlvbmFsPEZsb2F0UmVjdD4g
U3Ryb2tlRWxsaXBzZTo6bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewogICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRleHQuc3Ryb2tlVGhp
Y2tuZXNzKCk7CkBAIC0xNTA4LDcgKzkwMyw2IEBAIHZvaWQgU3Ryb2tlRWxsaXBzZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBzZSYgaXRlbSkKIHsKLSAg
ICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBEcmF3aW5nSXRlbSY+KGl0ZW0pOwogICAgIHRzLmR1
bXBQcm9wZXJ0eSgicmVjdCIsIGl0ZW0ucmVjdCgpKTsKICAgICByZXR1cm4gdHM7CiB9CkBAIC0x
NTMyLDM3ICs5MjYsMTIgQEAgdm9pZCBTdHJva2VJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQogewotICAgIHRzIDw8
IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3Bl
cnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOwogICAgIHJldHVybiB0czsKIH0KIAotU3Ryb2tlSW5s
aW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEp
Ci0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkKLSAgICAsIG1f
cGF0aERhdGEocGF0aERhdGEpCi17Ci19Ci0KLVN0cm9rZUlubGluZVBhdGg6On5TdHJva2VJbmxp
bmVQYXRoKCkgPSBkZWZhdWx0OwotCiAjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CiAKLVN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLSAgICA6IERyYXdp
bmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQotICAgICwgbV9wYXRoKHBhdGgpCi17Ci19Ci0K
LVN0cm9rZVBhdGg6On5TdHJva2VQYXRoKCkgPSBkZWZhdWx0OwotCi1DbGVhclJlY3Q6OkNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi0gICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6
Q2xlYXJSZWN0KQotICAgICwgbV9yZWN0KHJlY3QpCi17Ci19Ci0KLUNsZWFyUmVjdDo6fkNsZWFy
UmVjdCgpID0gZGVmYXVsdDsKLQogdm9pZCBDbGVhclJlY3Q6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmNsZWFyUmVjdChtX3JlY3QpOwpAQCAt
MTU3MCwxOSArOTM5LDEwIEBAIHZvaWQgQ2xlYXJSZWN0OjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDbGVhclJlY3QmIGl0ZW0pCiB7Ci0gICAgdHMgPDwgc3RhdGljX2Nhc3Q8
Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKICAgICB0cy5kdW1wUHJvcGVydHkoInJlY3QiLCBp
dGVtLnJlY3QoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1CZWdpblRyYW5zcGFyZW5jeUxheWVy
OjpCZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi0gICAgOiBEcmF3aW5nSXRl
bShJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcikKLSAgICAsIG1fb3BhY2l0eShvcGFj
aXR5KQotewotfQotCi1CZWdpblRyYW5zcGFyZW5jeUxheWVyOjp+QmVnaW5UcmFuc3BhcmVuY3lM
YXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgY29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKG1fb3BhY2l0eSk7CkBAIC0xNTkwLDU3ICs5NTAsMjggQEAgdm9pZCBCZWdp
blRyYW5zcGFyZW5jeUxheWVyOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBC
ZWdpblRyYW5zcGFyZW5jeUxheWVyJiBpdGVtKQogewotICAgIHRzIDw8IHN0YXRpY19jYXN0PGNv
bnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJvcGFjaXR5Iiwg
aXRlbS5vcGFjaXR5KCkpOwogICAgIHJldHVybiB0czsKIH0KIAotRW5kVHJhbnNwYXJlbmN5TGF5
ZXI6OkVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLSAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpF
bmRUcmFuc3BhcmVuY3lMYXllcikKLXsKLX0KLQotRW5kVHJhbnNwYXJlbmN5TGF5ZXI6On5FbmRU
cmFuc3BhcmVuY3lMYXllcigpID0gZGVmYXVsdDsKLQogdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXll
cjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIH0KIAogI2lmIFVTRShDRykKLUFwcGx5U3Ryb2tlUGF0
dGVybjo6QXBwbHlTdHJva2VQYXR0ZXJuKCkKLSAgICA6IEl0ZW0oSXRlbVR5cGU6OkFwcGx5U3Ry
b2tlUGF0dGVybikKLXsKLX0KLQotQXBwbHlTdHJva2VQYXR0ZXJuOjp+QXBwbHlTdHJva2VQYXR0
ZXJuKCkgPSBkZWZhdWx0OwogCiB2b2lkIEFwcGx5U3Ryb2tlUGF0dGVybjo6YXBwbHkoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlTdHJva2VQYXR0
ZXJuKCk7CiB9CiAKLUFwcGx5RmlsbFBhdHRlcm46OkFwcGx5RmlsbFBhdHRlcm4oKQotICAgIDog
SXRlbShJdGVtVHlwZTo6QXBwbHlGaWxsUGF0dGVybikKLXsKLX0KLQotQXBwbHlGaWxsUGF0dGVy
bjo6fkFwcGx5RmlsbFBhdHRlcm4oKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlGaWxsUGF0dGVy
bjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
YXBwbHlGaWxsUGF0dGVybigpOwogfQogI2VuZGlmCiAKLUFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCi0gICAgOiBJdGVtKEl0
ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFjdG9yKQotICAgICwgbV9zY2FsZUZhY3RvcihzY2Fs
ZUZhY3RvcikKLXsKLX0KLQotQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6fkFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoKSA9IGRlZmF1bHQ7Ci0KIHZvaWQgQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihtX3NjYWxlRmFjdG9yKTsKQEAgLTE2NTIsNyArOTgzLDcgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEFwcGx5RGV2
aWNlU2NhbGVGYWN0b3ImIGl0ZW0KICAgICByZXR1cm4gdHM7CiB9CiAKLXN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtVHlwZSYgdHlwZSkKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBJdGVtVHlwZSB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlNhdmU6IHRzIDw8
ICJzYXZlIjsgYnJlYWs7CkBAIC0xNzIzLDE3MiArMTA1NCwxNzAgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQogICAg
IHJldHVybiB0czsKIH0KIAotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgSXRlbSYgaXRlbSkKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IEl0ZW1IYW5kbGUgaXRlbSkKIHsKLSAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwKHRz
KTsKICAgICB0cyA8PCBpdGVtLnR5cGUoKTsKIAotICAgIC8vIEZJWE1FOiBNYWtlIGEgbWFjcm8g
d2hpY2ggdGFrZXMgYSBtYWNybyBmb3IgYWxsIHRoZXNlIGVudW1lcmF0aW9uIHN3aXRjaGVzCiAg
ICAgc3dpdGNoIChpdGVtLnR5cGUoKSkgewogICAgIGNhc2UgSXRlbVR5cGU6OlRyYW5zbGF0ZToK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8VHJhbnNsYXRlPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8VHJhbnNsYXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpSb3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFJvdGF0ZT4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PFJvdGF0ZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6U2NhbGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNjYWxlPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2NhbGU+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldENUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0Q1RNPihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0Q1RNPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q29uY2F0
ZW5hdGVDVE0+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDb25jYXRlbmF0ZUNUTT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRp
ZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0p
OworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAg
ICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMg
PDwgaXRlbS5nZXQ8U2V0SW5saW5lRmlsbENvbG9yPigpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxT
ZXRJbmxpbmVTdHJva2VDb2xvcj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdHJva2VU
aGlja25lc3M+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTZXRTdHJva2VUaGlja25l
c3M+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgotICAg
ICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0u
Z2V0PFNldFN0YXRlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRM
aW5lQ2FwOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPihpdGVtKTsKKyAgICAg
ICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZUNhcD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0TGluZURhc2g6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldExpbmVE
YXNoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TGluZURhc2g+KCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxTZXRMaW5lSm9pbj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFNl
dExpbmVKb2luPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRNaXRl
ckxpbWl0OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRNaXRlckxpbWl0PihpdGVtKTsKKyAg
ICAgICAgdHMgPDwgaXRlbS5nZXQ8U2V0TWl0ZXJMaW1pdD4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6Q2xpcDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcD4oaXRl
bSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PENsaXA+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkNsaXBPdXQ6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBPdXQ+
KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxDbGlwT3V0PigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxDbGlwT3V0VG9QYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcE91
dFRvUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xpcFBhdGg6
Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PENsaXBQYXRoPihpdGVtKTsKKyAgICAgICAgdHMgPDwg
aXRlbS5nZXQ8Q2xpcFBhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OkNsaXBUb0RyYXdpbmdDb21tYW5kczoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8Q2xpcFRvRHJhd2lu
Z0NvbW1hbmRzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5
cGhzOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3R2x5cGhzPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RHJhd0dseXBocz4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RHJhd0ltYWdlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2U+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2U+KCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxEcmF3VGlsZWRJbWFnZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdU
aWxlZEltYWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1RpbGVkU2NhbGVkSW1h
Z2U+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4o
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgot
ICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KGl0ZW0pOworICAgICAgICB0
cyA8PCBpdGVtLmdldDxEcmF3SW1hZ2VCdWZmZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdOYXRpdmVJbWFnZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d05hdGl2ZUltYWdlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd05hdGl2ZUlt
YWdlPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoK
LSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJhd1BhdHRlcm4+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxEcmF3UGF0dGVybj4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVt
VHlwZTo6RHJhd1JlY3Q6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdSZWN0PihpdGVtKTsK
KyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJhd1JlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdMaW5lOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3TGlu
ZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdMaW5lPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICB0cyA8
PCBkb3duY2FzdDxEcmF3TGluZXNGb3JUZXh0PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5n
ZXQ8RHJhd0xpbmVzRm9yVGV4dD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcj4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRl
bVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxEcmF3RWxsaXBzZT4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PERyYXdFbGxpcHNlPigpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd1BhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxEcmF3UGF0aD4oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPihpdGVtKTsKKyAgICAgICAg
dHMgPDwgaXRlbS5nZXQ8RHJhd0ZvY3VzUmluZ1BhdGg+KCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RHJhd0ZvY3VzUmluZ1JlY3RzPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RHJh
d0ZvY3VzUmluZ1JlY3RzPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUmVjdDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxGaWxsUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxS
ZWN0V2l0aENvbG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbFJlY3RXaXRo
Q29sb3I+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aEdyYWRpZW50OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhHcmFkaWVudD4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aEdyYWRpZW50PigpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Q6Ci0g
ICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbSk7CisgICAgICAg
IHRzIDw8IGl0ZW0uZ2V0PEZpbGxDb21wb3NpdGVkUmVjdD4oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgotICAgICAgICB0cyA8PCBkb3duY2Fz
dDxGaWxsUm91bmRlZFJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsUm91
bmRlZFJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlPigpOwogICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNh
c3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxGaWxsSW5s
aW5lUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUGF0aDoKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KGl0ZW0pOworICAgICAg
ICB0cyA8PCBpdGVtLmdldDxGaWxsUGF0aD4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxFbGxpcHNl
PihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8RmlsbEVsbGlwc2U+KCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0YToKLSAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8UHV0SW1hZ2VEYXRhPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8UHV0
SW1hZ2VEYXRhPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4o
aXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFBhaW50RnJhbWVGb3JNZWRpYT4oKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKLSAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oaXRlbSk7CisgICAgICAgIHRzIDw8IGl0ZW0uZ2V0PFN0
cm9rZVJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRv
d25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxT
dHJva2VJbmxpbmVQYXRoPigpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgSXRl
bVR5cGU6OlN0cm9rZVBhdGg6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFN0cm9rZVBhdGg+KGl0
ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxTdHJva2VQYXRoPigpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOgotICAgICAgICB0cyA8PCBkb3du
Y2FzdDxTdHJva2VFbGxpcHNlPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8U3Ryb2tl
RWxsaXBzZT4oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KGl0ZW0pOworICAgICAgICB0cyA8
PCBpdGVtLmdldDxDbGVhclJlY3Q+KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI+KGl0ZW0pOworICAgICAgICB0cyA8PCBpdGVtLmdldDxCZWdpblRy
YW5zcGFyZW5jeUxheWVyPigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpB
cHBseURldmljZVNjYWxlRmFjdG9yOgotICAgICAgICB0cyA8PCBkb3duY2FzdDxBcHBseURldmlj
ZVNjYWxlRmFjdG9yPihpdGVtKTsKKyAgICAgICAgdHMgPDwgaXRlbS5nZXQ8QXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcj4oKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAvLyBJdGVtcyB3aXRoIG5vIGFk
ZGl0aW9uYWwgZGF0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDc5NzU5
OGU3MjFkNTYyMzFkZmYwNjQ5YWE1NzMxNzQzYTJjZWIwMzUuLjJhNTE4YmIyZTAwNGIxM2RhM2Qx
OWU2ZmE2ZDg1ZTkxZjUzOTk2ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApA
QCAtNTEsMzIwICs1MSwxNjMgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1l
c3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nSXRlbSA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIFNhdmUgewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IERyYXdp
bmdJdGVtKEl0ZW1UeXBlKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBl
ID0gSXRlbVR5cGU6OlNhdmU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdpbmdJdGVtKCk7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RXh0ZW50KGNv
bnN0IEZsb2F0UmVjdCYgcikgeyBtX2V4dGVudCA9IHI7IH0KLSAgICBjb25zdCBGbG9hdFJlY3Qm
IGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50LnZhbHVlKCk7IH0KLQotICAgIGJvb2wg
ZXh0ZW50S25vd24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2V4dGVudCk7
IH0KLQotICAgIC8vIFJldHVybiBib3VuZHMgb2YgdGhpcyBkcmF3aW5nIG9wZXJhdGlvbiBpbiBs
b2NhbCBjb29yZGluYXRlcy4KLSAgICAvLyBEb2VzIG5vdCBpbmNsdWRlIGVmZmV0cyBvZiB0cmFu
c2Zvcm0sIHNoYWRvdyBldGMgaW4gdGhlIHN0YXRlLgotICAgIHZpcnR1YWwgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KLQotICAgIC8vIFNvbWUgb3BlcmF0aW9ucyAoZS5nLiBwdXRJbWFn
ZURhdGEpIG9wZXJhdGUgaW4gZ2xvYmFsIGJvdW5kcy4gRm9yIHRoZXNlIG9wZXJhdGlvbnMsIG92
ZXJyaWRlIHRoaXMgbWV0aG9kLgotICAgIC8vIElmIGFwcGxpY2FibGUsIHRoZSByZXR1cm4gdmFs
dWUgbmVlZHMgdG8gaW5jbHVkZSB0aGUgZWZmZWN0cyBvZiBzaGFkb3dzLCBjbGlwcGluZywgZXRj
LgotICAgIHZpcnR1YWwgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzRHJhd2luZ0l0
ZW0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IG1fZXh0ZW50OyAvLyBJbiBiYXNlIGNvb3JkaW5hdGVzLCB0YWtpbmcgc2hhZG93cyBh
bmQgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIFdURjo6bnVsbG9wdDsgfQogfTsKIAotY2xhc3MgU2F2ZSA6IHB1YmxpYyBJdGVtIHsKK2Ns
YXNzIFJlc3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2F2ZT4gY3JlYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNhdmUpOwotICAgIH0KKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlJlc3RvcmU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgflNhdmUoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2F2
ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2F2
ZSgpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTYXZlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0
Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2F2ZT4+IFNh
dmU6OmRlY29kZShEZWNvZGVyJikKLXsKLSAgICByZXR1cm4gU2F2ZTo6Y3JlYXRlKCk7Ci19Ci0K
LWNsYXNzIFJlc3RvcmUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBUcmFuc2xhdGUgewogcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8UmVzdG9yZT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFJlc3RvcmUpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgflJlc3RvcmUoKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8UmVmPFJlc3RvcmU+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIFJlc3RvcmUoKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBSZXN0b3JlOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UmVzdG9yZT4+IFJlc3RvcmU6OmRlY29kZShEZWNvZGVy
JikKLXsKLSAgICByZXR1cm4gUmVzdG9yZTo6Y3JlYXRlKCk7Ci19CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpUcmFuc2xhdGU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotY2xhc3MgVHJhbnNsYXRlIDogcHVibGlj
IEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VHJhbnNsYXRlPiBjcmVhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKKyAgICBUcmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKKyAgICAgICAgOiBt
X3goeCkKKyAgICAgICAgLCBtX3koeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFRyYW5zbGF0ZSh4LCB5KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+VHJhbnNsYXRlKCk7Ci0KICAgICBmbG9hdCB4KCkgY29uc3QgeyByZXR1cm4gbV94OyB9CiAg
ICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8VHJhbnNsYXRlPj4gZGVjb2RlKERlY29kZXIm
KTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBUcmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgZmxvYXQgbV94OwotICAg
IGZsb2F0IG1feTsKK3ByaXZhdGU6CisgICAgZmxvYXQgbV94IHsgMCB9OworICAgIGZsb2F0IG1f
eSB7IDAgfTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFRyYW5zbGF0ZTo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3g7Ci0g
ICAgZW5jb2RlciA8PCBtX3k7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8VHJhbnNsYXRlPj4gVHJhbnNsYXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBPcHRpb25hbDxmbG9hdD4geDsKLSAgICBkZWNvZGVyID4+IHg7Ci0gICAgaWYgKCF4KQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7Ci0g
ICAgZGVjb2RlciA+PiB5OwotICAgIGlmICgheSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLQotICAgIHJldHVybiBUcmFuc2xhdGU6OmNyZWF0ZSgqeCwgKnkpOwotfQotCi1jbGFzcyBS
b3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBSb3RhdGUgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Um90YXRlPiBjcmVhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpSb3RhdGU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFJvdGF0ZShmbG9hdCBhbmdsZSkK
KyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUm90YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+Um90YXRlKCk7Ci0KICAgICBmbG9hdCBhbmdsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5nbGU7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPFJvdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUm90YXRlKGZsb2F0IGFuZ2xlKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9
CiAKLSAgICBmbG9hdCBtX2FuZ2xlOyAvLyBJbiByYWRpYW5zLgorcHJpdmF0ZToKKyAgICBmbG9h
dCBtX2FuZ2xlIHsgMCB9OyAvLyBJbiByYWRpYW5zLgogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgUm90YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAg
ICBlbmNvZGVyIDw8IG1fYW5nbGU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRp
b25hbDxSZWY8Um90YXRlPj4gUm90YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxmbG9hdD4gYW5nbGU7Ci0gICAgZGVjb2RlciA+PiBhbmdsZTsKLSAgICBpZiAo
IWFuZ2xlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFJvdGF0
ZTo6Y3JlYXRlKCphbmdsZSk7Ci19Ci0KLWNsYXNzIFNjYWxlIDogcHVibGljIEl0ZW0geworY2xh
c3MgU2NhbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2NhbGU+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTY2FsZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OworCisgICAgU2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IG1fc2l6ZShz
aXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2NhbGUoc2l6ZSkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNjYWxlKCk7Ci0KICAgICBjb25z
dCBGbG9hdFNpemUmIGFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCi0gICAgdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2NhbGU+PiBkZWNvZGUo
RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxC
b3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIAorcHJpdmF0ZToKICAgICBG
bG9hdFNpemUgbV9zaXplOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2Nh
bGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9z
aXplOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNjYWxlPj4g
U2NhbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0U2l6
ZT4gc2NhbGU7Ci0gICAgZGVjb2RlciA+PiBzY2FsZTsKLSAgICBpZiAoIXNjYWxlKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNjYWxlOjpjcmVhdGUoKnNjYWxl
KTsKLX0KLQotY2xhc3MgU2V0Q1RNIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0Q1RNIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldENUTT4gY3JlYXRlKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgbWF0cml4KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVt
VHlwZTo6U2V0Q1RNOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisK
KyAgICBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgIDog
bV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0Q1RNKG1hdHJpeCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
flNldENUTSgpOwotCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0Q1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6
Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIEFmZmluZVRyYW5zZm9y
bSBtX3RyYW5zZm9ybTsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldENU
TTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3Ry
YW5zZm9ybTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRD
VE0+PiBTZXRDVE06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEFm
ZmluZVRyYW5zZm9ybT4gdHJhbnNmb3JtOwotICAgIGRlY29kZXIgPj4gdHJhbnNmb3JtOwotICAg
IGlmICghdHJhbnNmb3JtKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0
dXJuIFNldENUTTo6Y3JlYXRlKCp0cmFuc2Zvcm0pOwotfQotCi1jbGFzcyBDb25jYXRlbmF0ZUNU
TSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIENvbmNhdGVuYXRlQ1RNIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENvbmNhdGVuYXRlQ1RNPiBjcmVhdGUoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBt
YXRyaXgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpDb25jYXRlbmF0ZUNUTTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVt
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNl
OworCisgICAgQ29uY2F0ZW5hdGVDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
CisgICAgICAgIDogbV90cmFuc2Zvcm0odHJhbnNmb3JtKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ29uY2F0ZW5hdGVDVE0obWF0cml4KSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+Q29uY2F0ZW5hdGVDVE0oKTsKLQogICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENvbmNhdGVu
YXRlQ1RNPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9S
VCBDb25jYXRlbmF0ZUNUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3Jt
OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29uY2F0ZW5hdGVDVE06OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV90cmFuc2Zv
cm07Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q29uY2F0ZW5h
dGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8QWZmaW5lVHJhbnNmb3JtPiB0cmFuc2Zvcm07Ci0gICAgZGVjb2RlciA+PiB0cmFu
c2Zvcm07Ci0gICAgaWYgKCF0cmFuc2Zvcm0pCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKLX0KLQot
Y2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5s
aW5lRmlsbEdyYWRpZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBl
IGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhf
dCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxH
cmFkaWVudD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7Ci0gICAgc3RhdGljIGJvb2wgaXNJbmxp
bmUoY29uc3QgR3JhZGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVu
dCgpOwotCi0gICAgUmVmPEdyYWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwotCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbEdyYWRp
ZW50Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUmVmPFNldElu
bGluZUZpbGxHcmFkaWVudD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRd
LCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAotICAgICAgICBjb25z
dCBHcmFkaWVudDo6RGF0YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWlu
dDhfdCBjb2xvclN0b3BDb3VudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNldElubGluZUZpbGxHcmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbiwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwotICAgIH0K
LQorICAgIFNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3Rv
cENvdW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3Qg
R3JhZGllbnQ6OkRhdGEmLAogICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50
U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JT
dG9wQ291bnQpOwogCi0gICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50Jik7
CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGllbnQmKTsKKyAgICBSZWY8R3Jh
ZGllbnQ+IGdyYWRpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisK
K3ByaXZhdGU6CiAgICAgZmxvYXQgbV9vZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsKICAgICBT
UkdCQTx1aW50OF90PiBtX2NvbG9yc1ttYXhDb2xvclN0b3BDb3VudF07CiAgICAgR3JhZGllbnQ6
OkRhdGEgbV9kYXRhOwpAQCAtMzczLDE5OCArMjE2LDc5IEBAIHByaXZhdGU6CiAgICAgdWludDhf
dCBtX2NvbG9yU3RvcENvdW50IHsgMCB9OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
LXZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fY29sb3JTdG9wQ291bnQ7Ci0gICAgZm9yICh1aW50OF90
IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwg
bV9vZmZzZXRzW2ldOwotICAgICAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9j
b2xvcnNbaV0gfS52YWx1ZTsKLSAgICB9Ci0gICAgZW5jb2RlciA8PCBtX2RhdGE7Ci0gICAgZW5j
b2RlciA8PCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbjsKLSAgICBlbmNvZGVyIDw8IG1f
c3ByZWFkTWV0aG9kOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8dWludDhfdD4gY29sb3JTdG9wQ291bnQ7
Ci0gICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsKLSAgICBpZiAoIWNvbG9yU3RvcENvdW50
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCpjb2xvclN0b3BDb3Vu
dCA+IG1heENvbG9yU3RvcENvdW50KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07Ci0gICAgU1JHQkE8dWludDhfdD4g
Y29sb3JzW21heENvbG9yU3RvcENvdW50XTsKLSAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAq
Y29sb3JTdG9wQ291bnQ7ICsraSkgewotICAgICAgICBPcHRpb25hbDxmbG9hdD4gb2Zmc2V0Owot
ICAgICAgICBkZWNvZGVyID4+IG9mZnNldDsKLSAgICAgICAgaWYgKCFvZmZzZXQpCi0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBj
b2xvcjsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgY29sb3JzW2ldID0gYXNT
UkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9KTsKLSAgICAgICAgb2Zmc2V0c1tpXSA9
ICpvZmZzZXQ7Ci0gICAgfQotCi0gICAgT3B0aW9uYWw8R3JhZGllbnQ6OkRhdGE+IGRhdGE7Ci0g
ICAgZGVjb2RlciA+PiBkYXRhOwotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEFmZmluZVRyYW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uOwotICAgIGRlY29kZXIgPj4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9u
OwotICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8R3JhZGllbnRTcHJlYWRNZXRob2Q+IHNwcmVh
ZE1ldGhvZDsKLSAgICBkZWNvZGVyID4+IHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIXNwcmVhZE1l
dGhvZCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiB7IFNldElu
bGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEsICpncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BDb3VudCkgfTsK
LX0KLQotY2xhc3MgU2V0SW5saW5lRmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0
SW5saW5lRmlsbENvbG9yIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFNldElubGluZUZpbGxDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lRmlsbENvbG9yKCk7Ci0KLSAgICBDb2xvciBjb2xv
cigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQotCi0gICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gZGVj
b2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKICAgICBTZXRJbmxpbmVGaWxsQ29sb3IoU1JHQkE8
dWludDhfdD4gY29sb3JEYXRhKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZp
bGxDb2xvcikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9j
b2xvckRhdGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKKworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KIAorcHJpdmF0ZToKICAgICBTUkdCQTx1aW50OF90PiBtX2NvbG9yRGF0YTsKIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdC
QSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENvbG9yOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7Ci0g
ICAgZGVjb2RlciA+PiB2YWx1ZTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotCi0gICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JH
QkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOwotfQotCi1jbGFzcyBTZXRJbmxpbmVT
dHJva2VDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZVN0cm9rZUNvbG9yIHsK
IHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElubGluZVN0cm9rZUNv
bG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKLQotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJ
dGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZh
bHNlOwogCi1wcml2YXRlOgogICAgIFNldElubGluZVN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+
IGNvbG9yRGF0YSkKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cikKLSAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAgICAgIDogbV9jb2xvckRh
dGEoY29sb3JEYXRhKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7
Ci19OworICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9
CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldElubGluZVN0cm9rZUNvbG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IFBhY2tlZENv
bG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKLX0KKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFNldElubGluZVN0cm9rZUNvbG9yPj4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPHVpbnQzMl90PiB2YWx1ZTsKLSAgICBk
ZWNvZGVyID4+IHZhbHVlOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQog
Ci0gICAgcmV0dXJuIFNldElubGluZVN0cm9rZUNvbG9yOjpjcmVhdGUoYXNTUkdCQShQYWNrZWRD
b2xvcjo6UkdCQSB7ICp2YWx1ZSB9KSk7Ci19Citwcml2YXRlOgorICAgIFNSR0JBPHVpbnQ4X3Q+
IG1fY29sb3JEYXRhOworfTsKIAotY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIDogcHVibGljIEl0
ZW0geworY2xhc3MgU2V0U3Ryb2tlVGhpY2tuZXNzIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVRoaWNrbmVzcz4gY3JlYXRlKGZsb2F0IHRoaWNrbmVz
cyk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VUaGlja25lc3MoKTsK
KyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldFN0
cm9rZVRoaWNrbmVzczsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOwog
Ci0gICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KLQot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0cm9r
ZVRoaWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6CiAgICAgU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3MpCi0gICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAgICAg
ICA6IG1fdGhpY2tuZXNzKHRoaWNrbmVzcykKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdGhpY2tu
ZXNzIHsgMCB9OwotfTsKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3Ro
aWNrbmVzczsgfQogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VUaGlj
a25lc3M6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwg
bV90aGlja25lc3M7Ci19CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsK
IAotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25l
c3M+PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPGZsb2F0PiB0aGlja25lc3M7Ci0gICAgZGVjb2RlciA+PiB0aGlja25lc3M7Ci0g
ICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgcmV0dXJuIFNl
dFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwotfQorcHJpdmF0ZToKKyAgICBm
bG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CiAKLWNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0
ZW0geworY2xhc3MgU2V0U3RhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0U3RhdGU+
IGNyZWF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2V0U3RhdGUoc3RhdGUsIGZsYWdzKSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFJlZjxTZXRTdGF0ZT4gY3JlYXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBz
dGF0ZUNoYW5nZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0YXRl
KHN0YXRlQ2hhbmdlKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRl
bVR5cGUgPSBJdGVtVHlwZTo6U2V0U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gZmFsc2U7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdGF0ZSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFNldFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAgICAgCiAg
ICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZTsgfQogCkBAIC01NzMsMTQgKzI5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0YXRl
Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgU2V0U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
bV9zdGF0ZTsKIH07CiAKQEAgLTY2OSw3ICszOTMsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxTZXRTdGF0ZT4+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3M+IGNo
YW5nZUZsYWdzOwogICAgIGRlY29kZXIgPj4gY2hhbmdlRmxhZ3M7CkBAIC04OTYsNjggKzYyMCw1
NSBAQCBPcHRpb25hbDxSZWY8U2V0U3RhdGU+PiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgPSAqc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgfQogCi0gICAgcmV0dXJuIFNldFN0
YXRlOjpjcmVhdGUoc3RhdGVDaGFuZ2UpOworICAgIHJldHVybiB7IHN0YXRlQ2hhbmdlIH07CiB9
CiAKLWNsYXNzIFNldExpbmVDYXAgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRMaW5lQ2FwIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNldExpbmVDYXA+IGNyZWF0ZShMaW5lQ2FwIGxpbmVD
YXApCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpT
ZXRMaW5lQ2FwOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAg
ICBTZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKKyAgICAgICAgOiBtX2xpbmVDYXAobGluZUNh
cCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVDYXAobGluZUNh
cCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVDYXAoKTsK
LSAgICAKICAgICBMaW5lQ2FwIGxpbmVDYXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVDYXA7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldExp
bmVDYXA+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IFNldExpbmVDYXAoTGluZUNhcCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2
YXRlOgogICAgIExpbmVDYXAgbV9saW5lQ2FwOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KLXZvaWQgU2V0TGluZUNhcDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0g
ICAgZW5jb2RlciA8PCBtX2xpbmVDYXA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1P
cHRpb25hbDxSZWY8U2V0TGluZUNhcD4+IFNldExpbmVDYXA6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIE9wdGlvbmFsPExpbmVDYXA+IGxpbmVDYXA7Ci0gICAgZGVjb2RlciA+PiBs
aW5lQ2FwOwotICAgIGlmICghbGluZUNhcCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgIHJldHVybiBTZXRMaW5lQ2FwOjpjcmVhdGUoKmxpbmVDYXApOwotfQotCi1jbGFzcyBT
ZXRMaW5lRGFzaCA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldExpbmVEYXNoIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFNldExpbmVEYXNoPiBjcmVhdGUoY29uc3QgRGFzaEFycmF5JiBkYXNo
QXJyYXksIGZsb2F0IGRhc2hPZmZzZXQpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpTZXRMaW5lRGFzaDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJh
d2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aEFycmF5LCBmbG9hdCBkYXNoT2Zmc2V0KQorICAgICAgICA6IG1fZGFzaEFycmF5KGRhc2hBcnJh
eSkKKyAgICAgICAgLCBtX2Rhc2hPZmZzZXQoZGFzaE9mZnNldCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNldExpbmVEYXNoKGRhc2hBcnJheSwgZGFzaE9mZnNldCkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldExpbmVEYXNoKCk7Ci0KICAg
ICBjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaEFycmF5
OyB9CiAgICAgZmxvYXQgZGFzaE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGFzaE9mZnNldDsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0
TGluZURhc2g+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNv
bnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFNldExpbmVEYXNoPiBkZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgog
ICAgIERhc2hBcnJheSBtX2Rhc2hBcnJheTsKICAgICBmbG9hdCBtX2Rhc2hPZmZzZXQ7CiB9OwpA
QCAtOTcwLDcgKzY4MSw3IEBAIHZvaWQgU2V0TGluZURhc2g6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFNl
dExpbmVEYXNoPj4gU2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9u
YWw8U2V0TGluZURhc2g+IFNldExpbmVEYXNoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBPcHRpb25hbDxEYXNoQXJyYXk+IGRhc2hBcnJheTsKICAgICBkZWNvZGVyID4+IGRhc2hB
cnJheTsKQEAgLTk4MiwyMTUgKzY5MywxMzggQEAgT3B0aW9uYWw8UmVmPFNldExpbmVEYXNoPj4g
U2V0TGluZURhc2g6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghZGFzaE9mZnNl
dCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTZXRMaW5lRGFz
aDo6Y3JlYXRlKCpkYXNoQXJyYXksICpkYXNoT2Zmc2V0KTsKKyAgICByZXR1cm4ge3sgKmRhc2hB
cnJheSwgKmRhc2hPZmZzZXQgfX07CiB9CiAKLWNsYXNzIFNldExpbmVKb2luIDogcHVibGljIEl0
ZW0geworY2xhc3MgU2V0TGluZUpvaW4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0TGlu
ZUpvaW4+IGNyZWF0ZShMaW5lSm9pbiBsaW5lSm9pbikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0
ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldExpbmVKb2luOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBTZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5l
Sm9pbikKKyAgICAgICAgOiBtX2xpbmVKb2luKGxpbmVKb2luKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2V0TGluZUpvaW4obGluZUpvaW4pKTsKICAgICB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRMaW5lSm9pbigpOwotICAgIAogICAgIExpbmVKb2lu
IGxpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gbV9saW5lSm9pbjsgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0TGluZUpvaW4+PiBkZWNvZGUo
RGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFNldExpbmVKb2luKExp
bmVKb2luKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgTGlu
ZUpvaW4gbV9saW5lSm9pbjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNl
dExpbmVKb2luOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fbGluZUpvaW47Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8U2V0TGluZUpvaW4+PiBTZXRMaW5lSm9pbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8TGluZUpvaW4+IGxpbmVKb2luOwotICAgIGRlY29kZXIgPj4gbGluZUpv
aW47Ci0gICAgaWYgKCFsaW5lSm9pbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQot
ICAgIHJldHVybiBTZXRMaW5lSm9pbjo6Y3JlYXRlKCpsaW5lSm9pbik7Ci19Ci0KLWNsYXNzIFNl
dE1pdGVyTGltaXQgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBTZXRNaXRlckxpbWl0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNldE1pdGVyTGltaXQ+IGNyZWF0ZShmbG9hdCBsaW1pdCkKKyAg
ICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OlNldE1pdGVy
TGltaXQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIFNl
dE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKKyAgICAgICAgOiBtX21pdGVyTGltaXQobWl0
ZXJMaW1pdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldE1pdGVyTGlt
aXQobGltaXQpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRNaXRl
ckxpbWl0KCk7Ci0KICAgICBmbG9hdCBtaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9taXRl
ckxpbWl0OyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFJlZjxTZXRNaXRlckxpbWl0Pj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBX
RUJDT1JFX0VYUE9SVCBTZXRNaXRlckxpbWl0KGZsb2F0KTsKKyAgICB2b2lkIGFwcGx5KEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxs
b3B0OyB9CiAKK3ByaXZhdGU6CiAgICAgZmxvYXQgbV9taXRlckxpbWl0OwogfTsKIAotdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0TWl0ZXJMaW1pdDo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX21pdGVyTGltaXQ7Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U2V0TWl0ZXJMaW1pdD4+IFNldE1pdGVy
TGltaXQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBt
aXRlckxpbWl0OwotICAgIGRlY29kZXIgPj4gbWl0ZXJMaW1pdDsKLSAgICBpZiAoIW1pdGVyTGlt
aXQpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gU2V0TWl0ZXJM
aW1pdDo6Y3JlYXRlKCptaXRlckxpbWl0KTsKLX0KLQotY2xhc3MgQ2xlYXJTaGFkb3cgOiBwdWJs
aWMgSXRlbSB7CitjbGFzcyBDbGVhclNoYWRvdyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxD
bGVhclNoYWRvdz4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IENsZWFyU2hhZG93KTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVh
clNoYWRvdygpOwotCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxSZWY8Q2xlYXJTaGFkb3c+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xlYXJTaGFkb3c7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBDbGVhclNoYWRvdygpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIH07CiAKLXRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIENsZWFyU2hhZG93OjplbmNvZGUoRW5jb2RlciYp
IGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xl
YXJTaGFkb3c+PiBDbGVhclNoYWRvdzo6ZGVjb2RlKERlY29kZXImKQotewotICAgIHJldHVybiBD
bGVhclNoYWRvdzo6Y3JlYXRlKCk7Ci19Ci0KLS8vIEZJWE1FOiB0cmVhdCBhcyBEcmF3aW5nSXRl
bT8KLWNsYXNzIENsaXAgOiBwdWJsaWMgSXRlbSB7CisvLyBGSVhNRTogdHJlYXQgYXMgZHJhd2lu
ZyBpdGVtPworY2xhc3MgQ2xpcCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGlwPiBjcmVh
dGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUg
aXRlbVR5cGUgPSBJdGVtVHlwZTo6Q2xpcDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRl
bSA9IGZhbHNlOworCisgICAgQ2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDog
bV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwKHJl
Y3QpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGlwKCk7CisgICAg
Y29uc3QgRmxvYXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICBG
bG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2
b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4g
c3RhdGljIE9wdGlvbmFsPFJlZjxDbGlwPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAKIHByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgQ2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0Owog
fTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ2xpcDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8Q2xpcD4+IENsaXA6OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVy
ID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
Ci0gICAgcmV0dXJuIENsaXA6OmNyZWF0ZSgqcmVjdCk7Ci19Ci0KLWNsYXNzIENsaXBPdXQgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwT3V0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENs
aXBPdXQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CisKKyAgICBDbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENsaXBPdXQocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkNsaXBPdXQoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXQ+PiBkZWNv
ZGUoRGVjb2RlciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxv
cHQ7IH0KIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBDbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBDbGlwT3V0OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFs
PFJlZjxDbGlwT3V0Pj4gQ2xpcE91dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAgICBpZiAo
IXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcE91
dDo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgQ2xpcE91dFRvUGF0aCA6IHB1YmxpYyBJdGVt
IHsKK2NsYXNzIENsaXBPdXRUb1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcE91
dFRvUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJ
dGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNEcmF3aW5nSXRlbSA9IGZhbHNlOworCisgICAgQ2xpcE91dFRvUGF0aChQYXRoJiYg
cGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsaXBPdXRUb1BhdGgocGF0aCkpOwogICAgIH0KIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgfkNsaXBPdXRUb1BhdGgoKTsKKyAgICBDbGlwT3V0VG9QYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAgIH0K
IAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENsaXBPdXRUb1Bh
dGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxDbGlwT3V0VG9QYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgot
ICAgIFdFQkNPUkVfRVhQT1JUIENsaXBPdXRUb1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxC
b3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVy
biBXVEY6Om51bGxvcHQ7IH0KIAotICAgIGNvbnN0IFBhdGggbV9wYXRoOworcHJpdmF0ZToKKyAg
ICBQYXRoIG1fcGF0aDsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC0xMjAwLDM3
ICs4MzQsNDcgQEAgdm9pZCBDbGlwT3V0VG9QYXRoOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlcikg
Y29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxDbGlwT3V0
VG9QYXRoPj4gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25h
bDxDbGlwT3V0VG9QYXRoPiBDbGlwT3V0VG9QYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKICAgICBp
ZiAoIXBhdGgpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gQ2xp
cE91dFRvUGF0aDo6Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkg
fX07CiB9CiAKLWNsYXNzIENsaXBQYXRoIDogcHVibGljIEl0ZW0geworY2xhc3MgQ2xpcFBhdGgg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0
ZW1UeXBlID0gSXRlbVR5cGU6OkNsaXBQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBp
c0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5n
SXRlbSA9IGZhbHNlOworCisgICAgQ2xpcFBhdGgoUGF0aCYmIHBhdGgsIFdpbmRSdWxlIHdpbmRS
dWxlKQorICAgICAgICA6IG1fcGF0aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2luZFJ1
bGUod2luZFJ1bGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGlwUGF0
aChwYXRoLCB3aW5kUnVsZSkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwUGF0
aCgpOworICAgIENsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQor
ICAgICAgICA6IG1fcGF0aChwYXRoKQorICAgICAgICAsIG1fd2luZFJ1bGUod2luZFJ1bGUpCisg
ICAgeworICAgIH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGg7IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7
IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPENs
aXBQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENsaXBQYXRoKGNvbnN0
IFBhdGgmLCBXaW5kUnVsZSk7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPENsaXBQ
YXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRl
OgorICAgIFBhdGggbV9wYXRoOwogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCkBAIC0x
MjQyLDcgKzg4Niw3IEBAIHZvaWQgQ2xpcFBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPENsaXBQYXRo
Pj4gQ2xpcFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFBhdGg+
IENsaXBQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxQYXRo
PiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTEyNTQsMzAgKzg5OCw1MCBAQCBPcHRp
b25hbDxSZWY8Q2xpcFBhdGg+PiBDbGlwUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgaWYgKCF3aW5kUnVsZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBDbGlwUGF0aDo6Y3JlYXRlKCpwYXRoLCAqd2luZFJ1bGUpOworICAgIHJldHVybiB7eyBX
VEZNb3ZlKCpwYXRoKSwgKndpbmRSdWxlIH19OwogfQogCi1jbGFzcyBDbGlwVG9EcmF3aW5nQ29t
bWFuZHMgOiBwdWJsaWMgSXRlbSB7CitjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHMgewogcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBEaXNwbGF5TGlz
dCYmIGRyYXdpbmdDb21tYW5kcykKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkNsaXBUb0RyYXdpbmdDb21tYW5kczsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSBmYWxzZTsKKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIERpc3BsYXlM
aXN0JiYgZHJhd2luZ0NvbW1hbmRzKQorICAgICAgICA6IG1fZGVzdGluYXRpb24oZGVzdGluYXRp
b24pCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgICAgICwgbV9kcmF3
aW5nQ29tbWFuZHMoV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKQorICAgIHsKKyAgICB9CisKKyAg
ICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzJiBvdGhl
cikKKyAgICAgICAgOiBtX2Rlc3RpbmF0aW9uKG90aGVyLm1fZGVzdGluYXRpb24pCisgICAgICAg
ICwgbV9jb2xvclNwYWNlKG90aGVyLm1fY29sb3JTcGFjZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0aW5hdGlvbiwgY29sb3JT
cGFjZSwgV1RGTW92ZShkcmF3aW5nQ29tbWFuZHMpKSk7CisgICAgICAgIC8vIEZJWE1FOiBDb3B5
IG1fZHJhd2luZ0NvbW1hbmRzLgogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5DbGlwVG9E
cmF3aW5nQ29tbWFuZHMoKTsKKyAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIG9wZXJhdG9yPShj
b25zdCBDbGlwVG9EcmF3aW5nQ29tbWFuZHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9kZXN0
aW5hdGlvbiA9IG90aGVyLm1fZGVzdGluYXRpb247CisgICAgICAgIG1fY29sb3JTcGFjZSA9IG90
aGVyLm1fY29sb3JTcGFjZTsKKyAgICAgICAgLy8gRklYTUU6IENvcHkgbV9kcmF3aW5nQ29tbWFu
ZHMuCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAKICAgICBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIENvbG9y
U3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQogICAgIGNv
bnN0IERpc3BsYXlMaXN0JiBkcmF3aW5nQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2RyYXdp
bmdDb21tYW5kczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBDb2xvclNw
YWNlLCBEaXNwbGF5TGlzdCYmIGRyYXdpbmdDb21tYW5kcyk7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX2Rlc3RpbmF0aW9uOwogICAgIENv
bG9yU3BhY2UgbV9jb2xvclNwYWNlOwogICAgIERpc3BsYXlMaXN0IG1fZHJhd2luZ0NvbW1hbmRz
OwpAQCAtMTI4OCwxMSArOTUyLDExIEBAIHZvaWQgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IG1fZGVzdGluYXRp
b247CiAgICAgZW5jb2RlciA8PCBtX2NvbG9yU3BhY2U7Ci0gICAgZW5jb2RlciA8PCBtX2RyYXdp
bmdDb21tYW5kczsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGEgd2F5IHRvIGVuY29kZSBpbi1t
ZW1vcnkgZGlzcGxheSBsaXN0cy4KIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+PiBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPiBD
bGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gZGVzdGluYXRpb247CiAgICAgZGVjb2RlciA+PiBkZXN0aW5hdGlv
bjsKQEAgLTEzMDQsMjcgKzk2OCwxNiBAQCBPcHRpb25hbDxSZWY8Q2xpcFRvRHJhd2luZ0NvbW1h
bmRzPj4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIGlm
ICghY29sb3JTcGFjZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlv
bmFsPERpc3BsYXlMaXN0PiBkcmF3aW5nQ29tbWFuZHM7Ci0gICAgZGVjb2RlciA+PiBkcmF3aW5n
Q29tbWFuZHM7Ci0gICAgaWYgKCFkcmF3aW5nQ29tbWFuZHMpCi0gICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzOjpjcmVhdGUoKmRl
c3RpbmF0aW9uLCAqY29sb3JTcGFjZSwgV1RGTW92ZSgqZHJhd2luZ0NvbW1hbmRzKSk7CisgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBhIHdheSB0byBkZWNvZGUgaW4tbWVtb3J5IGRpc3BsYXkgbGlz
dHMuCisgICAgRGlzcGxheUxpc3QgZHJhd2luZ0NvbW1hbmRzOworICAgIHJldHVybiB7eyAqZGVz
dGluYXRpb24sICpjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdDb21tYW5kcykgfX07CiB9CiAK
LWNsYXNzIERyYXdHbHlwaHMgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0dseXBo
cyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3R2x5cGhzPiBjcmVhdGUoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCwgY29uc3QgRmxvYXRQb2ludCYgbG9j
YWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMs
IGNvdW50LCBsb2NhbEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIHN0YXRp
YyBSZWY8RHJhd0dseXBocz4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIFZlY3RvcjxHbHlwaEJ1
ZmZlckdseXBoLCAxMjg+JiYgZ2x5cGhzLCBWZWN0b3I8R2x5cGhCdWZmZXJBZHZhbmNlLCAxMjg+
JiYgYWR2YW5jZXMsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0dseXBocyhmb250LCBXVEZNb3ZlKGdseXBocyksIFdURk1vdmUoYWR2YW5jZXMpLCBsb2Nh
bEFuY2hvciwgc21vb3RoaW5nTW9kZSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkRyYXdHbHlwaHMoKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1U
eXBlID0gSXRlbVR5cGU6OkRyYXdHbHlwaHM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbEFuY2hvcjsgfQogCkBAIC0xMzMzLDIxICs5ODYsMjEgQEAgcHVibGlj
OgogICAgIGNvbnN0IFZlY3RvcjxHbHlwaEJ1ZmZlckdseXBoLCAxMjg+JiBnbHlwaHMoKSBjb25z
dCB7IHJldHVybiBtX2dseXBoczsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdHbHlwaHM+IGRlY29kZShE
ZWNvZGVyJik7CiAKLXByaXZhdGU6CiAgICAgRHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIGNv
dW50LCBjb25zdCBGbG9hdFBvaW50JiBsb2NhbEFuY2hvciwgRm9udFNtb290aGluZ01vZGUpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIERyYXdHbHlwaHMoY29uc3QgRm9udCYsIFZlY3RvcjxHbHlwaEJ1
ZmZlckdseXBoLCAxMjg+JiYsIFZlY3RvcjxHbHlwaEJ1ZmZlckFkdmFuY2UsIDEyOD4mJiwgY29u
c3QgRmxvYXRQb2ludCYgbG9jYWxBbmNob3IsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAotICAgIHZv
aWQgY29tcHV0ZUJvdW5kcygpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0Owog
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRl
eHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5k
cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVj
dD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KIAorcHJpdmF0ZToKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoKTsKICAgICBHbHlw
aEJ1ZmZlciBnZW5lcmF0ZUdseXBoQnVmZmVyKCkgY29uc3Q7CiAKLSAgICBSZWY8Rm9udD4gbV9m
b250OworICAgIFJlZlB0cjxGb250PiBtX2ZvbnQ7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyR2x5
cGgsIDEyOD4gbV9nbHlwaHM7CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMTI4PiBt
X2FkdmFuY2VzOwogICAgIEZsb2F0UmVjdCBtX2JvdW5kczsKQEAgLTEzNTgsNyArMTAxMSw3IEBA
IHByaXZhdGU6CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBEcmF3R2x5cGhzOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1fZm9udDsKKyAg
ICBlbmNvZGVyIDw8IG1ha2VSZWYoKm1fZm9udCk7CiAgICAgZW5jb2RlciA8PCBtX2dseXBoczsK
ICAgICBlbmNvZGVyIDw8IG1fYWR2YW5jZXM7CiAgICAgZW5jb2RlciA8PCBtX2xvY2FsQW5jaG9y
OwpAQCAtMTM2Niw3ICsxMDE5LDcgQEAgdm9pZCBEcmF3R2x5cGhzOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxEcmF3R2x5cGhzPj4gRHJhd0dseXBoczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxEcmF3R2x5cGhzPiBEcmF3R2x5cGhzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsK
ICAgICBPcHRpb25hbDxSZWY8Rm9udD4+IGZvbnQ7CiAgICAgZGVjb2RlciA+PiBmb250OwpAQCAt
MTM5NiwzMiArMTA0OSwzNiBAQCBPcHRpb25hbDxSZWY8RHJhd0dseXBocz4+IERyYXdHbHlwaHM6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghc21vb3RoaW5nTW9kZSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3R2x5cGhzOjpjcmVhdGUo
Zm9udC0+Z2V0KCksIFdURk1vdmUoKmdseXBocyksIFdURk1vdmUoKmFkdmFuY2VzKSwgKmxvY2Fs
QW5jaG9yLCAqc21vb3RoaW5nTW9kZSk7CisgICAgcmV0dXJuIHt7IGZvbnQtPmdldCgpLCBXVEZN
b3ZlKCpnbHlwaHMpLCBXVEZNb3ZlKCphZHZhbmNlcyksICpsb2NhbEFuY2hvciwgKnNtb290aGlu
Z01vZGUgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBEcmF3SW1hZ2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ltYWdlPiBjcmVh
dGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlw
ZTo6RHJhd0ltYWdlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisK
KyAgICBEcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGlt
YWdlUGFpbnRpbmdPcHRpb25zKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgICAgICwg
bV9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisg
ICAgICAgICwgbV9pbWFnZVBhaW50aW5nT3B0aW9ucyhpbWFnZVBhaW50aW5nT3B0aW9ucykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZShpbWFnZSwgZGVzdGlu
YXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKICAgICB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2UoKTsKLQogICAgIGNvbnN0IEltYWdlJiBpbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9hdFJlY3Qgc291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJlY3QgZGVzdGluYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3SW1hZ2U+PiBkZWNvZGUoRGVjb2RlciYp
OwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxEcmF3SW1hZ2U+IGRlY29kZShEZWNvZGVyJik7CiAKLSAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGlu
YXRpb247IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsg
fQogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhNRTog
RHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3MuIFRo
aXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9kZXN0aW5h
dGlvbjsKICAgICBGbG9hdFJlY3QgbV9zb3VyY2U7CkBAIC0xNDQxLDcgKzEwOTgsNyBAQCB2b2lk
IERyYXdJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ltYWdlPj4gRHJhd0ltYWdlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdJbWFnZT4gRHJhd0ltYWdlOjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRsZT4gaW1hZ2VI
YW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE0NjMsMTcgKzExMjAsMTQg
QEAgT3B0aW9uYWw8UmVmPERyYXdJbWFnZT4+IERyYXdJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCiAgICAgaWYgKCFpbWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3SW1hZ2U6OmNyZWF0ZSgqaW1hZ2VIYW5kbGUt
PmltYWdlLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICppbWFnZVBhaW50aW5nT3B0aW9ucyk7Cisg
ICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5hdGlvbiwgKnNvdXJjZSwg
KmltYWdlUGFpbnRpbmdPcHRpb25zIH19OwogfQogCi1jbGFzcyBEcmF3VGlsZWRJbWFnZSA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3VGlsZWRJbWFnZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxEcmF3VGlsZWRJbWFnZT4gY3JlYXRlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERyYXdUaWxlZEltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKLSAgICB9Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3VGlsZWRJbWFnZSgpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1RpbGVkSW1hZ2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAogICAgIGNvbnN0IEltYWdl
JiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9hdFBvaW50
IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC0xNDgyLDE2ICsxMTM2LDI1
IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUgdGlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3Rp
bGVTaXplOyB9CiAgICAgRmxvYXRTaXplIHNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX3NwYWNp
bmc7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXIm
KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVm
PERyYXdUaWxlZEltYWdlPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICBEcmF3VGlsZWRJbWFnZShJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMp
CisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uKQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3RpbGVTaXpl
KHRpbGVTaXplKQorICAgICAgICAsIG1fc3BhY2luZyhzcGFjaW5nKQorICAgICAgICAsIG1faW1h
Z2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAgeworICAgIH0KIAot
cHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RG
OjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKLSAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdUaWxlZEltYWdlPiBkZWNvZGUoRGVjb2Rl
ciYpOwogCitwcml2YXRlOgogICAgIG11dGFibGUgUmVmPEltYWdlPiBtX2ltYWdlOyAvLyBGSVhN
RTogRHJhd2luZyBpbWFnZXMgY2FuIGNhdXNlIHRoZWlyIGFuaW1hdGlvbnMgdG8gcHJvZ3Jlc3Mu
IFRoaXMgc2hvdWxkbid0IGhhdmUgdG8gYmUgbXV0YWJsZS4KICAgICBGbG9hdFJlY3QgbV9kZXN0
aW5hdGlvbjsKICAgICBGbG9hdFBvaW50IG1fc291cmNlOwpAQCAtMTUxNCw3ICsxMTc3LDcgQEAg
dm9pZCBEcmF3VGlsZWRJbWFnZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1hZ2U+PiBE
cmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3VGls
ZWRJbWFnZT4gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPEltYWdlSGFuZGxlPiBpbWFnZUhhbmRsZTsKICAgICBkZWNvZGVyID4+IGltYWdl
SGFuZGxlOwpAQCAtMTU0NiwzMiArMTIwOSwzOSBAQCBPcHRpb25hbDxSZWY8RHJhd1RpbGVkSW1h
Z2U+PiBEcmF3VGlsZWRJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFp
bWFnZVBhaW50aW5nT3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBEcmF3VGlsZWRJbWFnZTo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0
aW5hdGlvbiwgKnNvdXJjZSwgKnRpbGVTaXplLCAqc3BhY2luZywgKmltYWdlUGFpbnRpbmdPcHRp
b25zKTsKKyAgICByZXR1cm4ge3sgKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0aW9uLCAq
c291cmNlLCAqdGlsZVNpemUsICpzcGFjaW5nLCAqaW1hZ2VQYWludGluZ09wdGlvbnMgfX07CiB9
CiAKLWNsYXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIERyYXdUaWxlZFNjYWxlZEltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdU
aWxlZFNjYWxlZEltYWdlPiBjcmVhdGUoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3VGlsZWRT
Y2FsZWRJbWFnZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisg
ICAgRHJhd1RpbGVkU2NhbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6OlRpbGVSdWxlIHZSdWxl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCisgICAg
ICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQorICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKKyAgICAgICAgLCBtX3RpbGVTY2FsZUZhY3Rv
cih0aWxlU2NhbGVGYWN0b3IpCisgICAgICAgICwgbV9oUnVsZShoUnVsZSkKKyAgICAgICAgLCBt
X3ZSdWxlKHZSdWxlKQorICAgICAgICAsIG1faW1hZ2VQYWludGluZ09wdGlvbnMoaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3VGls
ZWRTY2FsZWRJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNjYWxlRmFjdG9y
LCBoUnVsZSwgdlJ1bGUsIGltYWdlUGFpbnRpbmdPcHRpb25zKSk7CiAgICAgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RHJhd1RpbGVkU2NhbGVkSW1hZ2UoKTsKLQogICAgIGNvbnN0
IEltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICBGbG9h
dFJlY3Qgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICBGbG9hdFJlY3Qg
ZGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uOyB9CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3VGlsZWRTY2FsZWRJ
bWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPERyYXdUaWxlZFNjYWxlZEltYWdlPiBkZWNvZGUoRGVjb2RlciYpOwogCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdUaWxlZFNjYWxlZEltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLQotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbjsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRz
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX2Rl
c3RpbmF0aW9uOyB9CiAKK3ByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7
IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBw
cm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBiZSBtdXRhYmxlLgogICAgIEZsb2F0UmVj
dCBtX2Rlc3RpbmF0aW9uOwogICAgIEZsb2F0UmVjdCBtX3NvdXJjZTsKQEAgLTE1OTYsNyArMTI2
Niw3IEBAIHZvaWQgRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdU
aWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVkU2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQorT3B0aW9uYWw8RHJhd1RpbGVkU2NhbGVkSW1hZ2U+IERyYXdUaWxlZFNjYWxlZElt
YWdlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxJbWFnZUhhbmRs
ZT4gaW1hZ2VIYW5kbGU7CiAgICAgZGVjb2RlciA+PiBpbWFnZUhhbmRsZTsKQEAgLTE2MzEsMTgg
KzEzMDEsMjMgQEAgT3B0aW9uYWw8UmVmPERyYXdUaWxlZFNjYWxlZEltYWdlPj4gRHJhd1RpbGVk
U2NhbGVkSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGUKICAgICBpZiAoIWltYWdlUGFpbnRp
bmdPcHRpb25zKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERy
YXdUaWxlZFNjYWxlZEltYWdlOjpjcmVhdGUoKmltYWdlSGFuZGxlLT5pbWFnZSwgKmRlc3RpbmF0
aW9uLCAqc291cmNlLCAqdGlsZVNjYWxlRmFjdG9yLCBoUnVsZSwgdlJ1bGUsICppbWFnZVBhaW50
aW5nT3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZUhhbmRsZS0+aW1hZ2UsICpkZXN0aW5h
dGlvbiwgKnNvdXJjZSwgKnRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCAqaW1hZ2VQYWlu
dGluZ09wdGlvbnMgfX07CiB9CiAKLWNsYXNzIERyYXdJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitjbGFzcyBEcmF3SW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8RHJhd0ltYWdlQnVmZmVyPiBjcmVhdGUoUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6
RHJhd0ltYWdlQnVmZmVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIERyYXdJbWFnZUJ1ZmZlcihSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
ICAgICAgICA6IG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKHJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllcikKKyAgICAgICAgLCBtX2Rlc3RpbmF0aW9uUmVjdChkZXN0UmVjdCkKKyAgICAg
ICAgLCBtX3NyY1JlY3Qoc3JjUmVjdCkKKyAgICAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdJbWFnZUJ1ZmZlcihyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3SW1hZ2VCdWZmZXIoKTsKLQog
ICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsgfQogICAg
IEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1JlY3Q7IH0KICAgICBGbG9h
dFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvblJlY3Q7
IH0KQEAgLTE2NTMsNzYgKzEzMjgsMzggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IGRlY29kZShEZWNv
ZGVyJik7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd0ltYWdlQnVmZmVyKFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0K
LSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9i
YWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxG
bG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IHsgcmV0
dXJuIG1fZGVzdGluYXRpb25SZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIG1fcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOwogICAgIEZsb2F0UmVj
dCBtX2Rlc3RpbmF0aW9uUmVjdDsKICAgICBGbG9hdFJlY3QgbV9zcmNSZWN0OwogICAgIEltYWdl
UGFpbnRpbmdPcHRpb25zIG1fb3B0aW9uczsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Ci12b2lkIERyYXdJbWFnZUJ1ZmZlcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17
Ci0gICAgZW5jb2RlciA8PCBtX3JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjsKLSAgICBlbmNv
ZGVyIDw8IG1fZGVzdGluYXRpb25SZWN0OwotICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0OwotICAg
IGVuY29kZXIgPDwgbV9vcHRpb25zOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0
aW9uYWw8UmVmPERyYXdJbWFnZUJ1ZmZlcj4+IERyYXdJbWFnZUJ1ZmZlcjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
PiByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgZGVjb2RlciA+PiByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXI7Ci0gICAgaWYgKCFyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGRlc3RpbmF0aW9uOwotICAgIGRlY29kZXIgPj4gZGVzdGluYXRpb247Ci0gICAgaWYgKCFkZXN0
aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gc291cmNlOwotICAgIGRlY29kZXIgPj4gc291cmNlOwotICAgIGlmICghc291cmNl
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8SW1hZ2VQYWlu
dGluZ09wdGlvbnM+IG9wdGlvbnM7Ci0gICAgZGVjb2RlciA+PiBvcHRpb25zOwotICAgIGlmICgh
b3B0aW9ucykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK2NsYXNzIERyYXdOYXRpdmVJ
bWFnZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpEcmF3TmF0aXZlSW1hZ2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
SW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJ
dGVtID0gdHJ1ZTsKIAotICAgIHJldHVybiBEcmF3SW1hZ2VCdWZmZXI6OmNyZWF0ZSgqcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCAqZGVzdGluYXRpb24sICpzb3VyY2UsICpvcHRpb25zKTsK
LX0KKyAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7
CiAKLWNsYXNzIERyYXdOYXRpdmVJbWFnZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxEcmF3TmF0aXZlSW1hZ2U+IGNyZWF0ZShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KSk7Ci0gICAgfQorICAgIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9zcmNSZWN0OyB9CisgICAgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QoKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uUmVjdDsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+RHJhd05hdGl2ZUltYWdlKCk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIEZsb2F0UmVjdCBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NyY1Jl
Y3Q7IH0KLSAgICBGbG9hdFJlY3QgZGVzdGluYXRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9k
ZXN0aW5hdGlvblJlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvblJlY3Q7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8UmVmPERyYXdOYXRpdmVJbWFnZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdOYXRpdmVJbWFnZT4gZGVjb2Rl
KERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBEcmF3TmF0aXZlSW1h
Z2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uUmVjdDsgfQotCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKICAgICBGbG9hdFNpemUg
bV9pbWFnZVNpemU7CiAgICAgRmxvYXRSZWN0IG1fZGVzdGluYXRpb25SZWN0OwpAQCAtMTc0MSw3
ICsxMzc4LDcgQEAgdm9pZCBEcmF3TmF0aXZlSW1hZ2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdO
YXRpdmVJbWFnZT4+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitP
cHRpb25hbDxEcmF3TmF0aXZlSW1hZ2U+IERyYXdOYXRpdmVJbWFnZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8TmF0aXZlSW1hZ2VQdHI+IGltYWdlOwogICAgIGRl
Y29kZXIgPj4gaW1hZ2U7CkBAIC0xNzY4LDE3ICsxNDA1LDE2IEBAIE9wdGlvbmFsPFJlZjxEcmF3
TmF0aXZlSW1hZ2U+PiBEcmF3TmF0aXZlSW1hZ2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQog
ICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZSgqaW1hZ2UsICppbWFnZVNpemUsICpkZXN0aW5h
dGlvblJlY3QsICpzcmNSZWN0LCAqb3B0aW9ucyk7CisgICAgcmV0dXJuIHt7ICppbWFnZSwgKmlt
YWdlU2l6ZSwgKmRlc3RpbmF0aW9uUmVjdCwgKnNyY1JlY3QsICpvcHRpb25zIH19OwogfQogCi1j
bGFzcyBEcmF3UGF0dGVybiA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UGF0dGVy
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0dGVybj4gY3JlYXRlKEltYWdlJiBp
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERy
YXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1BhdHRlcm47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRy
YXdQYXR0ZXJuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBjb25z
dCBJbWFnZSYgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9w
YXR0ZXJuVHJhbnNmb3JtOyB9CkBAIC0xNzg3LDE2ICsxNDIzLDE1IEBAIHB1YmxpYzoKICAgICBG
bG9hdFBvaW50IHBoYXNlKCkgY29uc3QgeyByZXR1cm4gbV9waGFzZTsgfQogICAgIEZsb2F0U2l6
ZSBzcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjaW5nOyB9CiAKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IGRlY29kZShE
ZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRHJhd1BhdHRlcm4oSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Cisg
ICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRp
b25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdGluYXRpb247IH0KIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbjsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2Rl
KEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8RHJhd1BhdHRlcm4+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgbXV0
YWJsZSBSZWY8SW1hZ2U+IG1faW1hZ2U7IC8vIEZJWE1FOiBEcmF3aW5nIGltYWdlcyBjYW4gY2F1
c2UgdGhlaXIgYW5pbWF0aW9ucyB0byBwcm9ncmVzcy4gVGhpcyBzaG91bGRuJ3QgaGF2ZSB0byBi
ZSBtdXRhYmxlLgogICAgIEFmZmluZVRyYW5zZm9ybSBtX3BhdHRlcm5UcmFuc2Zvcm07CiAgICAg
RmxvYXRSZWN0IG1fdGlsZVJlY3Q7CkBAIC0xODIxLDcgKzE0NTYsNyBAQCB2b2lkIERyYXdQYXR0
ZXJuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3UGF0dGVybj4+IERyYXdQYXR0ZXJuOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERyYXdQYXR0ZXJuPiBEcmF3UGF0dGVybjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8SW1hZ2VIYW5kbGU+IGltYWdl
SGFuZGxlOwogICAgIGRlY29kZXIgPj4gaW1hZ2VIYW5kbGU7CkBAIC0xODU4LDE4MiArMTQ5Mywx
MDAgQEAgT3B0aW9uYWw8UmVmPERyYXdQYXR0ZXJuPj4gRHJhd1BhdHRlcm46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogICAgIGlmICghb3B0aW9ucykKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIHJldHVybiBEcmF3UGF0dGVybjo6Y3JlYXRlKCppbWFnZUhhbmRsZS0+aW1h
Z2UsICpkZXN0aW5hdGlvbiwgKnRpbGVSZWN0LCAqcGF0dGVyblRyYW5zZm9ybSwgKnBoYXNlLCAq
c3BhY2luZywgKm9wdGlvbnMpOworICAgIHJldHVybiB7eyAqaW1hZ2VIYW5kbGUtPmltYWdlLCAq
ZGVzdGluYXRpb24sICp0aWxlUmVjdCwgKnBhdHRlcm5UcmFuc2Zvcm0sICpwaGFzZSwgKnNwYWNp
bmcsICpvcHRpb25zIH19OwogfQogCi0vLyBJcyBEcmF3aW5nSXRlbSBiZWNhdXNlIHRoZSBzaXpl
IG9mIHRoZSB0cmFuc3BhcmVuY3kgbGF5ZXIgaXMgaW1wbGljaXRseSB0aGUgY2xpcCBib3VuZHMu
Ci1jbGFzcyBCZWdpblRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2Ns
YXNzIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8QmVn
aW5UcmFuc3BhcmVuY3lMYXllcj4gY3JlYXRlKGZsb2F0IG9wYWNpdHkpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxh
eWVyOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsgLy8gSXMgZHJhd2lu
ZyBpdGVtIGJlY2F1c2UgdGhlIHNpemUgb2YgdGhlIHRyYW5zcGFyZW5jeSBsYXllciBpcyBpbXBs
aWNpdGx5IHRoZSBjbGlwIGJvdW5kcy4KKworICAgIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKKyAgICAgICAgOiBtX29wYWNpdHkob3BhY2l0eSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSkpOwog
ICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKLQogICAgIGZsb2F0IG9wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX29wYWNpdHk7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdF
QkNPUkVfRVhQT1JUIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAg
dm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBs
b2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51
bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCitwcml2YXRlOgogICAgIGZsb2F0IG1fb3BhY2l0eTsK
IH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXI6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9v
cGFjaXR5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXI+PiBCZWdpblRyYW5zcGFyZW5jeUxheWVyOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxmbG9hdD4gb3BhY2l0eTsKLSAgICBkZWNvZGVy
ID4+IG9wYWNpdHk7Ci0gICAgaWYgKCFvcGFjaXR5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotCi0gICAgcmV0dXJuIEJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgqb3BhY2l0
eSk7Ci19Ci0KLWNsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIDogcHVibGljIERyYXdpbmdJdGVt
IHsKK2NsYXNzIEVuZFRyYW5zcGFyZW5jeUxheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PEVuZFRyYW5zcGFyZW5jeUxheWVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRW5kVHJhbnNwYXJlbmN5TGF5ZXIpOwotICAgIH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpFbmRUcmFuc3BhcmVuY3lMYXllcjsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxFbmRUcmFuc3BhcmVuY3lMYXllcj4+
IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
Z2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiB9OwogCi10ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBFbmRUcmFuc3BhcmVuY3lMYXllcjo6ZW5jb2RlKEVu
Y29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPEVuZFRyYW5zcGFyZW5jeUxheWVyPj4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShE
ZWNvZGVyJikKLXsKLSAgICByZXR1cm4gRW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmNyZWF0ZSgpOwot
fQotCi1jbGFzcyBEcmF3UmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3UmVj
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQorICAgIHN0YXRpYyBjb25zdGV4cHIg
SXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd1JlY3Q7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1JlY3QoRmxvYXRSZWN0IHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKKyAgICAgICAgOiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBt
X2JvcmRlclRoaWNrbmVzcyhib3JkZXJUaGlja25lc3MpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBEcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpKTsKICAgICB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBmbG9hdCBib3JkZXJUaGlja25l
c3MoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlclRoaWNrbmVzczsgfQogCi0gICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd1JlY3Q+PiBkZWNvZGUoRGVj
b2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVs
bG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxv
YXRSZWN0IG1fcmVjdDsKICAgICBmbG9hdCBtX2JvcmRlclRoaWNrbmVzczsKIH07CiAKLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIERyYXdSZWN0OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fYm9y
ZGVyVGhpY2tuZXNzOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVm
PERyYXdSZWN0Pj4gRHJhd1JlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9w
dGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFy
ZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8ZmxvYXQ+
IGJvcmRlclRoaWNrbmVzczsKLSAgICBkZWNvZGVyID4+IGJvcmRlclRoaWNrbmVzczsKLSAgICBp
ZiAoIWJvcmRlclRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAg
IHJldHVybiBEcmF3UmVjdDo6Y3JlYXRlKCpyZWN0LCAqYm9yZGVyVGhpY2tuZXNzKTsKLX0KLQot
Y2xhc3MgRHJhd0xpbmUgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRHJhd0xpbmUgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0xpbmU+IGNyZWF0ZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKKyAgICBzdGF0aWMgY29uc3RleHBy
IEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkRyYXdMaW5lOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIERyYXdMaW5lKEZsb2F0UG9pbnQgcG9pbnQx
LCBGbG9hdFBvaW50IHBvaW50MikKKyAgICAgICAgOiBtX3BvaW50MShwb2ludDEpCisgICAgICAg
ICwgbV9wb2ludDIocG9pbnQyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RHJhd0xpbmUocG9pbnQxLCBwb2ludDIpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5EcmF3TGluZSgpOwotCiAgICAgRmxvYXRQb2ludCBwb2ludDEoKSBjb25zdCB7IHJl
dHVybiBtX3BvaW50MTsgfQogICAgIEZsb2F0UG9pbnQgcG9pbnQyKCkgY29uc3QgeyByZXR1cm4g
bV9wb2ludDI7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPERyYXdMaW5lPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYp
OworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9w
b2ludDE7CiAgICAgRmxvYXRQb2ludCBtX3BvaW50MjsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Ci12b2lkIERyYXdMaW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsK
LSAgICBlbmNvZGVyIDw8IG1fcG9pbnQxOwotICAgIGVuY29kZXIgPDwgbV9wb2ludDI7Ci19Ci0K
LXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0xpbmU+PiBEcmF3TGlu
ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4g
cG9pbnQxOwotICAgIGRlY29kZXIgPj4gcG9pbnQxOwotICAgIGlmICghcG9pbnQxKQotICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gcG9pbnQy
OwotICAgIGRlY29kZXIgPj4gcG9pbnQyOwotICAgIGlmICghcG9pbnQyKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworY2xhc3MgRHJhd0xpbmVzRm9yVGV4dCB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3TGluZXNG
b3JUZXh0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBy
ZXR1cm4gRHJhd0xpbmU6OmNyZWF0ZSgqcG9pbnQxLCAqcG9pbnQyKTsKLX0KLQotY2xhc3MgRHJh
d0xpbmVzRm9yVGV4dCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxEcmF3TGluZXNGb3JUZXh0PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2Nh
dGlvbiwgY29uc3QgRmxvYXRTaXplJiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdMaW5lc0ZvclRleHQoYmxvY2tM
b2NhdGlvbiwgbG9jYWxBbmNob3IsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91Ymxl
TGluZXMpKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3TGluZXNG
b3JUZXh0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBibG9ja0xvY2F0aW9uLCBjb25zdCBGbG9hdFNpemUmIGxvY2FsQW5jaG9yLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKTsKIAogICAgIHZvaWQgc2V0QmxvY2tMb2NhdGlvbihjb25zdCBGbG9hdFBv
aW50JiBibG9ja0xvY2F0aW9uKSB7IG1fYmxvY2tMb2NhdGlvbiA9IGJsb2NrTG9jYXRpb247IH0K
ICAgICBjb25zdCBGbG9hdFBvaW50JiBibG9ja0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9ja0xvY2F0aW9uOyB9CkBAIC0yMDQ0LDE2ICsxNTk3LDE1IEBAIHB1YmxpYzoKICAgICBib29s
IGlzUHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CiAgICAgYm9vbCBkb3Vi
bGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlTGluZXM7IH0KIAotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdMaW5lc0ZvclRleHQ+PiBk
ZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgYmxvY2tMb2NhdGlvbiwgY29uc3QgRmxvYXRTaXpl
JiBsb2NhbEFuY2hvciwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyk7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2Fs
Qm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdMaW5l
c0ZvclRleHQ+IGRlY29kZShEZWNvZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBt
X2Jsb2NrTG9jYXRpb247CiAgICAgRmxvYXRTaXplIG1fbG9jYWxBbmNob3I7CiAgICAgRGFzaEFy
cmF5IG1fd2lkdGhzOwpAQCAtMjA3NCw3ICsxNjI2LDcgQEAgdm9pZCBEcmF3TGluZXNGb3JUZXh0
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KLU9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4gRHJhd0xpbmVzRm9yVGV4dDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25hbDxEcmF3TGluZXNGb3JUZXh0PiBEcmF3
TGluZXNGb3JUZXh0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxG
bG9hdFBvaW50PiBibG9ja0xvY2F0aW9uOwogICAgIGRlY29kZXIgPj4gYmxvY2tMb2NhdGlvbjsK
QEAgLTIxMDYsMTE5ICsxNjU4LDgzIEBAIE9wdGlvbmFsPFJlZjxEcmF3TGluZXNGb3JUZXh0Pj4g
RHJhd0xpbmVzRm9yVGV4dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFkb3Vi
bGVMaW5lcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBEcmF3
TGluZXNGb3JUZXh0OjpjcmVhdGUoKmJsb2NrTG9jYXRpb24sICpsb2NhbEFuY2hvciwgKnRoaWNr
bmVzcywgKndpZHRocywgKnByaW50aW5nLCAqZG91YmxlTGluZXMpOworICAgIHJldHVybiB7eyAq
YmxvY2tMb2NhdGlvbiwgKmxvY2FsQW5jaG9yLCAqdGhpY2tuZXNzLCAqd2lkdGhzLCAqcHJpbnRp
bmcsICpkb3VibGVMaW5lcyB9fTsKIH0KIAotY2xhc3MgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
ciA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxl
KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcjsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCisgICAgICAgIDogbV9yZWN0KHJl
Y3QpCisgICAgICAgICwgbV9zdHlsZShzdHlsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpKTsKICAgICB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcj4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VC
Q09SRV9FWFBPUlQgRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSk7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFs
Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAorcHJp
dmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IG1fc3R5bGU7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBEcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBl
bmNvZGVyIDw8IG1fcmVjdDsKLSAgICBlbmNvZGVyIDw8IG1fc3R5bGU7Ci19Ci0KLXRlbXBsYXRl
PGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcj4+
IERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAg
aWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU+IHN0eWxlOwotICAgIGRlY29kZXIgPj4gc3R5bGU7Ci0g
ICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVy
biBEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyOjpjcmVhdGUoKnJlY3QsICpzdHlsZSk7Ci19Ci0K
LWNsYXNzIERyYXdFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIERyYXdFbGxp
cHNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERyYXdFbGxpcHNlPiBjcmVhdGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUg
PSBJdGVtVHlwZTo6RHJhd0VsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSB0cnVlOworCisgICAgRHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAg
ICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRHJh
d0VsbGlwc2UocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIH5EcmF3RWxsaXBz
ZSgpOwotCiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAot
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPERyYXdFbGxp
cHNlPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBE
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0
OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAorcHJpdmF0ZToKICAgICBGbG9hdFJl
Y3QgbV9yZWN0OwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRHJhd0VsbGlw
c2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9y
ZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPERyYXdFbGxp
cHNlPj4gRHJhd0VsbGlwc2U6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNvZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIERyYXdFbGxpcHNl
OjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBEcmF3UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRl
bSB7CitjbGFzcyBEcmF3UGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEcmF3UGF0aD4g
Y3JlYXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBp
dGVtVHlwZSA9IEl0ZW1UeXBlOjpEcmF3UGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2lu
Z0l0ZW0gPSB0cnVlOworCisgICAgRHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKKyAgICAgICAg
OiBtX3BhdGgocGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERyYXdQ
YXRoKHBhdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3UGF0
aCgpOworICAgIERyYXdQYXRoKFBhdGgmJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChXVEZNb3Zl
KHBhdGgpKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9w
dGlvbmFsPFJlZjxEcmF3UGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPERyYXdQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwog
Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIERyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAg
ICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlv
bmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
eyByZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3BhdGguZmFzdEJvdW5kaW5nUmVjdCgpOyB9Ci0KLSAgICBjb25zdCBQYXRo
IG1fcGF0aDsKK3ByaXZhdGU6CisgICAgUGF0aCBtX3BhdGg7CiB9OwogCiB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPgpAQCAtMjIyOCwyNCArMTc0NCwzNyBAQCB2b2lkIERyYXdQYXRoOjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxEcmF3UGF0aD4+IERyYXdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPERyYXdQYXRoPiBEcmF3UGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aDsKICAgICBkZWNvZGVyID4+IHBhdGg7CiAgICAgaWYg
KCFwYXRoKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIERyYXdQ
YXRoOjpjcmVhdGUoKnBhdGgpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0K
IAotY2xhc3MgRHJhd0ZvY3VzUmluZ1BhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RHJhd0ZvY3VzUmluZ1BhdGggewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmlu
Z1BhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoUGF0aCYmIHBhdGgs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIENvbG9yIGNvbG9yKQorICAgICAgICA6IG1fcGF0
aChXVEZNb3ZlKHBhdGgpKQorICAgICAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3Rm9jdXNSaW5nUGF0aChwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkRyYXdGb2N1
c1JpbmdQYXRoKCk7CisgICAgRHJhd0ZvY3VzUmluZ1BhdGgoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgQ29sb3IgY29sb3IpCisgICAgICAgIDogbV9wYXRoKHBh
dGgpCisgICAgICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgICAgICwgbV9jb2xvcihjb2xvcikKKyAgICB7CisgICAgfQogCiAgICAgY29uc3QgUGF0
aCYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMjI1MywxNiArMTc4MiwxNSBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQogCiAgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmlu
Z1BhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JU
IERyYXdGb2N1c1JpbmdQYXRoKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxEcmF3Rm9jdXNSaW5nUGF0aD4gZGVjb2RlKERlY29kZXImKTsKIAotICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGgg
bV9wYXRoOwogICAgIGZsb2F0IG1fd2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CiAgICAgQ29s
b3IgbV9jb2xvcjsKQEAgLTIyNzgsNyArMTgwNiw3IEBAIHZvaWQgRHJhd0ZvY3VzUmluZ1BhdGg6
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgotT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0aW9uYWw8RHJhd0ZvY3VzUmluZ1BhdGg+IERy
YXdGb2N1c1JpbmdQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25h
bDxQYXRoPiBwYXRoOwogICAgIGRlY29kZXIgPj4gcGF0aDsKQEAgLTIzMDAsMzMgKzE4MjgsMzEg
QEAgT3B0aW9uYWw8UmVmPERyYXdGb2N1c1JpbmdQYXRoPj4gRHJhd0ZvY3VzUmluZ1BhdGg6OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRHJhd0ZvY3VzUmluZ1BhdGg6OmNyZWF0ZSgqcGF0
aCwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRo
KSwgKndpZHRoLCAqb2Zmc2V0LCAqY29sb3IgfX07CiB9CiAKLWNsYXNzIERyYXdGb2N1c1JpbmdS
ZWN0cyA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBEcmF3Rm9jdXNSaW5nUmVjdHMgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPiBjcmVhdGUoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEcmF3
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKSk7Ci0gICAgfQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RHJhd0ZvY3Vz
UmluZ1JlY3RzOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5EcmF3Rm9jdXNSaW5nUmVjdHMoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBEcmF3Rm9jdXNSaW5nUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwogCiAgICAgY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4gcmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAgZmxv
YXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAgICAgZmxvYXQgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBjb25zdCBDb2xvciYgY29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxEcmF3Rm9jdXNSaW5nUmVjdHM+PiBkZWNvZGUoRGVjb2RlciYpOwor
ICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRHJhd0ZvY3VzUmluZ1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPERyYXdGb2N1c1JpbmdSZWN0cz4gZGVjb2RlKERlY29kZXImKTsK
IAorcHJpdmF0ZToKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBtX3JlY3RzOwogICAgIGZsb2F0IG1f
d2lkdGg7CiAgICAgZmxvYXQgbV9vZmZzZXQ7CkBAIC0yMzQzLDcgKzE4NjksNyBAQCB2b2lkIERy
YXdGb2N1c1JpbmdSZWN0czo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RHJhd0ZvY3VzUmluZ1JlY3RzPj4g
RHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPERy
YXdGb2N1c1JpbmdSZWN0cz4gRHJhd0ZvY3VzUmluZ1JlY3RzOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBPcHRpb25hbDxWZWN0b3I8RmxvYXRSZWN0Pj4gcmVjdHM7CiAgICAgZGVj
b2RlciA+PiByZWN0czsKQEAgLTIzNjUsNzEgKzE4OTEsNTUgQEAgT3B0aW9uYWw8UmVmPERyYXdG
b2N1c1JpbmdSZWN0cz4+IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAgICAgaWYgKCFjb2xvcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBEcmF3Rm9jdXNSaW5nUmVjdHM6OmNyZWF0ZSgqcmVjdHMsICp3aWR0aCwgKm9mZnNl
dCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3RzLCAqd2lkdGgsICpvZmZzZXQsICpjb2xv
ciB9fTsKIH0KIAotY2xhc3MgRmlsbFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3Mg
RmlsbFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3Q+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlw
ZSA9IEl0ZW1UeXBlOjpGaWxsUmVjdDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxp
bmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9
IHRydWU7CisKKyAgICBGaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCisgICAgICAgIDog
bV9yZWN0KHJlY3QpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxsUmVj
dChyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFJlY3Qo
KTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsK
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9yZWN0OyB9Ci0KICAgICBGbG9hdFJlY3QgbV9yZWN0OwogfTsKIAotdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgRmlsbFJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEZpbGxSZWN0Pj4gRmlsbFJlY3Q6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKLSAgICBkZWNv
ZGVyID4+IHJlY3Q7Ci0gICAgaWYgKCFyZWN0KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotCi0gICAgcmV0dXJuIEZpbGxSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCi0vLyBGSVhNRTog
TWFrZSB0aGVzZSBpbmhlcml0IGZyb20gRmlsbFJlY3QgcHJvcGVyLgotY2xhc3MgRmlsbFJlY3RX
aXRoQ29sb3IgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmlsbFJlY3RXaXRoQ29sb3Ig
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJlY3RXaXRoQ29sb3I+IGNyZWF0ZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29uc3Rl
eHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aENvbG9yOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUmVjdFdpdGhD
b2xvcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAg
OiBtX3JlY3QocmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbFJlY3RXaXRoQ29sb3IocmVjdCwgY29sb3IpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUmVjdFdpdGhDb2xvcigpOwot
CiAgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAgICBjb25z
dCBDb2xvciYgY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+
IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25z
dDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsUmVjdFdpdGhDb2xvcihjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xv
YmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxSZWN0V2l0aENvbG9yPiBk
ZWNvZGUoRGVjb2RlciYpOwogCitwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiAgICAg
Q29sb3IgbV9jb2xvcjsKIH07CkBAIC0yNDQyLDcgKzE5NTIsNyBAQCB2b2lkIEZpbGxSZWN0V2l0
aENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIH0KIAogdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhDb2xvcj4+IEZpbGxSZWN0V2l0
aENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aENv
bG9yPiBGaWxsUmVjdFdpdGhDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI0NTQs
MjkgKzE5NjQsMjkgQEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aENvbG9yPj4gRmlsbFJlY3RX
aXRoQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIGlmICghY29sb3IpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoQ29sb3I6
OmNyZWF0ZSgqcmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJlY3QsICpjb2xvciB9fTsK
IH0KIAotY2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgOiBwdWJsaWMgRHJhd2luZ0l0ZW0gewor
Y2xhc3MgRmlsbFJlY3RXaXRoR3JhZGllbnQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Rmls
bFJlY3RXaXRoR3JhZGllbnQ+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGxSZWN0
V2l0aEdyYWRpZW50KHJlY3QsIGdyYWRpZW50KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4
cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRlbSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0aEdyYWRpZW50KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
RmlsbFJlY3RXaXRoR3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKIAotICAg
IEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgRmxv
YXRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgY29uc3QgR3JhZGll
bnQmIGdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQoKTsgfQogCi0gICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRo
R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRo
R3JhZGllbnQoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKKyAgICBPcHRpb25hbDxGbG9h
dFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAg
IE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9
CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsUmVjdFdp
dGhHcmFkaWVudD4gZGVjb2RlKERlY29kZXImKTsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9yZWN0OwogICAgIG11dGFibGUgUmVmPEdyYWRpZW50PiBtX2dyYWRpZW50OyAvLyBGSVhNRTog
TWFrZSB0aGlzIG5vdCBtdXRhYmxlCiB9OwpAQCAtMjQ4OSw3ICsxOTk5LDcgQEAgdm9pZCBGaWxs
UmVjdFdpdGhHcmFkaWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJlY3RXaXRoR3JhZGllbnQ+
PiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRpb25h
bDxGaWxsUmVjdFdpdGhHcmFkaWVudD4gRmlsbFJlY3RXaXRoR3JhZGllbnQ6OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gcmVjdDsKICAgICBkZWNv
ZGVyID4+IHJlY3Q7CkBAIC0yNTAwLDMyICsyMDEwLDM3IEBAIE9wdGlvbmFsPFJlZjxGaWxsUmVj
dFdpdGhHcmFkaWVudD4+IEZpbGxSZWN0V2l0aEdyYWRpZW50OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlCiAgICAgaWYgKCFncmFkaWVudCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIHJldHVybiBGaWxsUmVjdFdpdGhHcmFkaWVudDo6Y3JlYXRlKCpyZWN0LCBncmFkaWVudC0+
Z2V0KCkpOworICAgIHJldHVybiB7eyAqcmVjdCwgZ3JhZGllbnQtPmdldCgpIH19OwogfQogCi1j
bGFzcyBGaWxsQ29tcG9zaXRlZFJlY3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgRmls
bENvbXBvc2l0ZWRSZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxDb21wb3NpdGVk
UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVjdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgRmlsbENvbXBv
c2l0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKKyAgICAgICAgOiBtX3JlY3Qo
cmVjdCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgICAgICAsIG1fb3Aob3ApCisgICAg
ICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRmlsbENvbXBvc2l0ZWRSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKSk7
CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbENvbXBvc2l0ZWRSZWN0
KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogICAg
IGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0K
ICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ibGVuZE1vZGU7IH0K
IAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxD
b21wb3NpdGVkUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBGaWxsQ29t
cG9zaXRlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlKTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNz
IERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxGaWxsQ29tcG9zaXRlZFJlY3Q+IGRlY29kZShEZWNv
ZGVyJik7CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBDb2xvciBtX2Nv
bG9yOwogICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fb3A7CkBAIC0yNTQyLDcgKzIwNTcsNyBAQCB2
b2lkIEZpbGxDb21wb3NpdGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbENvbXBvc2l0ZWRS
ZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlv
bmFsPEZpbGxDb21wb3NpdGVkUmVjdD4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7CiAgICAgZGVjb2Rl
ciA+PiByZWN0OwpAQCAtMjU2NCwzMSArMjA3OSwzNSBAQCBPcHRpb25hbDxSZWY8RmlsbENvbXBv
c2l0ZWRSZWN0Pj4gRmlsbENvbXBvc2l0ZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
ICAgICBpZiAoIWJsZW5kTW9kZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IHJldHVybiBGaWxsQ29tcG9zaXRlZFJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmNvbG9yLCAqb3AsICpi
bGVuZE1vZGUpOworICAgIHJldHVybiB7eyAqcmVjdCwgKmNvbG9yLCAqb3AsICpibGVuZE1vZGUg
fX07CiB9CiAKLWNsYXNzIEZpbGxSb3VuZGVkUmVjdCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7Citj
bGFzcyBGaWxsUm91bmRlZFJlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RmlsbFJvdW5k
ZWRSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5
cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQorICAgICAgICA6IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fY29sb3IoY29sb3IpCisg
ICAgICAgICwgbV9ibGVuZE1vZGUoYmxlbmRNb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKICAg
ICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5GaWxsUm91bmRlZFJlY3QoKTsKLQog
ICAgIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CiAgICAgY29uc3QgQ29sb3ImIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JsZW5kTW9k
ZTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8
RmlsbFJvdW5kZWRSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmlsbFJvdW5kZWRSZWN0PiBkZWNvZGUoRGVjb2RlciYp
OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpOworICAgIHZvaWQgYXBw
bHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWN0
LnJlY3QoKTsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmVjdCgp
OyB9CiAKK3ByaXZhdGU6CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBtX3JlY3Q7CiAgICAgQ29sb3Ig
bV9jb2xvcjsKICAgICBCbGVuZE1vZGUgbV9ibGVuZE1vZGU7CkBAIC0yNjAzLDcgKzIxMjIsNyBA
QCB2b2lkIEZpbGxSb3VuZGVkUmVjdDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB9
CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8RmlsbFJvdW5kZWRSZWN0
Pj4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPEZp
bGxSb3VuZGVkUmVjdD4gRmlsbFJvdW5kZWRSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBPcHRpb25hbDxGbG9hdFJvdW5kZWRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4g
cmVjdDsKQEAgLTI2MjAsMzEgKzIxMzksMzUgQEAgT3B0aW9uYWw8UmVmPEZpbGxSb3VuZGVkUmVj
dD4+IEZpbGxSb3VuZGVkUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgaWYgKCFi
bGVuZE1vZGUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmls
bFJvdW5kZWRSZWN0OjpjcmVhdGUoKnJlY3QsICpjb2xvciwgKmJsZW5kTW9kZSk7CisgICAgcmV0
dXJuIHt7ICpyZWN0LCAqY29sb3IsICpibGVuZE1vZGUgfX07CiB9CiAKLWNsYXNzIEZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlPiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICBzdGF0aWMgY29u
c3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBGaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICA6
IG1fcmVjdChyZWN0KQorICAgICAgICAsIG1fcm91bmRlZEhvbGVSZWN0KHJvdW5kZWRIb2xlUmVj
dCkKKyAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBj
b2xvcikpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKCk7Ci0KICAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX3JlY3Q7IH0KICAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3JvdW5kZWRIb2xlUmVjdDsgfQogICAgIGNvbnN0IENvbG9y
JiBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+IGRlY29kZShEZWNvZGVyJik7CiAKLXByaXZh
dGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhp
Y3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3JlY3Q7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3By
aXZhdGU6CiAgICAgRmxvYXRSZWN0IG1fcmVjdDsKICAgICBGbG9hdFJvdW5kZWRSZWN0IG1fcm91
bmRlZEhvbGVSZWN0OwogICAgIENvbG9yIG1fY29sb3I7CkBAIC0yNjU5LDcgKzIxODIsNyBAQCB2
b2lkIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK09wdGlvbmFsPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPiBGaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7CiAgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiByZWN0OwogICAgIGRlY29kZXIgPj4gcmVjdDsKQEAgLTI2NzYsNzQgKzIxOTksNjMg
QEAgT3B0aW9uYWw8UmVmPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPj4gRmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU6OmRlY29kZShEZWNvZGVyJgogICAgIGlmICghY29sb3IpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNy
ZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yKTsKKyAgICByZXR1cm4ge3sgKnJl
Y3QsICpyb3VuZGVkSG9sZVJlY3QsICpjb2xvciB9fTsKIH0KIAogI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQogCi1jbGFzcyBGaWxsSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBGaWxsSW5saW5lUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsSW5s
aW5lUGF0aD4gY3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICBzdGF0
aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRo
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsKKworICAgIEZpbGxJbmxp
bmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICAgICAgOiBtX3BhdGhE
YXRhKHBhdGhEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbElu
bGluZVBhdGgocGF0aERhdGEpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5GaWxsSW5saW5lUGF0aCgpOwotCiAgICAgUGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0
aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9p
ZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0
YXRpYyBPcHRpb25hbDxSZWY8RmlsbElubGluZVBhdGg+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxJbmxpbmVQYXRoKGNvbnN0IElubGluZVBh
dGhEYXRhJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBwYXRoKCkuZmFzdEJvdW5kaW5nUmVjdCgpOyB9CisgICAgT3B0aW9u
YWw8RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KIAorcHJp
dmF0ZToKICAgICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOwogfTsKIAotdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KLXZvaWQgRmlsbElubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IEZpbGxJbmxpbmVQYXRo
OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0
YT4gcGF0aERhdGE7Ci0gICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKLSAgICBpZiAoIXBhdGhEYXRh
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIEZpbGxJbmxpbmVQ
YXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKLX0KLQogI2VuZGlmIC8vIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQogCi1jbGFzcyBGaWxsUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitjbGFzcyBGaWxsUGF0aCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3Jl
YXRlKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpGaWxsUGF0aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJ
bmxpbmVJdGVtID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0
ZW0gPSB0cnVlOworCisgICAgRmlsbFBhdGgoUGF0aCYmIHBhdGgpCisgICAgICAgIDogbV9wYXRo
KFdURk1vdmUocGF0aCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxs
UGF0aChwYXRoKSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbFBh
dGgoKTsKKyAgICBGaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQorICAgICAgICA6IG1fcGF0aChw
YXRoKQorICAgIHsKKyAgICB9CiAKICAgICBjb25zdCBQYXRoJiBwYXRoKCkgY29uc3QgeyByZXR1
cm4gbV9wYXRoOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxGaWxsUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZpbGxQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1w
cml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIEZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2
b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxv
Y2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGds
b2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFs
PEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3QgeyBy
ZXR1cm4gbV9wYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsgfQogCi0gICAgY29uc3QgUGF0aCBtX3Bh
dGg7Citwcml2YXRlOgorICAgIFBhdGggbV9wYXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KQEAgLTI3NTMsOTAgKzIyNjUsNjUgQEAgdm9pZCBGaWxsUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8RmlsbFBhdGg+PiBGaWxsUGF0aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCitPcHRp
b25hbDxGaWxsUGF0aD4gRmlsbFBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IE9wdGlvbmFsPFBhdGg+IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0
aCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBGaWxsUGF0aDo6
Y3JlYXRlKCpwYXRoKTsKKyAgICByZXR1cm4ge3sgV1RGTW92ZSgqcGF0aCkgfX07CiB9CiAKLWNs
YXNzIEZpbGxFbGxpcHNlIDogcHVibGljIERyYXdpbmdJdGVtIHsKK2NsYXNzIEZpbGxFbGxpcHNl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEZpbGxFbGxpcHNlPiBjcmVhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJ
dGVtVHlwZTo6RmlsbEVsbGlwc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5l
SXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0
cnVlOworCisgICAgRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6
IG1fcmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsbEVs
bGlwc2UocmVjdCkpOwogICAgIH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkZpbGxF
bGxpcHNlKCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsg
fQogCi0gICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8Rmls
bEVsbGlwc2U+PiBkZWNvZGUoRGVjb2RlciYpOwotCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQ
T1JUIEZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShHcmFw
aGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwogCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25z
dCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JikgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKK3ByaXZhdGU6CiAgICAg
RmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIEZp
bGxFbGxpcHNlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVy
IDw8IG1fcmVjdDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxG
aWxsRWxsaXBzZT4+IEZpbGxFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0OwotICAgIGlm
ICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJldHVybiBGaWxs
RWxsaXBzZTo6Y3JlYXRlKCpyZWN0KTsKLX0KLQotY2xhc3MgUHV0SW1hZ2VEYXRhIDogcHVibGlj
IERyYXdpbmdJdGVtIHsKK2NsYXNzIFB1dEltYWdlRGF0YSB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxQdXRJbWFnZURhdGE+IGNyZWF0ZShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9y
bWF0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUHV0SW1hZ2VEYXRhKGlu
cHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmVmPFB1dEltYWdlRGF0YT4gY3JlYXRlKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFnZURhdGE+JiYgaW1hZ2VEYXRhLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RGb3JtYXQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBQdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIFdURk1vdmUoaW1hZ2VEYXRhKSwgc3JjUmVjdCwg
ZGVzdFBvaW50LCBkZXN0Rm9ybWF0KSk7Ci0gICAgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgSXRl
bVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5Q
dXRJbWFnZURhdGEoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0Rm9ybWF0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBQdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgUmVmPEltYWdlRGF0YT4mJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0KTsKIAogICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0OyB9Ci0gICAgSW1hZ2VEYXRhJiBp
bWFnZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlRGF0YTsgfQorICAgIEltYWdlRGF0YSYg
aW1hZ2VEYXRhKCkgY29uc3QgeyByZXR1cm4gKm1faW1hZ2VEYXRhOyB9CiAgICAgSW50UmVjdCBz
cmNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zcmNSZWN0OyB9CiAgICAgSW50UG9pbnQgZGVzdFBv
aW50KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0UG9pbnQ7IH0KICAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RGb3JtYXQ7IH0KIAotICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFB1dEltYWdlRGF0
YT4+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgUHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIFJlZjxJbWFn
ZURhdGE+JiYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIHt7IG1f
ZGVzdFBvaW50LCBtX3NyY1JlY3Quc2l6ZSgpIH19OyB9CiAKLSAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdChtX2Rl
c3RQb2ludCwgbV9zcmNSZWN0LnNpemUoKSk7IH0KKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIE9wdGlvbmFsPFB1dEltYWdlRGF0YT4gZGVjb2RlKERlY29kZXImKTsKIAorcHJp
dmF0ZToKICAgICBJbnRSZWN0IG1fc3JjUmVjdDsKICAgICBJbnRQb2ludCBtX2Rlc3RQb2ludDsK
LSAgICBSZWY8SW1hZ2VEYXRhPiBtX2ltYWdlRGF0YTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBt
X2ltYWdlRGF0YTsKICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG1faW5wdXRGb3JtYXQ7CiAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX2Rlc3RGb3JtYXQ7CiB9OwpAQCAtMjg0NSwxNCAr
MjMzMiwxNCBAQCB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBQdXRJbWFnZURhdGE6OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXIgPDwgbV9pbnB1dEZv
cm1hdDsKLSAgICBlbmNvZGVyIDw8IG1faW1hZ2VEYXRhOworICAgIGVuY29kZXIgPDwgbWFrZVJl
ZigqbV9pbWFnZURhdGEpOwogICAgIGVuY29kZXIgPDwgbV9zcmNSZWN0OwogICAgIGVuY29kZXIg
PDwgbV9kZXN0UG9pbnQ7CiAgICAgZW5jb2RlciA8PCBtX2Rlc3RGb3JtYXQ7CiB9CiAKIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8UHV0SW1hZ2VEYXRhPj4gUHV0SW1hZ2VE
YXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFB1dEltYWdlRGF0YT4gUHV0
SW1hZ2VEYXRhOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBPcHRpb25hbDxBbHBo
YVByZW11bHRpcGxpY2F0aW9uPiBpbnB1dEZvcm1hdDsKICAgICBPcHRpb25hbDxSZWY8SW1hZ2VE
YXRhPj4gaW1hZ2VEYXRhOwpAQCAtMjg4MCwxNjkgKzIzNjcsMTA5IEBAIE9wdGlvbmFsPFJlZjxQ
dXRJbWFnZURhdGE+PiBQdXRJbWFnZURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IGlmICghZGVzdEZvcm1hdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiBQdXRJbWFnZURhdGE6OmNyZWF0ZSgqaW5wdXRGb3JtYXQsIFdURk1vdmUoKmltYWdlRGF0
YSksICpzcmNSZWN0LCAqZGVzdFBvaW50LCAqZGVzdEZvcm1hdCk7CisgICAgcmV0dXJuIHt7ICpp
bnB1dEZvcm1hdCwgV1RGTW92ZSgqaW1hZ2VEYXRhKSwgKnNyY1JlY3QsICpkZXN0UG9pbnQsICpk
ZXN0Rm9ybWF0IH19OwogfQogCi1jbGFzcyBQYWludEZyYW1lRm9yTWVkaWEgOiBwdWJsaWMgRHJh
d2luZ0l0ZW0geworY2xhc3MgUGFpbnRGcmFtZUZvck1lZGlhIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFBhaW50RnJhbWVGb3JNZWRpYT4gY3JlYXRlKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGlzSW5saW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlz
RHJhd2luZ0l0ZW0gPSB0cnVlOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UGFpbnRG
cmFtZUZvck1lZGlhKCk7CisgICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CiAKICAgICBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbjsgfQogICAgIE1lZGlhUGxheWVy
SWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxQYWludEZy
YW1lRm9yTWVkaWE+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZjxQYWludEZyYW1lRm9yTWVkaWE+IGNyZWF0ZShNZWRpYVBsYXllcklkZW50aWZpZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwotCi0gICAgUGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0gICAgUGFpbnRGcmFtZUZv
ck1lZGlhKE1lZGlhUGxheWVySWRlbnRpZmllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
bik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0
JikgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiB7IG1fZGVzdGluYXRpb24gfTsgfQogCitw
cml2YXRlOgogICAgIE1lZGlhUGxheWVySWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiAgICAgRmxv
YXRSZWN0IG1fZGVzdGluYXRpb247CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9p
ZCBQYWludEZyYW1lRm9yTWVkaWE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewot
ICAgIGVuY29kZXIgPDwgbV9pZGVudGlmaWVyOwotICAgIGVuY29kZXIgPDwgbV9kZXN0aW5hdGlv
bjsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxQYWludEZyYW1l
Rm9yTWVkaWE+PiBQYWludEZyYW1lRm9yTWVkaWE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQot
ewotICAgIE9wdGlvbmFsPE1lZGlhUGxheWVySWRlbnRpZmllcj4gaWRlbnRpZmllcjsKLSAgICBk
ZWNvZGVyID4+IGlkZW50aWZpZXI7Ci0gICAgaWYgKCFpZGVudGlmaWVyKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotCi0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBkZXN0aW5hdGlvbjsK
LSAgICBkZWNvZGVyID4+IGRlc3RpbmF0aW9uOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gUGFpbnRGcmFtZUZvck1lZGlh
OjpjcmVhdGUoKmlkZW50aWZpZXIsICpkZXN0aW5hdGlvbik7Ci19Ci0KLWNsYXNzIFN0cm9rZVJl
Y3QgOiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgU3Ryb2tlUmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxTdHJva2VSZWN0PiBjcmVhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9
IEl0ZW1UeXBlOjpTdHJva2VSZWN0OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGlu
ZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0g
dHJ1ZTsKKworICAgIFN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCisgICAgICAgIDogbV9yZWN0KHJlY3QpCisgICAgICAgICwgbV9saW5lV2lkdGgobGlu
ZVdpZHRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlUmVjdChy
ZWN0LCBsaW5lV2lkdGgpKTsKICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5T
dHJva2VSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVj
dDsgfQogICAgIGZsb2F0IGxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVdpZHRoOyB9
CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29u
c3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJv
a2VSZWN0Pj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpOwotCi0gICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0
UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CisgICAg
T3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBj
b25zdDsKIAorcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9yZWN0OwogICAgIGZsb2F0IG1fbGlu
ZVdpZHRoOwogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU3Ryb2tlUmVjdDo6
ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBtX3JlY3Q7
Ci0gICAgZW5jb2RlciA8PCBtX2xpbmVXaWR0aDsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4KLU9wdGlvbmFsPFJlZjxTdHJva2VSZWN0Pj4gU3Ryb2tlUmVjdDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIg
Pj4gcmVjdDsKLSAgICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICBPcHRpb25hbDxmbG9hdD4gbGluZVdpZHRoOwotICAgIGRlY29kZXIgPj4gbGluZVdpZHRo
OwotICAgIGlmICghbGluZVdpZHRoKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0g
ICAgcmV0dXJuIFN0cm9rZVJlY3Q6OmNyZWF0ZSgqcmVjdCwgKmxpbmVXaWR0aCk7Ci19Ci0KICNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tlSW5saW5lUGF0aCA6IHB1
YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VJbmxpbmVQYXRoIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPFN0cm9rZUlubGluZVBhdGg+IGNyZWF0ZShjb25zdCBJbmxpbmVQYXRoRGF0
YSYgcGF0aERhdGEpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0
ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lu
bGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVt
ID0gdHJ1ZTsKKworICAgIFN0cm9rZUlubGluZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBh
dGhEYXRhKQorICAgICAgICA6IG1fcGF0aERhdGEocGF0aERhdGEpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CiAgICAgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlSW5saW5lUGF0aCgpOwotCiAgICAg
UGF0aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQogCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlSW5s
aW5lUGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJva2VJbmxpbmVQ
YXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7Ci0KLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8
RmxvYXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0K
KyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwogCitwcml2YXRlOgogICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7CiB9
OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTdHJva2VJbmxpbmVQYXRoOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fcGF0aERhdGE7
Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5l
UGF0aD4+IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQotewotICAg
IE9wdGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKLSAgICBkZWNvZGVyID4+IHBhdGhE
YXRhOwotICAgIGlmICghcGF0aERhdGEpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0K
LSAgICByZXR1cm4gU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRlKFdURk1vdmUoKnBhdGhEYXRhKSk7
Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKIAotY2xhc3MgU3Ryb2tl
UGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VQYXRoIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQYXRoJiBwYXRoKQorICAg
IHN0YXRpYyBjb25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6U3Ryb2tlUGF0
aDsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSB0cnVlOworCisgICAgU3Ryb2tl
UGF0aChQYXRoJiYgcGF0aCkKKyAgICAgICAgOiBtX3BhdGgoV1RGTW92ZShwYXRoKSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZVBhdGgocGF0aCkpOwogICAgIH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflN0cm9rZVBhdGgoKTsKKyAgICBTdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCisgICAgICAgIDogbV9wYXRoKHBhdGgpCisgICAgeworICAg
IH0KIAogICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
LSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZVBh
dGg+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxTdHJva2VQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogCi1wcml2YXRlOgotICAg
IFdFQkNPUkVfRVhQT1JUIFN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgYXBwbHko
R3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gbG9jYWxCb3VuZHMo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0OwogCi0gICAgY29uc3QgUGF0aCBtX3BhdGg7Citwcml2YXRlOgorICAgIFBhdGggbV9w
YXRoOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTMwNTIsNzIxICsyNDc5LDEx
NSBAQCB2b2lkIFN0cm9rZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogfQog
CiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPFN0cm9rZVBhdGg+PiBTdHJv
a2VQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK09wdGlvbmFsPFN0cm9rZVBhdGg+IFN0
cm9rZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIE9wdGlvbmFsPFBhdGg+
IHBhdGg7CiAgICAgZGVjb2RlciA+PiBwYXRoOwogICAgIGlmICghcGF0aCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBTdHJva2VQYXRoOjpjcmVhdGUoKnBhdGgp
OworICAgIHJldHVybiB7eyBXVEZNb3ZlKCpwYXRoKSB9fTsKIH0KIAotY2xhc3MgU3Ryb2tlRWxs
aXBzZSA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7CitjbGFzcyBTdHJva2VFbGxpcHNlIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFN0cm9rZUVsbGlwc2U+IGNyZWF0ZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVtVHlwZSA9IEl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gdHJ1ZTsK
KworICAgIFN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1f
cmVjdChyZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Ryb2tlRWxs
aXBzZShyZWN0KSk7CiAgICAgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgflN0cm9rZUVsbGlwc2Uo
KTsKKyAgICBjb25zdCBGbG9hdFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0K
IAotICAgIEZsb2F0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9p
ZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFN0cm9rZUVsbGlwc2U+PiBkZWNvZGUoRGVjb2Rl
ciYpOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4gZ2xvYmFsQm91bmRzKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBXRUJDT1JFX0VY
UE9SVCBTdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+
IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwotCiAg
ICAgRmxvYXRSZWN0IG1fcmVjdDsKIH07CiAKLXRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lk
IFN0cm9rZUVsbGlwc2U6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVu
Y29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8
UmVmPFN0cm9rZUVsbGlwc2U+PiBTdHJva2VFbGxpcHNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLXsKLSAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IHJlY3Q7Ci0gICAgZGVjb2RlciA+PiByZWN0
OwotICAgIGlmICghcmVjdCkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIHJl
dHVybiBTdHJva2VFbGxpcHNlOjpjcmVhdGUoKnJlY3QpOwotfQotCi1jbGFzcyBDbGVhclJlY3Qg
OiBwdWJsaWMgRHJhd2luZ0l0ZW0geworY2xhc3MgQ2xlYXJSZWN0IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPENsZWFyUmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKKyAgICBz
dGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6OkNsZWFyUmVjdDsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNJbmxpbmVJdGVtID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaXNEcmF3aW5nSXRlbSA9IHRydWU7CisKKyAgICBDbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQorICAgICAgICA6IG1fcmVjdChyZWN0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJSZWN0KHJlY3QpKTsKICAgICB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5DbGVhclJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KIAotICAgIEZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRl
eHQmKSBjb25zdDsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8UmVmPENsZWFyUmVjdD4+IGRlY29kZShEZWNvZGVyJik7CisgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBnbG9iYWxCb3VuZHMoKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBP
cHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNv
bnN0IHsgcmV0dXJuIG1fcmVjdDsgfQogCiBwcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIENs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5k
cyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3JlY3Q7
IH0KLQogICAgIEZsb2F0UmVjdCBtX3JlY3Q7CiB9OwogCi10ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgotdm9pZCBDbGVhclJlY3Q6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAg
IGVuY29kZXIgPDwgbV9yZWN0OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgotT3B0aW9u
YWw8UmVmPENsZWFyUmVjdD4+IENsZWFyUmVjdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0OwotICAgIGRlY29kZXIgPj4gcmVjdDsKLSAg
ICBpZiAoIXJlY3QpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4g
Q2xlYXJSZWN0OjpjcmVhdGUoKnJlY3QpOwotfQotCiAjaWYgVVNFKENHKQotY2xhc3MgQXBwbHlT
dHJva2VQYXR0ZXJuIDogcHVibGljIEl0ZW0gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QXBw
bHlTdHJva2VQYXR0ZXJuPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQXBwbHlTdHJva2VQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5BcHBseVN0cm9rZVBhdHRlcm4oKTsKIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEFwcGx5U3Ryb2tlUGF0dGVybj4+IGRlY29kZShEZWNv
ZGVyJik7CitjbGFzcyBBcHBseVN0cm9rZVBhdHRlcm4geworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdGV4cHIgSXRlbVR5cGUgaXRlbVR5cGUgPSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc0RyYXdpbmdJdGVtID0gZmFsc2U7CiAKLXByaXZhdGU6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgQXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAgdm9pZCBhcHBseShH
cmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAg
ICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6
bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBwbHlTdHJv
a2VQYXR0ZXJuOjplbmNvZGUoRW5jb2RlciYpIGNvbnN0Ci17Ci19Ci0KLXRlbXBsYXRlPGNsYXNz
IERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlTdHJva2VQYXR0ZXJuPj4gQXBwbHlTdHJva2VQ
YXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5U3Ryb2tlUGF0dGVy
bjo6Y3JlYXRlKCk7Ci19Ci0KLWNsYXNzIEFwcGx5RmlsbFBhdHRlcm4gOiBwdWJsaWMgSXRlbSB7
CitjbGFzcyBBcHBseUZpbGxQYXR0ZXJuIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEFwcGx5
RmlsbFBhdHRlcm4+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBcHBseUZpbGxQYXR0ZXJuKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IH5BcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBJdGVtVHlwZSBpdGVt
VHlwZSA9IEl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBpc0lubGluZUl0ZW0gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc0Ry
YXdpbmdJdGVtID0gZmFsc2U7CiAKLSAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGlj
IE9wdGlvbmFsPFJlZjxBcHBseUZpbGxQYXR0ZXJuPj4gZGVjb2RlKERlY29kZXImKTsKLQotcHJp
dmF0ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBBcHBseUZpbGxQYXR0ZXJuKCk7CisgICAgdm9pZCBh
cHBseShHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIHZvaWQgYXBwbHkoR3JhcGhpY3ND
b250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCB7IHJldHVybiBXVEY6Om51bGxvcHQ7
IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2JhbEJvdW5kcygpIGNvbnN0IHsgcmV0dXJu
IFdURjo6bnVsbG9wdDsgfQogfTsKIAotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQXBw
bHlGaWxsUGF0dGVybjo6ZW5jb2RlKEVuY29kZXImKSBjb25zdAotewotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotT3B0aW9uYWw8UmVmPEFwcGx5RmlsbFBhdHRlcm4+PiBBcHBseUZpbGxQ
YXR0ZXJuOjpkZWNvZGUoRGVjb2RlciYpCi17Ci0gICAgcmV0dXJuIEFwcGx5RmlsbFBhdHRlcm46
OmNyZWF0ZSgpOwotfQogI2VuZGlmCiAKLWNsYXNzIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IgOiBw
dWJsaWMgSXRlbSB7CitjbGFzcyBBcHBseURldmljZVNjYWxlRmFjdG9yIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+IGNyZWF0ZShmbG9hdCBzY2FsZUZh
Y3RvcikKKyAgICBzdGF0aWMgY29uc3RleHByIEl0ZW1UeXBlIGl0ZW1UeXBlID0gSXRlbVR5cGU6
OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5s
aW5lSXRlbSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0g
PSBmYWxzZTsKKworICAgIEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3Ip
CisgICAgICAgIDogbV9zY2FsZUZhY3RvcihzY2FsZUZhY3RvcikKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IpKTsK
ICAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5BcHBseURldmljZVNjYWxlRmFj
dG9yKCk7Ci0KICAgICBmbG9hdCBzY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVG
YWN0b3I7IH0KIAotICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
UmVmPEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9F
WFBPUlQgQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3Rvcik7CisgICAgT3B0
aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25z
dCB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGdsb2Jh
bEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogCi0gICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fc2NhbGVG
YWN0b3I7Citwcml2YXRlOgorICAgIGZsb2F0IG1fc2NhbGVGYWN0b3IgeyAxIH07CiB9OwogCi10
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBBcHBseURldmljZVNjYWxlRmFjdG9yOjplbmNv
ZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKLXsKLSAgICBlbmNvZGVyIDw8IG1fc2NhbGVGYWN0
b3I7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4+IEFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIE9wdGlvbmFsPGZsb2F0PiBzY2FsZUZhY3RvcjsKLSAgICBkZWNvZGVy
ID4+IHNjYWxlRmFjdG9yOwotICAgIGlmICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcjo6Y3JlYXRl
KCpzY2FsZUZhY3Rvcik7Ci19Ci0KLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEl0ZW0mKTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZv
aWQgSXRlbTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8
PCBtX3R5cGU7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSXRlbVR5cGU6OlNh
dmU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2F2ZT4oKnRoaXMpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSZXN0b3JlOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFJlc3RvcmU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6VHJhbnNsYXRlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFRyYW5zbGF0ZT4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAg
IGVuY29kZXIgPDwgZG93bmNhc3Q8Um90YXRlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNjYWxlOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNjYWxl
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTToKLSAg
ICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldElubGluZUZpbGxHcmFkaWVudD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9yPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
U2V0U3RhdGU+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRMaW5lQ2FwPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVEYXNoOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldExpbmVEYXNoPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OlNldExpbmVKb2luOgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PFNldExpbmVKb2luPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRl
bVR5cGU6OlNldE1pdGVyTGltaXQ6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0TWl0
ZXJMaW1pdD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clNoYWRvdzoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGVhclNoYWRvdz4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwOgotICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PENsaXA+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
dGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGlwT3V0Pigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBPdXRUb1BhdGg6
Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q2xpcE91dFRvUGF0aD4oKnRoaXMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwUGF0aDoKLSAgICAgICAgZW5jb2Rl
ciA8PCBkb3duY2FzdDxDbGlwUGF0aD4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93
bmNhc3Q8Q2xpcFRvRHJhd2luZ0NvbW1hbmRzPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSXRlbVR5cGU6OkRyYXdHbHlwaHM6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8
RHJhd0dseXBocz4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpE
cmF3SW1hZ2U6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RHJhd0ltYWdlPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdUaWxlZEltYWdlPigqdGhpcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdUaWxlZFNjYWxlZEltYWdlPigqdGhpcyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcjoKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3SW1hZ2VCdWZmZXI+KCp0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2ZUltYWdlOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PERyYXdOYXRpdmVJbWFnZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3UGF0dGVybjoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxEcmF3UGF0dGVybj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpEcmF3UmVjdDoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3UmVjdD4oKnRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3TGluZT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgotICAgICAgICBlbmNvZGVyIDw8IGRv
d25jYXN0PERyYXdMaW5lc0ZvclRleHQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6RHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcjoKLSAgICAgICAgZW5jb2RlciA8
PCBkb3duY2FzdDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPigqdGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PERyYXdFbGxpcHNlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkRyYXdQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdQYXRo
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1Jp
bmdQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PERyYXdGb2N1c1JpbmdQYXRoPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdS
ZWN0czoKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxEcmF3Rm9jdXNSaW5nUmVjdHM+KCp0
aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3Q6Ci0gICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFJlY3Q+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoQ29sb3I+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAgIGVuY29kZXIg
PDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PEZpbGxDb21wb3NpdGVkUmVjdD4oKnRoaXMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwg
ZG93bmNhc3Q8RmlsbFJvdW5kZWRSZWN0PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBlbmNvZGVyIDw8
IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigqdGhpcyk7Ci0gICAgICAgIGJyZWFr
OwotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPigq
dGhpcyk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBh
dGg6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGVuY29k
ZXIgPDwgZG93bmNhc3Q8RmlsbEVsbGlwc2U+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PFB1dEltYWdlRGF0YT4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWE6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8UGFpbnRG
cmFtZUZvck1lZGlhPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUmVjdD4oKnRo
aXMpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFN0cm9rZUlubGluZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOgotICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0
PFN0cm9rZVBhdGg+KCp0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlRWxsaXBzZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VFbGxpcHNl
PigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsZWFyUmVjdDoK
LSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxDbGVhclJlY3Q+KCp0aGlzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QmVnaW5UcmFuc3BhcmVuY3lMYXllcjoKLSAgICAg
ICAgZW5jb2RlciA8PCBkb3duY2FzdDxCZWdpblRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgot
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEVuZFRyYW5zcGFyZW5jeUxheWVyPigqdGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIFVTRShDRykKLSAgICBjYXNlIEl0ZW1UeXBlOjpBcHBseVN0
cm9rZVBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlTdHJva2VQYXR0
ZXJuPigqdGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5Rmls
bFBhdHRlcm46Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlGaWxsUGF0dGVybj4o
KnRoaXMpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OkFwcGx5
RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8QXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcj4oKnRoaXMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBs
YXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKQotewotICAgIE9wdGlvbmFsPEl0ZW1UeXBlPiBpdGVtVHlwZTsKLSAgICBk
ZWNvZGVyID4+IGl0ZW1UeXBlOwotICAgIGlmICghaXRlbVR5cGUpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0KLSAgICBzd2l0Y2ggKCppdGVtVHlwZSkgewotICAgIGNhc2UgSXRlbVR5
cGU6OlNhdmU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTYXZlOjpkZWNvZGUoZGVjb2Rlcikp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUo
Kml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6UmVzdG9yZToKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFJlc3RvcmU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpUcmFuc2xhdGU6Ci0gICAgICAgIGlm
IChhdXRvIGl0ZW0gPSBUcmFuc2xhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpSb3RhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBSb3RhdGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTY2FsZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNjYWxlOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6U2V0Q1RNOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0Q1RNOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5h
dGVDVE06Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxHcmFkaWVudDogewotICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmls
bEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKLSAgICAgICAgaWYgKGF1
dG8gaXRlbSA9IFNldElubGluZUZpbGxDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgot
ICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJv
a2VUaGlja25lc3M6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRTdHJva2VUaGlja25lc3M6
OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nh
c3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldFN0YXRlOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
TGluZUNhcDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVDYXA6OmRlY29kZShkZWNv
ZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RG
TW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRMaW5l
RGFzaDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldExpbmVEYXNoOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUpv
aW46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRMaW5lSm9pbjo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldE1pdGVyTGlt
aXQ6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRNaXRlckxpbWl0OjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGVhclNoYWRvdzo6ZGVjb2RlKGRlY29kZXIp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3Zl
KCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXA6Ci0gICAg
ICAgIGlmIChhdXRvIGl0ZW0gPSBDbGlwOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6Q2xpcE91dDoKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IENsaXBPdXQ6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gQ2xpcE91dFRvUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkNsaXBQYXRoOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
Q2xpcFBhdGg6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEl0ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6Ci0gICAgICAgIGlmIChhdXRvIGl0
ZW0gPSBDbGlwVG9EcmF3aW5nQ29tbWFuZHM6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3R2x5cGhzOgotICAgICAgICBpZiAo
YXV0byBpdGVtID0gRHJhd0dseXBoczo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdJbWFnZToKLSAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IERyYXdJbWFnZTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdUaWxlZEltYWdlOgotICAgICAgICBpZiAoYXV0byBp
dGVtID0gRHJhd1RpbGVkSW1hZ2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3VGlsZWRTY2FsZWRJbWFnZToKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IERyYXdUaWxlZFNjYWxlZEltYWdlOjpkZWNvZGUoZGVjb2RlcikpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0
ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVy
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0ltYWdlQnVmZmVyOjpkZWNvZGUoZGVjb2Rl
cikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd05hdGl2
ZUltYWdlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd05hdGl2ZUltYWdlOjpkZWNvZGUo
ZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+
KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJh
d1BhdHRlcm46Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3UGF0dGVybjo6ZGVjb2RlKGRl
Y29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihX
VEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkRyYXdS
ZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd1JlY3Q6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3TGluZToKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5lOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RHJhd0xpbmVzRm9yVGV4dDoKLSAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdMaW5lc0ZvclRleHQ6OmRlY29kZShkZWNvZGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdFbGxpcHNlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRHJhd0Vs
bGlwc2U6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJl
bmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpEcmF3UGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IERyYXdQYXRoOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RHJhd0ZvY3VzUmluZ1BhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBEcmF3Rm9jdXNS
aW5nUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IERyYXdGb2N1c1JpbmdSZWN0czo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0OgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gRmlsbFJlY3Q6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhDb2xvcjoKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IEZpbGxSZWN0V2l0aENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6RmlsbFJlY3RXaXRoR3JhZGllbnQ6Ci0gICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhHcmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVk
UmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxDb21wb3NpdGVkUmVjdDo6ZGVjb2Rl
KGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVt
PihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSb3VuZGVkUmVjdDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxSb3VuZGVkUmVjdDo6
ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2Fz
dDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5
cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gRmls
bFJlY3RXaXRoUm91bmRlZEhvbGU6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsSW5saW5lUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRoOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUGF0aDoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRoOjpk
ZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbEVsbGlwc2U6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsRWxsaXBzZTo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlB1dEltYWdlRGF0YToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFB1dEltYWdlRGF0YTo6ZGVj
b2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlBhaW50RnJhbWVGb3JNZWRpYToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFBhaW50RnJhbWVG
b3JNZWRpYTo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSXRlbVR5cGU6OlN0cm9rZVJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VS
ZWN0OjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCi0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoK
LSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgSXRlbVR5cGU6OlN0
cm9rZVBhdGg6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
RWxsaXBzZToKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUVsbGlwc2U6OmRlY29kZShk
ZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4o
V1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpDbGVh
clJlY3Q6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBDbGVhclJlY3Q6OmRlY29kZShkZWNvZGVy
KSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92
ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpCZWdpblRyYW5z
cGFyZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQmVnaW5UcmFuc3BhcmVuY3lM
YXllcjo6ZGVjb2RlKGRlY29kZXIpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVu
Y2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgotICAgICAgICBpZiAoYXV0byBpdGVtID0g
RW5kVHJhbnNwYXJlbmN5TGF5ZXI6OmRlY29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBi
cmVhazsKLSNpZiBVU0UoQ0cpCi0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJu
OgotICAgICAgICBpZiAoYXV0byBpdGVtID0gQXBwbHlTdHJva2VQYXR0ZXJuOjpkZWNvZGUoZGVj
b2RlcikpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdU
Rk1vdmUoKml0ZW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6QXBwbHlG
aWxsUGF0dGVybjoKLSAgICAgICAgaWYgKGF1dG8gaXRlbSA9IEFwcGx5RmlsbFBhdHRlcm46OmRl
Y29kZShkZWNvZGVyKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2Ug
SXRlbVR5cGU6OkFwcGx5RGV2aWNlU2NhbGVGYWN0b3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBBcHBseURldmljZVNjYWxlRmFjdG9yOjpkZWNvZGUoZGVjb2RlcikpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KK1RleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIEl0ZW1IYW5kbGUpOwogCiB9IC8vIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0KLSNkZWZpbmUgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9EUkFXSU5HSVRFTShUb1ZhbHVlVHlwZU5hbWUs
IHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBvYmplY3QpIHsgcmV0dXJuIG9iamVjdC5wcmVk
aWNhdGU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0RJU1BMQVlMSVNUX0RSQVdJTkdJVEVNKERyYXdpbmdJdGVtLCBpc0RyYXdpbmdJ
dGVtKCkpCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFRvVmFsdWVUeXBlTmFtZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtKSB7IHJldHVybiBpdGVtLnR5
cGUoKSA9PSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRvVmFsdWVUeXBlTmFtZTsg
fSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShTYXZlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFJlc3RvcmUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oVHJhbnNsYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFJv
dGF0ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTY2FsZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRDVE0pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ29uY2F0ZW5hdGVDVE0pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbEdyYWRpZW50KQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZUZpbGxDb2xvcikK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVTdHJva2VD
b2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdHJva2VU
aGlja25lc3MpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3Rh
dGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGluZUNhcCkK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lRGFzaCkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5lSm9pbikKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRNaXRlckxpbWl0KQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsaXApCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xpcE91dCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShDbGlwT3V0VG9QYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKENsaXBQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKENsaXBUb0RyYXdpbmdDb21tYW5kcykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShEcmF3R2x5cGhzKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3VGlsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3VGlsZWRTY2FsZWRJbWFnZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3SW1hZ2VCdWZmZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRHJhd05hdGl2ZUltYWdlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKERyYXdQYXR0ZXJuKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKERyYXdSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKERyYXdMaW5lKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KERyYXdMaW5lc0ZvclRleHQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oRHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShEcmF3RWxsaXBzZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExB
WUxJU1RfSVRFTShEcmF3UGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1Rf
SVRFTShEcmF3Rm9jdXNSaW5nUGF0aCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShEcmF3Rm9jdXNSaW5nUmVjdHMpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oRmlsbFJlY3QpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oRmlsbFJlY3RXaXRoQ29sb3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbFJlY3RXaXRoR3JhZGllbnQpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbENvbXBvc2l0ZWRSZWN0KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEZpbGxSb3VuZGVkUmVjdCkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKLSNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShGaWxsSW5saW5lUGF0aCkKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKEZpbGxQYXRoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxFbGxpcHNlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFB1dEltYWdlRGF0YSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQ
YWludEZyYW1lRm9yTWVkaWEpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oU3Ryb2tlUmVjdCkKLSNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VJbmxpbmVQYXRoKQotI2VuZGlmCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShCZWdpblRyYW5zcGFyZW5jeUxheWVyKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEVuZFRyYW5zcGFyZW5jeUxheWVy
KQotI2lmIFVTRShDRykKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShB
cHBseVN0cm9rZVBhdHRlcm4pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oQXBwbHlGaWxsUGF0dGVybikKLSNlbmRpZgotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQ
TEFZTElTVF9JVEVNKEFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJTaGFkb3cpCi0KIG5hbWVzcGFjZSBXVEYgewogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZT4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDkwMjVh
MzRkYTg2NzNkZmY0Y2RhNjllMzllNzcyZTlkZmUwOGMyZmEuLjJhMDdjMzRmZGQ4NWNjODgwNjk2
YTQwYmI1ZTE1NTI1Nzk3MGE1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUmVjb3JkZXI6On5SZWNvcmRlcigpCiAKIHZvaWQg
UmVjb3JkZXI6OnB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRlc3RQb2lu
dCwgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQogewotICAgIGFw
cGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0
Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkpOworICAg
IGFwcGVuZDxQdXRJbWFnZURhdGE+KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRl
c3RQb2ludCwgZGVzdEZvcm1hdCk7CiB9CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zT25seUlubGlu
ZVN0YXRlQ2hhbmdlcyhjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCkBAIC04
NywyMSArODcsMjEgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2Vz
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBjaGEKIHZvaWQgUmVjb3JkZXI6OmFw
cGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hh
bmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3Mp
CiB7CiAgICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hh
bmdlRmxhZ3MpKSB7Ci0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRTdGF0ZTo6
Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpKTsKKyAgICAgICAgYXBwZW5kPFNl
dFN0YXRlPihjaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0o
U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3Iu
YXNJbmxpbmUoKSkpOworICAgICAgICBhcHBlbmQ8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGNoYW5n
ZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkK
LSAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldFN0cm9rZVRoaWNrbmVzczo6Y3Jl
YXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKKyAgICAgICAgYXBwZW5kPFNl
dFN0cm9rZVRoaWNrbmVzcz4oY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKICAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSkpCi0gICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxs
Q29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuZmlsbENvbG9yLmFzSW5saW5lKCkpKTsKKyAg
ICAgICAgYXBwZW5kPFNldElubGluZUZpbGxDb2xvcj4oY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xv
ci5hc0lubGluZSgpKTsKIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKLSAgICAgICAgbV9kaXNwbGF5TGlzdC5h
cHBlbmRJdGVtKFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKCpjaGFuZ2VzLm1fc3RhdGUu
ZmlsbEdyYWRpZW50KSk7CisgICAgICAgIGFwcGVuZDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCpj
aGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6d2lsbEFw
cGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUgdHlwZSkKQEAgLTEzOSwyNyArMTM5LDI3IEBAIHZvaWQg
UmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhCiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKIHsKLSAg
ICBhcHBlbmRJdGVtKENsZWFyU2hhZG93OjpjcmVhdGUoKSk7CisgICAgYXBwZW5kPENsZWFyU2hh
ZG93PigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkK
IHsKLSAgICBhcHBlbmRJdGVtKFNldExpbmVDYXA6OmNyZWF0ZShsaW5lQ2FwKSk7CisgICAgYXBw
ZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwogfQogCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hBcnJheSwgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBh
cHBlbmRJdGVtKFNldExpbmVEYXNoOjpjcmVhdGUoZGFzaEFycmF5LCBkYXNoT2Zmc2V0KSk7Cisg
ICAgYXBwZW5kPFNldExpbmVEYXNoPihkYXNoQXJyYXksIGRhc2hPZmZzZXQpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKLSAgICBhcHBlbmRJ
dGVtKFNldExpbmVKb2luOjpjcmVhdGUobGluZUpvaW4pKTsKKyAgICBhcHBlbmQ8U2V0TGluZUpv
aW4+KGxpbmVKb2luKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlckxpbWl0KQogewotICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVy
TGltaXQpKTsKKyAgICBhcHBlbmQ8U2V0TWl0ZXJMaW1pdD4obWl0ZXJMaW1pdCk7CiB9CiAKIHZv
aWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CkBAIC0xNjksMTkgKzE2OSwxOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaQogCiBJbWFnZURy
YXdSZXN1bHQgUmVjb3JkZXI6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChEcmF3SW1hZ2U6OmNyZWF0ZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwg
aW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd0ltYWdlPihpbWFnZSwgZGVz
dGluYXRpb24sIHNvdXJjZSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChEcmF3VGls
ZWRJbWFnZTo6Y3JlYXRlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3Bh
Y2luZywgaW1hZ2VQYWludGluZ09wdGlvbnMpKTsKKyAgICBhcHBlbmQ8RHJhd1RpbGVkSW1hZ2U+
KGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpOwogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZFJlY29yZDsKIH0K
IAogSW1hZ2VEcmF3UmVzdWx0IFJlY29yZGVyOjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBj
b25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJ
bWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBh
aW50aW5nT3B0aW9ucykKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdUaWxl
ZFNjYWxlZEltYWdlOjpjcmVhdGUoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTY2Fs
ZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucykpOworICAgIGFwcGVu
ZDxEcmF3VGlsZWRTY2FsZWRJbWFnZT4oaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVT
Y2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CiAgICAgcmV0
dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkUmVjb3JkOwogfQogCkBAIC0xODksMjIgKzE4OSwyMiBA
QCB2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlYwogewogICAgIGltYWdlQnVmZmVyLmZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIobWFrZVJlZihp
bWFnZUJ1ZmZlcikpOwotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd0ltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKSk7CisgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4o
aW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4
dGVudChEcmF3TmF0aXZlSW1hZ2U6OmNyZWF0ZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucykpOworICAgIGFwcGVuZDxEcmF3TmF0aXZlSW1hZ2U+KGltYWdlLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoRHJhd1BhdHRlcm46OmNyZWF0ZShpbWFnZSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucykpOworICAg
IGFwcGVuZDxEcmF3UGF0dGVybj4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpz
YXZlKCkKIHsKLSAgICBhcHBlbmRJdGVtKFNhdmU6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8U2F2
ZT4oKTsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKG1fc3RhdGVTdGFjay5sYXN0KCkuY2xvbmVG
b3JTYXZlKCkpOwogfQogCkBAIC0yMTksMjUgKzIxOSwyNSBAQCB2b2lkIFJlY29yZGVyOjpyZXN0
b3JlKCkKICAgICAvLyBIYXZlIHRvIGF2b2lkIGVsaWRpbmcgbmVzdGVkIFNhdmUvUmVzdG9yZSB3
aGVuIGEgZGVzY2VuZGFudCBzdGF0ZSBjb250YWlucyBkcmF3aW5nIGl0ZW1zLgogICAgIGN1cnJl
bnRTdGF0ZSgpLndhc1VzZWRGb3JEcmF3aW5nIHw9IHN0YXRlVXNlZEZvckRyYXdpbmc7CiAKLSAg
ICBhcHBlbmRJdGVtKFJlc3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBhcHBlbmQ8UmVzdG9yZT4oKTsK
IH0KIAogdm9pZCBSZWNvcmRlcjo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAg
Y3VycmVudFN0YXRlKCkudHJhbnNsYXRlKHgsIHkpOwotICAgIGFwcGVuZEl0ZW0oVHJhbnNsYXRl
OjpjcmVhdGUoeCwgeSkpOworICAgIGFwcGVuZDxUcmFuc2xhdGU+KHgsIHkpOwogfQogCiB2b2lk
IFJlY29yZGVyOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCiB7CiAgICAgY3VycmVudFN0
YXRlKCkucm90YXRlKGFuZ2xlSW5SYWRpYW5zKTsKLSAgICBhcHBlbmRJdGVtKFJvdGF0ZTo6Y3Jl
YXRlKGFuZ2xlSW5SYWRpYW5zKSk7CisgICAgYXBwZW5kPFJvdGF0ZT4oYW5nbGVJblJhZGlhbnMp
OwogfQogCiB2b2lkIFJlY29yZGVyOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAg
ICAgY3VycmVudFN0YXRlKCkuc2NhbGUoc2l6ZSk7Ci0gICAgYXBwZW5kSXRlbShTY2FsZTo6Y3Jl
YXRlKHNpemUpKTsKKyAgICBhcHBlbmQ8U2NhbGU+KHNpemUpOwogfQogCiB2b2lkIFJlY29yZGVy
Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCkBAIC0yNDYsMTMg
KzI0NiwxMyBAQCB2b2lkIFJlY29yZGVyOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIGN1cnJlbnRTdGF0ZSgpLmNvbmNh
dENUTSh0cmFuc2Zvcm0pOwotICAgIGFwcGVuZEl0ZW0oQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSh0
cmFuc2Zvcm0pKTsKKyAgICBhcHBlbmQ8Q29uY2F0ZW5hdGVDVE0+KHRyYW5zZm9ybSk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKICAgICBjdXJyZW50U3RhdGUoKS5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICBhcHBlbmRJdGVt
KFNldENUTTo6Y3JlYXRlKHRyYW5zZm9ybSkpOworICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9y
bSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6SW5jbHVkZURldmljZVNjYWxlKQpAQCAtMjYzLDE1OCArMjYzLDE1OCBAQCBBZmZpbmVUcmFu
c2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkKIAogdm9pZCBSZWNvcmRlcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoQmVnaW5UcmFuc3BhcmVuY3lMYXll
cjo6Y3JlYXRlKG9wYWNpdHkpKTsKKyAgICBhcHBlbmQ8QmVnaW5UcmFuc3BhcmVuY3lMYXllcj4o
b3BhY2l0eSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsK
LSAgICBhcHBlbmRJdGVtKEVuZFRyYW5zcGFyZW5jeUxheWVyOjpjcmVhdGUoKSk7CisgICAgYXBw
ZW5kPEVuZFRyYW5zcGFyZW5jeUxheWVyPigpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBh
cHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdSZWN0OjpjcmVhdGUocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKSk7CisgICAgYXBwZW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KERyYXdMaW5lOjpjcmVhdGUocG9pbnQxLCBwb2ludDIpKTsKKyAgICBhcHBlbmQ8RHJhd0xpbmU+
KHBvaW50MSwgcG9pbnQyKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKIHsKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KERyYXdMaW5lc0ZvclRleHQ6OmNyZWF0ZShGbG9hdFBvaW50KCks
IHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcykpOworICAgIGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7
CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBhcHBl
bmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXI6OmNyZWF0ZShy
ZWN0LCBzdHlsZSkpOworICAgIGFwcGVuZDxEcmF3RG90c0ZvckRvY3VtZW50TWFya2VyPihyZWN0
LCBzdHlsZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdFbGxpcHNlOjpj
cmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxEcmF3RWxsaXBzZT4ocmVjdCk7CiB9CiAKIHZvaWQg
UmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgYXBwZW5kSXRlbUFu
ZFVwZGF0ZUV4dGVudChEcmF3UGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8RHJhd1Bh
dGg+KHBhdGgpOwogfQogCiB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KERyYXdGb2N1c1JpbmdQYXRoOjpjcmVhdGUo
cGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1Bh
dGg+KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBk
YXRlRXh0ZW50KERyYXdGb2N1c1JpbmdSZWN0czo6Y3JlYXRlKHJlY3RzLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcikpOworICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJlY3RzLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxSZWN0Ojpj
cmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsUmVjdD4ocmVjdCk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFJlY3RXaXRoQ29sb3I6OmNy
ZWF0ZShyZWN0LCBjb2xvcikpOworICAgIGFwcGVuZDxGaWxsUmVjdFdpdGhDb2xvcj4ocmVjdCwg
Y29sb3IpOwogfQogCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50
KEZpbGxSZWN0V2l0aEdyYWRpZW50OjpjcmVhdGUocmVjdCwgZ3JhZGllbnQpKTsKKyAgICBhcHBl
bmQ8RmlsbFJlY3RXaXRoR3JhZGllbnQ+KHJlY3QsIGdyYWRpZW50KTsKIH0KIAogdm9pZCBSZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGFwcGVu
ZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbENvbXBvc2l0ZWRSZWN0OjpjcmVhdGUocmVjdCwgY29s
b3IsIG9wLCBibGVuZE1vZGUpKTsKKyAgICBhcHBlbmQ8RmlsbENvbXBvc2l0ZWRSZWN0PihyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxs
Um91bmRlZFJlY3Q6OmNyZWF0ZShyZWN0LCBjb2xvciwgYmxlbmRNb2RlKSk7CisgICAgYXBwZW5k
PEZpbGxSb3VuZGVkUmVjdD4ocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7CiB9CiAKIHZvaWQgUmVj
b3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6Y3JlYXRlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpKTsKKyAgICBhcHBlbmQ8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwogfQog
CiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewogI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgewotICAg
ICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUocGF0
aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgYXBwZW5kPEZpbGxJbmxpbmVQYXRoPihwYXRoLmlu
bGluZURhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBhcHBlbmRJ
dGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxQYXRoOjpjcmVhdGUocGF0aCkpOworICAgIGFwcGVuZDxG
aWxsUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZpbGxFbGxp
cHNlOjpjcmVhdGUocmVjdCkpOworICAgIGFwcGVuZDxGaWxsRWxsaXBzZT4ocmVjdCk7CiB9CiAK
IHZvaWQgUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VSZWN0Ojpj
cmVhdGUocmVjdCwgbGluZVdpZHRoKSk7CisgICAgYXBwZW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxp
bmVXaWR0aCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAocGF0aC5oYXNJbmxp
bmVEYXRhKCkpIHsKLSAgICAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VJbmxp
bmVQYXRoOjpjcmVhdGUocGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgYXBwZW5kPFN0cm9r
ZUlubGluZVBhdGg+KHBhdGguaW5saW5lRGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgotICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlUGF0aDo6Y3JlYXRl
KHBhdGgpKTsKKyAgICBhcHBlbmQ8U3Ryb2tlUGF0aD4ocGF0aCk7CiB9CiAKIHZvaWQgUmVjb3Jk
ZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlRWxsaXBzZTo6Y3JlYXRlKHJlY3QpKTsKKyAgICBhcHBl
bmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChD
bGVhclJlY3Q6OmNyZWF0ZShyZWN0KSk7CisgICAgYXBwZW5kPENsZWFyUmVjdD4ocmVjdCk7CiB9
CiAKICNpZiBVU0UoQ0cpCiB2b2lkIFJlY29yZGVyOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewot
ICAgIGFwcGVuZEl0ZW0oQXBwbHlTdHJva2VQYXR0ZXJuOjpjcmVhdGUoKSk7CisgICAgYXBwZW5k
PEFwcGx5U3Ryb2tlUGF0dGVybj4oKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6YXBwbHlGaWxsUGF0
dGVybigpCiB7Ci0gICAgYXBwZW5kSXRlbShBcHBseUZpbGxQYXR0ZXJuOjpjcmVhdGUoKSk7Cisg
ICAgYXBwZW5kPEFwcGx5RmlsbFBhdHRlcm4+KCk7CiB9CiAjZW5kaWYKIAogdm9pZCBSZWNvcmRl
cjo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgY3VycmVudFN0YXRlKCkuY2xp
cEJvdW5kcy5pbnRlcnNlY3QocmVjdCk7Ci0gICAgYXBwZW5kSXRlbShDbGlwOjpjcmVhdGUocmVj
dCkpOworICAgIGFwcGVuZDxDbGlwPihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcE91
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgYXBwZW5kSXRlbShDbGlwT3V0OjpjcmVh
dGUocmVjdCkpOworICAgIGFwcGVuZDxDbGlwT3V0PihyZWN0KTsKIH0KIAogdm9pZCBSZWNvcmRl
cjo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGFwcGVuZEl0ZW0oQ2xpcE91dFRv
UGF0aDo6Y3JlYXRlKHBhdGgpKTsKKyAgICBhcHBlbmQ8Q2xpcE91dFRvUGF0aD4ocGF0aCk7CiB9
CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdp
bmRSdWxlKQogewogICAgIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMuaW50ZXJzZWN0KHBhdGgu
ZmFzdEJvdW5kaW5nUmVjdCgpKTsKLSAgICBhcHBlbmRJdGVtKENsaXBQYXRoOjpjcmVhdGUocGF0
aCwgd2luZFJ1bGUpKTsKKyAgICBhcHBlbmQ8Q2xpcFBhdGg+KHBhdGgsIHdpbmRSdWxlKTsKIH0K
IAogSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpCkBAIC00NDIsMTkgKzQ0MiwxOSBAQCB2
b2lkIFJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgQ29sb3JTcGFjZSBjbwogCiAgICAgYXV0byByZWNvcmRpbmdDb250ZXh0ID0gbWFr
ZVVuaXF1ZTxEcmF3aW5nQ29udGV4dD4oZGVzdGluYXRpb24uc2l6ZSgpLCBpbml0aWFsQ1RNKTsK
ICAgICBkcmF3aW5nRnVuY3Rpb24ocmVjb3JkaW5nQ29udGV4dC0+Y29udGV4dCgpKTsKLSAgICBh
cHBlbmRJdGVtKENsaXBUb0RyYXdpbmdDb21tYW5kczo6Y3JlYXRlKGRlc3RpbmF0aW9uLCBjb2xv
clNwYWNlLCByZWNvcmRpbmdDb250ZXh0LT50YWtlRGlzcGxheUxpc3QoKSkpOworICAgIGFwcGVu
ZDxDbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCByZWNvcmRp
bmdDb250ZXh0LT50YWtlRGlzcGxheUxpc3QoKSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQogewotICAgIGFwcGVuZEl0ZW0oUGFpbnRGcmFtZUZvck1lZGlhOjpjcmVhdGUocGxh
eWVyLCBkZXN0aW5hdGlvbikpOworICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXll
ciwgZGVzdGluYXRpb24pOwogfQogCiB2b2lkIFJlY29yZGVyOjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIC8vIEZJWE1FOiB0aGlzIGNoYW5n
ZXMgdGhlIGJhc2VDVE0sIHdoaWNoIHdpbGwgaW52YWxpZGF0ZSBhbGwgb2Ygb3VyIGNhY2hlZCBl
eHRlbnRzLgogICAgIC8vIEFzc2VydCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgZWFybHkgb24/Ci0g
ICAgYXBwZW5kSXRlbShBcHBseURldmljZVNjYWxlRmFjdG9yOjpjcmVhdGUoZGV2aWNlU2NhbGVG
YWN0b3IpKTsKKyAgICBhcHBlbmQ8QXBwbHlEZXZpY2VTY2FsZUZhY3Rvcj4oZGV2aWNlU2NhbGVG
YWN0b3IpOwogfQogCiBGbG9hdFJlY3QgUmVjb3JkZXI6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKQEAgLTQ2
MywzMCArNDYzLDYgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjoKICAgICByZXR1cm4gcmVjdDsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6YXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChSZWY8RHJhd2lu
Z0l0ZW0+JiYgaXRlbSkKLXsKLSAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGl0ZW0uZ2V0KCk7
Ci0gICAgYXBwZW5kSXRlbShXVEZNb3ZlKGl0ZW0pKTsKLSAgICB1cGRhdGVJdGVtRXh0ZW50KG5l
d0l0ZW0pOwotfQotCi12b2lkIFJlY29yZGVyOjphcHBlbmRJdGVtKFJlZjxJdGVtPiYmIGl0ZW0p
Ci17Ci0gICAgSXRlbSYgbmV3SXRlbSA9IGl0ZW0uZ2V0KCk7Ci0gICAgYXV0byB0eXBlID0gbmV3
SXRlbS50eXBlKCk7Ci0gICAgd2lsbEFwcGVuZEl0ZW1PZlR5cGUodHlwZSk7Ci0gICAgbV9kaXNw
bGF5TGlzdC5hcHBlbmQoV1RGTW92ZShpdGVtKSk7Ci0gICAgZGlkQXBwZW5kSXRlbU9mVHlwZSh0
eXBlKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6dXBkYXRlSXRlbUV4dGVudChEcmF3aW5nSXRlbSYg
aXRlbSkgY29uc3QKLXsKLSAgICBpZiAoT3B0aW9uYWw8RmxvYXRSZWN0PiByZWN0ID0gaXRlbS5s
b2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCi0gICAgICAgIGl0ZW0uc2V0RXh0ZW50KGV4
dGVudEZyb21Mb2NhbEJvdW5kcyhyZWN0LnZhbHVlKCkpKTsKLSAgICBlbHNlIGlmIChPcHRpb25h
bDxGbG9hdFJlY3Q+IHJlY3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQotICAgICAgICBpdGVtLnNl
dEV4dGVudChyZWN0LnZhbHVlKCkpOwotfQotCiAvLyBGSVhNRTogc2hhcmUgd2l0aCBTaGFkb3dE
YXRhCiBzdGF0aWMgaW5saW5lIGZsb2F0IHNoYWRvd1BhaW50aW5nRXh0ZW50KGZsb2F0IGJsdXJS
YWRpdXMpCiB7CkBAIC01MDYsNyArNDgyLDcgQEAgRmxvYXRSZWN0IFJlY29yZGVyOjpleHRlbnRG
cm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogICAgIGZsb2F0IHNo
YWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKICAgICBpZiAoZ3JhcGhpY3NDb250
ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikp
IHsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudD0gYm91bmRzOworICAgICAgICBGbG9h
dFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwogICAgICAgICBzaGFkb3dFeHRlbnQubW92ZShz
aGFkb3dPZmZzZXQpOwogICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFkb3dQYWludGlu
Z0V4dGVudChzaGFkb3dSYWRpdXMpKTsKICAgICAgICAgYm91bmRzLnVuaXRlKHNoYWRvd0V4dGVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA3Yjg2MTNjNWYy
OTYzMWU1ZGU5NDM5NDMzMmQ4OWRmZDUzZjMxZmRkLi5mOTUxY2ZhYTJjYWNjOTZkNGMxYTE4YTI1
ZmE1ODk2MDc5MjI0NmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAi
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEl0
ZW1zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgogI2luY2x1ZGUgIkltYWdl
LmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCkBAIC00
OCw4ICs0OSw2IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIAotY2xhc3MgRHJhd2luZ0l0ZW07Ci0KIGNsYXNzIFJlY29yZGVyIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dEltcGwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKQEAgLTE0NywxNSArMTQ2LDM0IEBA
IHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIGFwcGVuZEl0ZW0oUmVmPEl0ZW0+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNs
YXNzLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCisgICAgeworICAg
ICAgICB3aWxsQXBwZW5kSXRlbU9mVHlwZShUOjppdGVtVHlwZSk7CisgICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIGRp
ZEFwcGVuZEl0ZW1PZlR5cGUoVDo6aXRlbVR5cGUpOworCisgICAgICAgIGlmICghVDo6aXNEcmF3
aW5nSXRlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoTElLRUxZKCFtX2Rp
c3BsYXlMaXN0LnRyYWNrc0RyYXdpbmdJdGVtRXh0ZW50cygpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CisgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4
dCgpKSkKKyAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoZXh0
ZW50RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CisgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9
IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCisgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdp
bmdJdGVtRXh0ZW50KCpyZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kaXNwbGF5
TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChXVEY6Om51bGxvcHQpOworICAgIH0KKwogICAgIHZv
aWQgd2lsbEFwcGVuZEl0ZW1PZlR5cGUoSXRlbVR5cGUpOwogICAgIHZvaWQgZGlkQXBwZW5kSXRl
bU9mVHlwZShJdGVtVHlwZSk7Ci0gICAgdm9pZCBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFJl
ZjxEcmF3aW5nSXRlbT4mJik7CiAKICAgICB2b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKTsKIAogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJ
dGVtJikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25z
dDsKICAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmNwcAppbmRleCA4Mjg4MzgwNDMxYTI5MGMwNDBjMTlk
MWFlZWNlOTQyNGZmNTc3MzVhLi5lNDZlNTY4OTVkNGMzNWY3ZTIxMTRmODAyMTQ5NTY4MjI3YmRl
OGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwCkBAIC00NCwx
OCArNDQsMTggQEAgUmVwbGF5ZXI6OlJlcGxheWVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb24KIAogUmVwbGF5ZXI6On5SZXBsYXll
cigpID0gZGVmYXVsdDsKIAotdm9pZCBSZXBsYXllcjo6YXBwbHlJdGVtKEl0ZW0mIGl0ZW0pCit2
b2lkIFJlcGxheWVyOjphcHBseUl0ZW0oSXRlbUhhbmRsZSBpdGVtKQogewogICAgIGlmIChtX2Rl
bGVnYXRlICYmIG1fZGVsZWdhdGUtPmFwcGx5KGl0ZW0sIG1fY29udGV4dCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBpZiAoaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6OkRyYXdJbWFnZUJ1
ZmZlcikgewotICAgICAgICBhdXRvJiBkcmF3SXRlbSA9IHN0YXRpY19jYXN0PERyYXdJbWFnZUJ1
ZmZlciY+KGl0ZW0pOworCisgICAgaWYgKGl0ZW0uaXM8RHJhd0ltYWdlQnVmZmVyPigpKSB7Cisg
ICAgICAgIGF1dG8mIGRyYXdJdGVtID0gaXRlbS5nZXQ8RHJhd0ltYWdlQnVmZmVyPigpOwogICAg
ICAgICBpZiAoYXV0byogaW1hZ2VCdWZmZXIgPSBtX2ltYWdlQnVmZmVycy5nZXQoZHJhd0l0ZW0u
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCkpKQogICAgICAgICAgICAgZHJhd0l0ZW0uYXBw
bHkobV9jb250ZXh0LCAqaW1hZ2VCdWZmZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IAorCiAgICAgaXRlbS5hcHBseShtX2NvbnRleHQpOwogfQogCkBAIC02OCwyNSArNjgsMjUgQEAg
c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBSZXBsYXllcjo6cmVwbGF5KGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGJvb2wKICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0
KSkKICAgICAgICAgcmVwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q+KCk7CiAKLSAg
ICBhdXRvJiBpdGVtcyA9IG1fZGlzcGxheUxpc3QubGlzdCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byYgaXRlbSA9IGl0ZW1z
W2ldLmdldCgpOwotCi0gICAgICAgIGlmICghaW5pdGlhbENsaXAuaXNaZXJvKCkgJiYgaXM8RHJh
d2luZ0l0ZW0+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBjb25zdCBEcmF3aW5nSXRlbSYgZHJhd2lu
Z0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZHJh
d2luZ0l0ZW0uZXh0ZW50S25vd24oKSAmJiAhZHJhd2luZ0l0ZW0uZXh0ZW50KCkuaW50ZXJzZWN0
cyhpbml0aWFsQ2xpcCkpIHsKLSAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxh
eUxpc3RzLCBzdHJlYW0gPDwgInNraXBwaW5nICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIHNpemVfdCBpID0gMDsKKyNlbmRpZgorICAgIGZvciAoYXV0byBbaXRlbSwgZXh0ZW50XSA6
IG1fZGlzcGxheUxpc3QpIHsKKyAgICAgICAgaWYgKCFpbml0aWFsQ2xpcC5pc1plcm8oKSAmJiBl
eHRlbnQgJiYgIWV4dGVudC0+aW50ZXJzZWN0cyhpbml0aWFsQ2xpcCkpIHsKKyAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAic2tpcHBpbmcgIiA8PCBp
KysgPDwgIiAiIDw8IGl0ZW0pOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAog
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgImFwcGx5aW5n
ICIgPDwgaSA8PCAiICIgPDwgaXRlbSk7CiAgICAgICAgIGFwcGx5SXRlbShpdGVtKTsKIAotICAg
ICAgICBpZiAoVU5MSUtFTFkodHJhY2tSZXBsYXlMaXN0KSkKLSAgICAgICAgICAgIHJlcGxheUxp
c3QtPmFwcGVuZEl0ZW0oY29uc3RfY2FzdDxJdGVtJj4oaXRlbSkpOworICAgICAgICBpZiAoVU5M
SUtFTFkodHJhY2tSZXBsYXlMaXN0KSkgeworICAgICAgICAgICAgcmVwbGF5TGlzdC0+YXBwZW5k
KGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW0uaXNEcmF3aW5nSXRlbSgpKQorICAgICAgICAg
ICAgICAgIHJlcGxheUxpc3QtPmFkZERyYXdpbmdJdGVtRXh0ZW50KFdURk1vdmUoZXh0ZW50KSk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVwbGF5TGlzdDsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlcGxheWVyLmgKaW5kZXggZGM3NGY3ZDY3YTEzNmZl
Njk2NDY5MGFkMWMwNTljMDE2MmFmNjU0ZC4uOTJlYzY4ODljMzVlZjg2ZDNmOWU5NGJlYzY2NmU3
YTc4YWU1OTdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZXBsYXllci5oCkBAIC01
MCwxMSArNTAsMTEgQEAgcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgfkRlbGVnYXRlKCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBh
cHBseShJdGVtJiwgR3JhcGhpY3NDb250ZXh0JikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGFwcGx5KEl0ZW1IYW5kbGUsIEdyYXBoaWNzQ29udGV4dCYpIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgfTsKICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBseUl0ZW0oSXRl
bSYpOworICAgIHZvaWQgYXBwbHlJdGVtKEl0ZW1IYW5kbGUpOwogICAgIAogICAgIEdyYXBoaWNz
Q29udGV4dCYgbV9jb250ZXh0OwogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBtX2Rpc3BsYXlMaXN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXIuaAppbmRleCBjYjYxYWQyNjE3YzlkYzQyOTE4ZTM2NjA1MWI4ZDcwMTZjNjhkNmFj
Li43OGE0NzIzZWExMTI3N2FkNmFjMmM2MmYxMTk2MDgwNDI4ZTMxZmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApA
QCAtMjcsMTQgKzI3LDE3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRl
ICJEZWNvZGVyLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgotY2xhc3MgUmVtb3RlSW1hZ2VC
dWZmZXIgOiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4s
IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHsKK2NsYXNz
IFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxl
Z2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyUmVhZGluZ0NsaWVu
dCB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0
ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNr
ZW5kOwpAQCAtNzEsMTAgKzc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBib29sIGFwcGx5KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIG92ZXJyaWRlCisgICAgYm9vbCBhcHBseShXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZSBpdGVtLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBpZiAoaXRlbS50eXBlKCkgPT0gV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQdXRJbWFnZURhdGEpIHsKLSAgICAgICAgICAg
IGF1dG8mIHB1dEltYWdlRGF0YUl0ZW0gPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UHV0SW1hZ2VEYXRhJj4oaXRlbSk7CisgICAgICAgIGlmIChpdGVtLmlzPFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpQdXRJbWFnZURhdGE+KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIHB1dEltYWdl
RGF0YUl0ZW0gPSBpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UHV0SW1hZ2VEYXRhPigp
OwogICAgICAgICAgICAgcHV0SW1hZ2VEYXRhKHB1dEltYWdlRGF0YUl0ZW0uaW5wdXRGb3JtYXQo
KSwgcHV0SW1hZ2VEYXRhSXRlbS5pbWFnZURhdGEoKSwgcHV0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0
KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdFBvaW50KCksIHB1dEltYWdlRGF0YUl0ZW0uZGVzdEZv
cm1hdCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC04Miw2ICs4
NSwxMTQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5hcHBseU1lZGlhSXRlbShpdGVtLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICBPcHRpb25hbDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUhhbmRsZT4gV0FSTl9VTlVTRURfUkVUVVJOIGRlY29k
ZUl0ZW0oY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCwgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlIHR5cGUsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpDbGlwUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVh
dGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBQYXRoPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxv
Y2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNs
aXBUb0RyYXdpbmdDb21tYW5kczoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGF0YSwgbGVuZ3Ro
LCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRD
cmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdQYXRoPihkYXRhLCBsZW5n
dGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdGb2N1c1JpbmdSZWN0czoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVB
bmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oZGF0YSwg
bGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENy
ZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBocz4oZGF0YSwgbGVuZ3RoLCBoYW5k
bGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpEcmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3SW1hZ2U+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0xpbmVzRm9y
VGV4dDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdMaW5lc0ZvclRleHQ+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd05hdGl2ZUlt
YWdlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd05hdGl2ZUltYWdlPihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdQYXRoOgorICAg
ICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d1BhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd1BhdHRlcm46CisgICAgICAgICAgICByZXR1
cm4gZGVjb2RlQW5kQ3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oZGF0
YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdUaWxlZEltYWdlPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkRyYXdUaWxlZFNjYWxlZEltYWdlOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+
KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OgorICAgICAgICAgICAgcmV0
dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbENvbXBvc2l0ZWRS
ZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxQYXRoOgorICAgICAgICAgICAgcmV0dXJuIGRl
Y29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg+KGRhdGEsIGxlbmd0
aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RmlsbFJlY3RXaXRoQ29sb3I6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlQW5k
Q3JlYXRlPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oZGF0YSwgbGVu
Z3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAgICAgICAgICAgIHJldHVybiBkZWNv
ZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxSZWN0V2l0aEdyYWRpZW50Pihk
YXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgorICAgICAgICAgICAg
cmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAgICAgICBjYXNl
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0OgorICAgICAg
ICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJv
dW5kZWRSZWN0PihkYXRhLCBsZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YToKKyAgICAgICAgICAg
IHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0
YT4oZGF0YSwgbGVuZ3RoLCBoYW5kbGVMb2NhdGlvbik7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAgICAgIHJldHVybiBk
ZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldExpbmVEYXNoPihkYXRhLCBs
ZW5ndGgsIGhhbmRsZUxvY2F0aW9uKTsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OlNldFN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZUFuZENyZWF0
ZTxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9j
YXRpb24pOworICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVBbmRDcmVhdGU8V2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlN0cm9rZVBhdGg+KGRhdGEsIGxlbmd0aCwgaGFuZGxlTG9jYXRpb24pOworICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcjoKKyNpZiBVU0UoQ0cpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpBcHBseUZpbGxQYXR0ZXJuOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6QXBwbHlTdHJva2VQYXR0ZXJuOgorI2VuZGlmCisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpCZWdpblRyYW5zcGFyZW5jeUxheWVy
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJSZWN0
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xlYXJTaGFk
b3c6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwOgor
ICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xpcE91dDoKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcjoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkRyYXdFbGxpcHNlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RHJhd0ltYWdlQnVmZmVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6RHJhd0xpbmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpEcmF3UmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkVuZFRyYW5zcGFyZW5jeUxheWVyOgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CisjaWYgRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpG
aWxsSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6RmlsbFJlY3Q6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpQYWludEZyYW1lRm9yTWVkaWE6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpSZXN0b3JlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6Um90YXRlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2F2ZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlNjYWxlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0Q1RNOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwOgorICAgICAgICBj
YXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0TGluZUpvaW46CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRNaXRlckxpbWl0OgorICAg
ICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tu
ZXNzOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tl
RWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisjZW5kaWYKKyAg
ICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3Q6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpUcmFuc2xhdGU6IHsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlPiBXQVJOX1VO
VVNFRF9SRVRVUk4gZGVjb2RlQW5kQ3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QqIGhhbmRsZUxvY2F0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8g
aXRlbSA9IElQQzo6RGVjb2Rlcjo6ZGVjb2RlU2luZ2xlT2JqZWN0PFQ+KGRhdGEsIGxlbmd0aCkp
IHsKKyAgICAgICAgICAgIG5ldyAoaGFuZGxlTG9jYXRpb24gKyBzaXplb2YoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlKSkgVChXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgICAgICByZXR1
cm4ge3sgaGFuZGxlTG9jYXRpb24gfX07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICB9CisKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kJiBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggYjZlZjI0
ZWQ3M2U0YmEyYmNlM2VhMjRkNjM3M2QzZjgzNDVhNmQ5Zi4uMjMzNDM2ZTBhMjFkZmVjMWM4OGFh
ODI5OWU4OTc1OTk0ZTE1NDFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsMTMg
KzcyLDEyIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci50b1VJbnQ2NCgpOwogfQogCi1ib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5
TWVkaWFJdGVtKGNvbnN0IERpc3BsYXlMaXN0OjpJdGVtJiBpdGVtLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmFwcGx5TWVkaWFJdGVtKERp
c3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0sIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAoaXRlbS50eXBlKCkgIT0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpQ
YWludEZyYW1lRm9yTWVkaWEpCisgICAgaWYgKCFpdGVtLmlzPERpc3BsYXlMaXN0OjpQYWludEZy
YW1lRm9yTWVkaWE+KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIG1lZGlh
SXRlbSA9IHN0YXRpY19jYXN0PGNvbnN0IERpc3BsYXlMaXN0OjpQYWludEZyYW1lRm9yTWVkaWEm
PihpdGVtKTsKLQorICAgIGF1dG8mIG1lZGlhSXRlbSA9IGl0ZW0uZ2V0PERpc3BsYXlMaXN0OjpQ
YWludEZyYW1lRm9yTWVkaWE+KCk7CiAgICAgYXV0byBwcm9jZXNzID0gZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcygpOwogICAgIGlmICghcHJvY2VzcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTI1LDE5ICsxMjQsNDUgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW4KICAgICBtX3JlbW90
ZVJlc291cmNlQ2FjaGUuY2FjaGVJbWFnZUJ1ZmZlcihtYWtlUmVmKCppbWFnZUJ1ZmZlcikpOwog
fQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3QoY29uc3Qg
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6YXBwbHlEaXNwbGF5TGlzdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRs
ZSYgaGFuZGxlLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyLCBTaG91bGRGbHVzaENvbnRleHQgZmx1c2hDb250ZXh0KQogewotICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVy
KHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikpCi0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVz
aERpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KTsKKyAgICBhdXRvIGRpc3BsYXlMaXN0ID0gaGFuZGxl
LmNyZWF0ZURpc3BsYXlMaXN0KFsmXSAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyIGlkZW50aWZpZXIpIC0+IHVpbnQ4X3QqIHsKKyAgICAgICAgaWYgKGF1dG8gc2hh
cmVkTWVtb3J5ID0gbV9zaGFyZWRJdGVtQnVmZmVycy50YWtlKGlkZW50aWZpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZE1lbW9yeS0+ZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSk7CisKKyAgICBpZiAoIWRpc3Bs
YXlMaXN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgYSBtZXNzYWdlIGNoZWNrIHRvIHRlcm1p
bmF0ZSB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gbV9yZW1vdGVSZXNvdXJjZUNhY2hlLmNhY2hlZEltYWdlQnVmZmVyKHJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcik7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikgeworICAg
ICAgICAvLyBGSVhNRTogQWRkIGEgbWVzc2FnZSBjaGVjayB0byB0ZXJtaW5hdGUgdGhlIHdlYiBw
cm9jZXNzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGltYWdlQnVmZmVyLT5p
c0FjY2VsZXJhdGVkKCkpCisgICAgICAgIGRpc3BsYXlMaXN0LT5zZXRJdGVtQnVmZmVyQ2xpZW50
KHN0YXRpY19jYXN0PEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXIqPihpbWFnZUJ1ZmZlcikp
OworICAgIGVsc2UKKyAgICAgICAgZGlzcGxheUxpc3QtPnNldEl0ZW1CdWZmZXJDbGllbnQoc3Rh
dGljX2Nhc3Q8VW5hY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVyKj4oaW1hZ2VCdWZmZXIpKTsK
KworICAgIGltYWdlQnVmZmVyLT5mbHVzaERpc3BsYXlMaXN0KCpkaXNwbGF5TGlzdCk7CisKKyAg
ICBpZiAoZmx1c2hDb250ZXh0ID09IFNob3VsZEZsdXNoQ29udGV4dDo6WWVzKQorICAgICAgICBp
bWFnZUJ1ZmZlci0+Zmx1c2hDb250ZXh0KCk7CiB9CiAKLXZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0LCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50
aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50
aWZpZXIpCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZsdXNoRGlzcGxheUxpc3QoY29u
c3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUmIGhhbmRsZSwgUmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoYXV0byBpbWFn
ZUJ1ZmZlciA9IG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5mbHVzaERpc3Bs
YXlMaXN0KGRpc3BsYXlMaXN0KTsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoQ29udGV4dCgp
OwotICAgICAgICBmbHVzaERpc3BsYXlMaXN0V2FzQ29tbWl0dGVkKGZsdXNoSWRlbnRpZmllciwg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKLSAgICB9CisgICAgYXBwbHlEaXNwbGF5TGlz
dChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250ZXh0
OjpObyk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hEaXNwbGF5TGlz
dEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZSYgaGFuZGxlLCBEaXNwbGF5
TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIsIFJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCit7CisgICAgYXBwbHlEaXNwbGF5
TGlzdChoYW5kbGUsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgU2hvdWxkRmx1c2hDb250
ZXh0OjpZZXMpOworICAgIGZsdXNoRGlzcGxheUxpc3RXYXNDb21taXR0ZWQoZmx1c2hJZGVudGlm
aWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgSW50UmVjdCBzcmNSZWN0LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VE
YXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpAQCAtMTUzLDYgKzE3OCwxMiBA
QCB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VSZW1vdGVSZXNvdXJjZShSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcgogICAgIG1fcmVtb3RlUmVzb3VyY2VDYWNoZS5yZWxl
YXNlUmVtb3RlUmVzb3VyY2UocmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIH0KIAordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShEaXNwbGF5
TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5
OjpJUENIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBpZiAoYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6Om1hcChoYW5kbGUuaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb246OlJl
YWRPbmx5KSkKKyAgICAgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5zZXQoaWRlbnRpZmllciwgV1RG
TW92ZShzaGFyZWRNZW1vcnkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCAzZGY2Zjc3
NGUxNTIxYjgxNGI3YjZjNWMyMDNiMjc2NWM2YWM3OTBmLi44MjFjMzQxOGI4MDUxZTdkMzcxY2Jm
MWQ5NDVhZWU2OWQ0MGI0ZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTM1LDcgKzM1LDkg
QEAKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVzb3VyY2VD
YWNoZS5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3Bh
Y2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtNjQs
NyArNjYsNyBAQCBwdWJsaWM6CiAgICAgUmVtb3RlUmVzb3VyY2VDYWNoZSYgcmVtb3RlUmVzb3Vy
Y2VDYWNoZSgpIHsgcmV0dXJuIG1fcmVtb3RlUmVzb3VyY2VDYWNoZTsgfQogCiAgICAgLy8gUmVu
ZGVyaW5nIG9wZXJhdGlvbnMuCi0gICAgYm9vbCBhcHBseU1lZGlhSXRlbShjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6SXRlbSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIGJv
b2wgYXBwbHlNZWRpYUl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1IYW5kbGUsIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4KICAg
ICB2b2lkIGltYWdlQnVmZmVyQmFja2VuZFdhc0NyZWF0ZWQoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwpAQCAtNzMs
NiArNzUsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
IAorICAgIGVudW0gY2xhc3MgU2hvdWxkRmx1c2hDb250ZXh0IDogYm9vbCB7IE5vLCBZZXMgfTsK
KyAgICB2b2lkIGFwcGx5RGlzcGxheUxpc3QoY29uc3QgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUm
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIsIFNob3VsZEZsdXNoQ29udGV4
dCk7CisKICAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVpbnQ2NF90IG1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC04MywxNCArODgs
MTYgQEAgcHJpdmF0ZToKIAogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkLgogICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAg
IHZvaWQgZmx1c2hEaXNwbGF5TGlzdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwotICAgIHZvaWQg
Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmLCBEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5n
UmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB2b2lkIGZsdXNoRGlzcGxheUxpc3QoY29uc3QgU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGUmLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworICAgIHZvaWQgZmx1c2hEaXNwbGF5TGlzdEFuZENvbW1pdChjb25zdCBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZSYsIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyLCBXZWJDb3JlOjpSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNy
Y1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChJUEM6OkltYWdlRGF0YVJlZmVyZW5jZSYmKT4mJik7CiAgICAgdm9pZCByZWxl
YXNlUmVtb3RlUmVzb3VyY2UoV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsK
KyAgICB2b2lkIGRpZENyZWF0ZVNoYXJlZEl0ZW1EYXRhKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySWRlbnRpZmllciwgY29uc3QgU2hhcmVkTWVtb3J5OjpJUENIYW5kbGUmKTsKIAog
ICAgIFJlbW90ZVJlc291cmNlQ2FjaGUgbV9yZW1vdGVSZXNvdXJjZUNhY2hlOwogICAgIFdlYWtQ
dHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OwogICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXI7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50
aWZpZXIsIFJlZlB0cjxTaGFyZWRNZW1vcnk+PiBtX3NoYXJlZEl0ZW1CdWZmZXJzOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluCmluZGV4IGE4OGUwZmI2MjYyNDkxODlkOGY1YjNhMzliOWI2NjQyODYyMmNhZDMuLmJiOTE1
YWIxOTVhZDM3NzcyMGI2OTE1MGEzYmVjMGM5OTNjNWFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0yMywxMSArMjMsMTIgQEAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291
bnRlZCB7Ci0gICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9n
aWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCi0g
ICAgdm9pZCBGbHVzaERpc3BsYXlMaXN0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCBkaXNwbGF5TGlzdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RBbmRDb21t
aXQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6
OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6UmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikKKyAg
ICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5
TGlzdChXZWJLaXQ6OlNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIGRpc3BsYXlMaXN0LCBXZWJDb3Jl
OjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQorICAgIEZsdXNoRGlzcGxheUxpc3RBbmRDb21taXQoV2ViS2l0OjpTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZSBkaXNwbGF5TGlzdCwgV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBm
bHVzaElkZW50aWZpZXIsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCiAgICAgR2V0SW1hZ2VEYXRhKGVudW06dWludDhfdCBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgV2ViQ29yZTo6SW50
UmVjdCBzcmNSZWN0LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoSVBDOjpJbWFnZURhdGFSZWZlcmVuY2UgaW1hZ2VE
YXRhKSBTeW5jaHJvbm91cwotICAgIHZvaWQgUmVsZWFzZVJlbW90ZVJlc291cmNlKFdlYkNvcmU6
OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIp
CisgICAgRGlkQ3JlYXRlU2hhcmVkSXRlbURhdGEoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1C
dWZmZXJJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpJUENIYW5k
bGUgaGFuZGxlKQorICAgIFJlbGVhc2VSZW1vdGVSZXNvdXJjZShXZWJDb3JlOjpSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKaW5kZXggYzFhZTk2YzdjYTI5NWMzZTVlYmViNzViM2MzYzM0MjY5NTE0MTc0MC4u
MTI0ZjQ4ZjFjNDFhZmZmZTM2Y2RkMzUyYjRiOWQxYjg4YjEwMzk3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yMDgsNiArMjA4LDcgQEAgZGVmIHR5cGVz
X3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1N0cmluZycsCiAg
ICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRpY3RhdGlv
bkNvbnRleHQnLAorICAgICAgICAnV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdzJywKICAgICAg
ICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1
bWVudE9yV29ya2VySWRlbnRpZmllcicsCkBAIC01ODcsNiArNTg4LDcgQEAgZGVmIGhlYWRlcnNf
Zm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdKU0M6Ok1lc3NhZ2VTb3VyY2UnOiBbJzxKYXZhU2Ny
aXB0Q29yZS9Db25zb2xlVHlwZXMuaD4nXSwKICAgICAgICAgJ0luc3BlY3Rvcjo6SW5zcGVjdG9y
VGFyZ2V0VHlwZSc6IFsnPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclRhcmdldC5oPiddLAogICAg
ICAgICAnSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWw6OkNvbm5lY3Rpb25UeXBlJzogWyc8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+J10sCisgICAgICAgICdXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXInOiBbJzxXZWJDb3JlL0Rpc3Bs
YXlMaXN0Lmg+J10sCiAgICAgICAgICdNZWRpYVRpbWUnOiBbJzx3dGYvTWVkaWFUaW1lLmg+J10s
CiAgICAgICAgICdNb25vdG9uaWNUaW1lJzogWyc8d3RmL01vbm90b25pY1RpbWUuaD4nXSwKICAg
ICAgICAgJ1NlY29uZHMnOiBbJzx3dGYvU2Vjb25kcy5oPiddLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhYTc0ZDYx
NWFiZDNmNGEzMTg2MjUyZmYwZmRjYjg3MWU3MGZhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaGFyZWRE
aXNwbGF5TGlzdEhhbmRsZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitTaGFyZWREaXNwbGF5TGlzdEhhbmRsZTo6U2hhcmVkRGlzcGxheUxpc3RI
YW5kbGUoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAg
ICBkaXNwbGF5TGlzdC5mb3JFYWNoSXRlbUJ1ZmZlcihbJl0gKGF1dG8mIGhhbmRsZSkgeworICAg
ICAgICBtX2J1ZmZlcnMuYXBwZW5kKHsgaGFuZGxlLmlkZW50aWZpZXIsIGhhbmRsZS5jYXBhY2l0
eSB9KTsKKyAgICB9KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdD4gU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmNyZWF0ZURpc3BsYXlMaXN0KEl0ZW1CdWZm
ZXJQcm92aWRlciYmIGJ1ZmZlclByb3ZpZGVyKSBjb25zdAoreworICAgIERpc3BsYXlMaXN0OjpJ
dGVtQnVmZmVySGFuZGxlcyBoYW5kbGVzOworICAgIGhhbmRsZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2J1ZmZlcnMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIFtpZGVudGlmaWVyLCBjYXBh
Y2l0eV0gOiBtX2J1ZmZlcnMpIHsKKyAgICAgICAgYXV0byogZGF0YSA9IGJ1ZmZlclByb3ZpZGVy
KGlkZW50aWZpZXIpOworICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBoYW5kbGVzLnVuY2hlY2tlZEFwcGVuZCh7IGlkZW50aWZpZXIsIGRh
dGEsIGNhcGFjaXR5IH0pOworICAgIH0KKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3Q+KFdURk1vdmUoaGFuZGxlcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlZERpc3BsYXlMaXN0
SGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQxNzVlMTE0ZjIzYmM4ZmI4ZTU3Y2Q5MGY2NGEzM2JlMjYyZTFmMzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TaGFyZWREaXNwbGF5TGlzdEhh
bmRsZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJdGVtQnVm
ZmVyUHJvdmlkZXIgPSBGdW5jdGlvbjx1aW50OF90KihXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIpPjsKKworICAgIFNoYXJlZERpc3BsYXlMaXN0SGFuZGxlKGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q+IGNyZWF0ZURpc3BsYXlMaXN0KEl0
ZW1CdWZmZXJQcm92aWRlciYmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8U2hhcmVkRGlzcGxheUxpc3RIYW5kbGU+IGRlY29kZShEZWNvZGVy
Jik7CisKK3ByaXZhdGU6CisgICAgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUoVmVjdG9yPHN0ZDo6
cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+
JiYgYnVmZmVycykKKyAgICAgICAgOiBtX2J1ZmZlcnMoV1RGTW92ZShidWZmZXJzKSkKKyAgICB7
CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW50aWZpZXIsIHNpemVfdD4+IG1fYnVmZmVyczsKK307CisKK3RlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgU2hhcmVkRGlzcGxheUxpc3RIYW5kbGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9idWZmZXJzOworfQorCit0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxTaGFyZWREaXNwbGF5TGlzdEhhbmRsZT4gU2hh
cmVkRGlzcGxheUxpc3RIYW5kbGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9w
dGlvbmFsPFZlY3RvcjxzdGQ6OnBhaXI8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJJ
ZGVudGlmaWVyLCBzaXplX3Q+Pj4gYnVmZmVyczsKKyAgICBkZWNvZGVyID4+IGJ1ZmZlcnM7Cisg
ICAgaWYgKCFidWZmZXJzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIHt7IFdURk1vdmUoKmJ1ZmZlcnMpIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CmluZGV4IDM1MWFmNDI3OGM5ODU5NTlhZWNmYjE1ZGJmMGFiN2NiNWUyMDRiNzUu
LjY5NTI5Njc0NTFhNjlkMjUzM2VhYzk2NjViZWFjNDU2OWNkMWQ2NWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApA
QCAtMTc0LDYgKzE3NCw3IEBAIFNoYXJlZC9TZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRh
LmNwcAogU2hhcmVkL1Nlc3Npb25TdGF0ZS5jcHAKIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3Bw
IEBuby11bmlmeQogU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAorU2hhcmVkL1NoYXJlZERp
c3BsYXlMaXN0SGFuZGxlLmNwcAogU2hhcmVkL1NoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAKIFNo
YXJlZC9TaGFyZWRTdHJpbmdIYXNoVGFibGVSZWFkT25seS5jcHAKIFNoYXJlZC9TaGFyZWRTdHJp
bmdIYXNoVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA4YWNhNjA1MjVmYjNiOTMzOTBiZTcyMjQ3ZjkyZWQ2YjIyOWNlZjdk
Li5mNWMzOGVjNmMxNTBkMWIxYWM0NmExZjU5ODcwYTM3MzcyMDRiZmQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE4OTAsNiArMTg5
MCw3IEBACiAJCUY0NERGRUIyMUU5RTc1MkYwMDM4RDE5NiAvKiBXZWJJY29uVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDRERkVCMDFF
OUU3NTJGMDAzOEQxOTYgLyogV2ViSWNvblV0aWxpdGllcy5oICovOyB9OwogCQlGNDhEMkE4NTIx
NTgzQTdFMDBDNjc1MkIgLyogQXBwS2l0U1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNDhEMkE4NDIxNTgzQTAyMDBDNjc1MkIgLyogQXBwS2l0U1BJ
LmggKi87IH07CiAJCUY0OTZBNDMxMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0
aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0OTZBNDJGMUY1OEEyNzIwMDRDMTc1NyAvKiBEcmFnRHJvcEludGVyYWN0aW9uU3RhdGUuaCAq
LzsgfTsKKwkJRjRBNkQ2QkMyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNEE2
RDZCQjI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCAqLzsgfTsK
IAkJRjRDQjA5RTUyMjVENUEwOTAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjRDQjA5RTQy
MjVENUEwMzAwODkxNDg3IC8qIFdlYnNpdGVNZWRpYVNvdXJjZVBvbGljeS5oICovOyB9OwogCQlG
NEQ1RjUxRDIwNjA4N0ExMDAzOEJCQTggLyogV0tUZXh0SW5wdXRMaXN0Vmlld0NvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0RDVGNTE5
MjA2MDg3QTAwMDM4QkJBOCAvKiBXS1RleHRJbnB1dExpc3RWaWV3Q29udHJvbGxlci5oICovOyB9
OwogCQlGNEQ1RjUxRjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NEQ1RjUxQjIwNjA4N0ExMDAzOEJCQTggLyogV0tRdWlja2JvYXJkTGlzdFZpZXdDb250cm9sbGVy
LmggKi87IH07CkBAIC01NTA3LDYgKzU1MDgsOCBAQAogCQlGNDhEMkE4NDIxNTgzQTAyMDBDNjc1
MkIgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDk2QTQyRjFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJ
bnRlcmFjdGlvblN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERyYWdEcm9wSW50ZXJhY3Rpb25TdGF0
ZS5oOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNDk2QTQzMDFGNThBMjcyMDA0QzE3NTcgLyogRHJhZ0Ryb3BJbnRl
cmFjdGlvblN0YXRlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHJhZ0Ryb3BJbnRlcmFjdGlv
blN0YXRlLm1tOyBwYXRoID0gaW9zL0RyYWdEcm9wSW50ZXJhY3Rpb25TdGF0ZS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNoYXJl
ZERpc3BsYXlMaXN0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZERpc3BsYXlMaXN0SGFu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0QTZENkJEMjU0Q0E1MjIwMEI2
NUZBQSAvKiBTaGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aGFyZWREaXNwbGF5TGlzdEhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUY0QUM2NTVFMjJBMzE0MEUwMEEwNTYwNyAvKiBXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJ
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJQcmVmZXJl
bmNlc0RlZmF1bHRWYWx1ZXNJT1MubW07IHBhdGggPSBpb3MvV2ViUHJlZmVyZW5jZXNEZWZhdWx0
VmFsdWVzSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNEIzNzhEMDIxRERC
QkFCMDA5NUEzNzggLyogV2ViVW5kb1N0ZXBJRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3Rl
cElELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0Q0IwOUU0MjI1RDVBMDMwMDg5
MTQ4NyAvKiBXZWJzaXRlTWVkaWFTb3VyY2VQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0
ZU1lZGlhU291cmNlUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjE2
LDYgKzYyMTksOCBAQAogCQkJCTFBNjQyMEUzMTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVC
aXRtYXAuaCAqLywKIAkJCQk1MTIxNzQ1RTE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVz
b3VyY2UuY3BwICovLAogCQkJCTUxMjE3NDVGMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVS
ZXNvdXJjZS5oICovLAorCQkJCUY0QTZENkJEMjU0Q0E1MjIwMEI2NUZBQSAvKiBTaGFyZWREaXNw
bGF5TGlzdEhhbmRsZS5jcHAgKi8sCisJCQkJRjRBNkQ2QkIyNTRDQTNFOTAwQjY1RkFBIC8qIFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlLmggKi8sCiAJCQkJODMxM0Y3RUExRjdEQUUwNDAwQjk0NEVC
IC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5jcHAgKi8sCiAJCQkJODMxM0Y3RTkxRjdEQUUwMzAw
Qjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oICovLAogCQkJCTgzMTNGN0U4MUY3REFF
MDMwMEI5NDRFQiAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGUuY3BwICovLApAQCAtMTEzOTgsNiAr
MTE0MDMsNyBAQAogCQkJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAvKiBTaGFyZWFibGVSZXNv
dXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MzQ5NDIyNEVGNDY3ODAwQkRDOUE4IC8qIFNo
YXJlZEJ1ZmZlckNvcHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQzE4RkY2RUYyQTMxMzBDMTMw
MTc2NyAvKiBTaGFyZWRCdWZmZXJEYXRhUmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
NEE2RDZCQzI1NENBM0U5MDBCNjVGQUEgLyogU2hhcmVkRGlzcGxheUxpc3RIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMjRCRUQ1MTIwODk0RDEwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnku
aCBpbiBIZWFkZXJzICovLAogCQkJCUNENEI0RDlEMUU3NjVFMDAwMEQyNzA5MiAvKiBTaGFyZWRS
aW5nQnVmZmVyU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxM0Y3RUMxRjdEQUUwODAw
Qjk0NEVCIC8qIFNoYXJlZFN0cmluZ0hhc2hTdG9yZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDkyM2I0Y2JjNmFlZjYyZGM3NmE5ZmEzM2FiNzMzN2Uy
ZmY1YzFiMDcuLjNkYmQ4ZTNjMmYyM2MzNmJhNDFmNDFlMGFiYTJmMGFlYTM4NjI1YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaD4KQEAgLTM2LDcgKzQwLDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkg
OiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwg
cHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUgeworY2xhc3Mg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpEZWxlZ2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3Jp
dGluZ0NsaWVudCB7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJh
c2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7CkBAIC03Niw2ICs4MCw4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgLCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShtYWtlV2Vh
a1B0cihyZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICAgICAgbV9kcmF3aW5nQ29udGV4
dC5kaXNwbGF5TGlzdCgpLnNldEl0ZW1CdWZmZXJDbGllbnQodGhpcyk7CisgICAgICAgIG1fZHJh
d2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5zZXRUcmFja3NEcmF3aW5nSXRlbUV4dGVudHMoZmFs
c2UpOwogICAgIH0KIAogICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBt
X3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQpAQCAt
MTczLDYgKzE3OSwxMDkgQEAgcHJvdGVjdGVkOgogICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigp
OwogICAgIH0KIAorICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySGFuZGxlIGNy
ZWF0ZUl0ZW1CdWZmZXIoc2l6ZV90IGNhcGFjaXR5KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KQorICAgICAgICAgICAgcmV0dXJuIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5jcmVhdGVJdGVtQnVmZmVyKGNhcGFjaXR5KTsK
KworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBlbmNvZGVJdGVtKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtSGFuZGxlIGl0ZW0pIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSgpKSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0VG9QYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpDbGlw
T3V0VG9QYXRoPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcE91dFRvUGF0aD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwUGF0
aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Q2xpcFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpDbGlwUGF0aD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpDbGlwVG9EcmF3aW5nQ29tbWFuZHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpF
bmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0Ry
YXdpbmdDb21tYW5kcz4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkNsaXBUb0RyYXdp
bmdDb21tYW5kcz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3Rm9jdXNSaW5nUGF0aDoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6
OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ZvY3VzUmluZ1Bh
dGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3Rm9jdXNSaW5nUGF0aD4oKSk7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3Rm9jdXNS
aW5nUmVjdHM6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oaXRlbS5nZXQ8
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdGb2N1c1JpbmdSZWN0cz4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3R2x5cGhzOgorICAgICAgICAg
ICAgcmV0dXJuIElQQzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzPihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0ds
eXBocz4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3SW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVP
YmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oaXRlbS5nZXQ8V2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRyYXdJbWFnZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3TGluZXNGb3JUZXh0OgorICAgICAgICAgICAgcmV0dXJuIElQ
Qzo6RW5jb2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3
TGluZXNGb3JUZXh0PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0xpbmVzRm9y
VGV4dD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpE
cmF3TmF0aXZlSW1hZ2U6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVT
aW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oaXRlbS5n
ZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdOYXRpdmVJbWFnZT4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0aDoKKyAgICAgICAgICAg
IHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd1BhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aD4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3UGF0
dGVybjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVj
dDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1BhdHRlcm4+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3UGF0dGVybj4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGlsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6
OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1Rp
bGVkSW1hZ2U+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRJbWFnZT4o
KSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3VGls
ZWRTY2FsZWRJbWFnZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNp
bmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd1RpbGVkU2NhbGVkSW1hZ2U+KGl0
ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3VGlsZWRTY2FsZWRJbWFnZT4oKSk7Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRl
ZFJlY3Q6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmpl
Y3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oaXRlbS5nZXQ8V2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkZpbGxDb21wb3NpdGVkUmVjdD4oKSk7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aDoKKyAgICAgICAgICAgIHJl
dHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RmlsbFBhdGg+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUGF0aD4oKSk7
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdp
dGhDb2xvcjoKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9i
amVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoQ29sb3I+KGl0ZW0uZ2V0PFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhDb2xvcj4oKSk7CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhHcmFkaWVudDoKKyAg
ICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoR3JhZGllbnQ+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhHcmFkaWVudD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKKyAgICAg
ICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKSk7CisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6CisgICAgICAgICAg
ICByZXR1cm4gSVBDOjpFbmNvZGVyOjplbmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkZpbGxSb3VuZGVkUmVjdD4oaXRlbS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZp
bGxSb3VuZGVkUmVjdD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpQdXRJbWFnZURhdGE6CisgICAgICAgICAgICByZXR1cm4gSVBDOjpFbmNvZGVyOjpl
bmNvZGVTaW5nbGVPYmplY3Q8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oaXRl
bS5nZXQ8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YT4oKSk7CisgICAgICAgIGNh
c2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lRGFzaDoKKyAgICAgICAg
ICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmdsZU9iamVjdDxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6U2V0TGluZURhc2g+KGl0ZW0uZ2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRM
aW5lRGFzaD4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBJUEM6OkVuY29kZXI6OmVuY29kZVNpbmds
ZU9iamVjdDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU+KGl0ZW0uZ2V0PFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTZXRTdGF0ZT4oKSk7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VQYXRoOgorICAgICAgICAgICAgcmV0dXJuIElQQzo6RW5j
b2Rlcjo6ZW5jb2RlU2luZ2xlT2JqZWN0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRo
PihpdGVtLmdldDxXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlUGF0aD4oKSk7CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpBcHBseURldmljZVNjYWxlRmFj
dG9yOgorI2lmIFVTRShDRykKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkFwcGx5RmlsbFBhdHRlcm46CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpBcHBseVN0cm9rZVBhdHRlcm46CisjZW5kaWYKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkJlZ2luVHJhbnNwYXJlbmN5TGF5ZXI6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclJlY3Q6Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGVhclNoYWRvdzoK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsaXA6CisgICAg
ICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpDbGlwT3V0OgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06Cisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpEcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6RHJhd0VsbGlwc2U6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpEcmF3SW1hZ2VCdWZmZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpEcmF3TGluZToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OkRyYXdSZWN0OgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6RW5kVHJhbnNwYXJlbmN5TGF5ZXI6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBzZToKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxJ
bmxpbmVQYXRoOgorI2VuZGlmCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpGaWxsUmVjdDoKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYToKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlJlc3RvcmU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpSb3RhdGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTYXZlOgorICAgICAgICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2NhbGU6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTZXRDVE06CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
ZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0
ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgY2FzZSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldExpbmVDYXA6CisgICAgICAgIGNhc2Ug
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lSm9pbjoKKyAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldE1pdGVyTGltaXQ6CisgICAgICAg
IGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6
CisgICAgICAgIGNhc2UgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxp
cHNlOgorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgICAgICBjYXNlIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyNlbmRpZgorICAgICAg
ICBjYXNlIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKKyAgICAg
ICAgY2FzZSBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlRyYW5zbGF0ZToKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisK
ICAgICB2b2lkIGRpZEFwcGVuZEl0ZW1PZlR5cGUoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlIHR5cGUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAodHlwZSA9PSBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OkRyYXdJbWFnZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAppbmRleCBmMzFlZmFmODczMTBmZjhlZjUyMGMwOTI1MTY2
ZGI2Y2QzMDJiMDM3Li44YTgwNTdjNTlkMmJkNWQ2MmFhZjgxZmZmYWZhOGVjYmEyZmYwNjczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0zNCw2ICszNCw4
IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCiAjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTaGFyZWREaXNwbGF5TGlz
dEhhbmRsZS5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xMTUsMTMgKzExNywxNSBAQCBSZWZQdHI8
SW1hZ2VEYXRhPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aQogCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1
c2hEaXNwbGF5TGlzdChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
LCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
KQogewotICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkZsdXNoRGlz
cGxheUxpc3QoZGlzcGxheUxpc3QsIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OkZsdXNoRGlzcGxheUxpc3QoeyBkaXNwbGF5TGlzdCB9LCByZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBt
X3NoYXJlZEl0ZW1CdWZmZXJzLmNsZWFyKCk7CiB9CiAKIERpc3BsYXlMaXN0Rmx1c2hJZGVudGlm
aWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hEaXNwbGF5TGlzdEFuZENvbW1p
dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogewogICAgIERp
c3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIgPSBEaXNwbGF5TGlz
dEZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KGRpc3BsYXlMaXN0LCBz
ZW50Rmx1c2hJZGVudGlmaWVyLCByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpGbHVzaERpc3BsYXlMaXN0QW5kQ29tbWl0KHsgZGlzcGxheUxpc3QgfSwgc2Vu
dEZsdXNoSWRlbnRpZmllciwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9zaGFyZWRJdGVtQnVmZmVycy5jbGVhcigpOwog
ICAgIHJldHVybiBzZW50Rmx1c2hJZGVudGlmaWVyOwogfQogCkBAIC0xNTUsNiArMTU5LDIzIEBA
IHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpmbHVzaERpc3BsYXlMaXN0V2FzQ29t
bWl0dGVkKERpc3BsYXlMaXN0Rmx1c2hJCiAgICAgICAgIGRvd25jYXN0PFVuYWNjZWxlcmF0ZWRS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5PigqaW1hZ2VCdWZmZXIpLmNvbW1pdEZsdXNoRGlzcGxheUxp
c3QoZmx1c2hJZGVudGlmaWVyKTsKIH0KIAorRGlzcGxheUxpc3Q6Okl0ZW1CdWZmZXJIYW5kbGUg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCBjYXBh
Y2l0eSkKK3sKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBkZWZhdWx0U2hhcmVkSXRlbUJ1
ZmZlclNpemUgPSAxIDw8IDE2OworCisgICAgYXV0byBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1v
cnk6OmFsbG9jYXRlKHN0ZDo6bWF4KGRlZmF1bHRTaGFyZWRJdGVtQnVmZmVyU2l6ZSwgY2FwYWNp
dHkpKTsKKyAgICBpZiAoIXNoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGF1dG8gaWRlbnRpZmllciA9IERpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBzaGFyZWRNZW1vcnlIYW5kbGU7Cisg
ICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUoc2hhcmVkTWVtb3J5SGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlByb3RlY3Rpb246OlJlYWRPbmx5KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTaGFyZWRJdGVtRGF0YShpZGVudGlmaWVyLCB7IFdU
Rk1vdmUoc2hhcmVkTWVtb3J5SGFuZGxlKSwgc2hhcmVkTWVtb3J5LT5zaXplKCkgfSksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc2hhcmVkSXRlbUJ1ZmZlcnMuc2V0KGlk
ZW50aWZpZXIsIHNoYXJlZE1lbW9yeS5jb3B5UmVmKCkpOworCisgICAgcmV0dXJuIHsgaWRlbnRp
ZmllciwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBz
aGFyZWRNZW1vcnktPnNpemUoKSB9OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oCmluZGV4IGNhMDU1ZmQzNmZjZTFhMTJiYjI1YmZlNmQ1OTM1MTY5NGJjZGZhZGUuLmQz
NmMzZWVhODM2ODYzZDkwZmNlNzkwOTljNDNlMDRkOThkMGRiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1lc3Nh
Z2VTZW5kZXIuaCIKICNpbmNsdWRlICJSZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGlj
OgogICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKIAogICAgIFJlbW90ZVJlc291
cmNlQ2FjaGVQcm94eSYgcmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5KCkgeyByZXR1cm4gbV9yZW1v
dGVSZXNvdXJjZUNhY2hlUHJveHk7IH0KKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbUJ1
ZmZlckhhbmRsZSBjcmVhdGVJdGVtQnVmZmVyKHNpemVfdCk7CiAKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCiAgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOwpAQCAtODYsNiArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmx1
c2hEaXNwbGF5TGlzdFdhc0NvbW1pdHRlZChEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciwgV2Vi
Q29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKIAogICAgIFJlbW90ZVJlc291cmNl
Q2FjaGVQcm94eSBtX3JlbW90ZVJlc291cmNlQ2FjaGVQcm94eTsKKyAgICBIYXNoTWFwPFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVySWRlbnRpZmllciwgUmVmUHRyPFNoYXJlZE1lbW9y
eT4+IG1fc2hhcmVkSXRlbUJ1ZmZlcnM7CiAgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDhmMjQ1ODU2MzVmNDcwODNkMWRiMjdhNWIzOTY2
NjVmMzE1ZWJjYjAuLjlmMjZhMjMwY2Y2OGIwYmY4ODA5MjhiN2NlZmJiZDg3Zjg1MzQ0ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0yMyw4ICsyMyw4IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiBtZXNzYWdlcyAt
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7Ci0gICAgdm9pZCBJ
bWFnZUJ1ZmZlckJhY2tlbmRXYXNDcmVhdGVkKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6
ZSwgV2ViQ29yZTo6SW50U2l6ZSBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlIGhhbmRsZSwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikKLSAgICB2b2lkIEZsdXNoRGlzcGxheUxpc3RXYXNDb21t
aXR0ZWQoV2ViS2l0OjpEaXNwbGF5TGlzdEZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIs
IFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIpCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kV2FzQ3JlYXRlZChXZWJDb3JlOjpGbG9h
dFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6Oklt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNl
SWRlbnRpZmllciByZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpCisgICAgRmx1c2hEaXNwbGF5
TGlzdFdhc0NvbW1pdHRlZChXZWJLaXQ6OkRpc3BsYXlMaXN0Rmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllciwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVzb3VyY2VDYWNoZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlUmVzb3VyY2VDYWNoZVByb3h5LmNwcAppbmRleCA4MjUwNDIxN2JlNzYxNWI0
ODdhMGNkMzJmN2RmMTg3NzI0NjcyZWIyLi5mYWZmOTJhMDRkZGZjYmJkNTgzODZlYzliZmFhZDll
MTM1NWE1NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlc291cmNlQ2FjaGVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZXNvdXJjZUNhY2hlUHJveHkuY3BwCkBAIC0yOCw2
ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA2NzU3YjhlMDg3YzdmNjk3ZDM5NzUzNmQxMGM2OTVkOTc5MjM1OWQ5Li4wMWM3Njk5NTllYzk3
ZTczNmFhYTc3ZTkyZjkzYTI4NjM5NDA0ZjhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAt
MTAtMzAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAg
W0NvbmN1cnJlbnQgZGlzcGxheSBsaXN0c10gRW5jb2RlIGRpc3BsYXkgbGlzdCBpdGVtcyBkaXJl
Y3RseSBpbnRvIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxODQwNgorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24u
CisKKyAgICAgICAgUmViYXNlbGluZSBzZXZlcmFsIGV4aXN0aW5nIChub24tR1BVLXByb2Nlc3Mp
IGRpc3BsYXkgbGlzdCB0ZXN0cyB0byBhY2NvdW50IGZvciBhIHNsaWdodCB0d2VhayBpbiB0aGUg
Zm9ybWF0IGluCisgICAgICAgIHdoaWNoIGRpc3BsYXkgbGlzdHMgYXJlIGR1bXBlZCBhcyB0ZXh0
LiBNb3JlIHNwZWNpZmljYWxseSwgZHJhd2luZyBpdGVtIGV4dGVudHMgYXJlIG5vdyBkdW1wZWQg
YWZ0ZXIgZWFjaAorICAgICAgICBkcmF3aW5nIGl0ZW0sIHJhdGhlciB0aGFuIGJlZm9yZS4KKwor
ICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50
eHQ6CisgICAgICAgICogZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGRpc3BsYXlsaXN0cy9yZXBsYXktc2tpcC1jbGlwcGVkLXJl
Y3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTA2ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5v
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gVW5yZXZpZXdlZCB0ZXN0IGdhcmRlbmluZy4g
R2FyZGVuZWQgc2V2ZXJhbCBmbGFreSBmYWlsdXJlcyByZXBvcnRlZCBieSB0aGUgYm90LgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0CmluZGV4IDMyODg0ODA2MjcwMTlkNTQwMmQ5NDI1ZmM0YTEzMTM3NzBlY2Iz
MWEuLjE0NTFiMTkyNTNjMzIzODkyOGJiZDlmNWU1ZGViYjkyNzRjNTBkNTcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQKQEAgLTYsMTAgKzYsOCBAQAogICAoZmlsbC1jb2xvciAjQzgwMDAwKQogICAoc2hh
ZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKLSAgKGV4dGVudCBhdCAoMTAs
MTQwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQorICAocmVj
dCBhdCAoMTAsMTApIHNpemUgNTV4NTApIGV4dGVudCBhdCAoMTAsMTQwKSBzaXplIDU1eDUwKQog
KHNldC1pbmxpbmUtZmlsbC1jb2xvcgogICAoY29sb3IgIzAwMDBDODgwKSkKIChmaWxsLXJlY3QK
LSAgKGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUwKQotICAocmVjdCBhdCAoMzAsMzApIHNp
emUgNTV4NTApKQorICAocmVjdCBhdCAoMzAsMzApIHNpemUgNTV4NTApIGV4dGVudCBhdCAoMzAs
MTIwKSBzaXplIDU1eDUwKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2V4dGVudC1pbmNsdWRlcy1zaGFkb3ctZXhwZWN0ZWQudHh0CmluZGV4IGU5ZjU0MDQxN2Jk
NmU1ZGM3Nzg2MTVlNWYzNzk0OTc2ZTQxOTVmOGQuLjU5MGI5M2Y1Yzg5MmNhZTM3ZjQyNDYwOWE4
ZmU0ODAzM2U2NjgzNjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9leHRl
bnQtaW5jbHVkZXMtc2hhZG93LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXNoYWRvdy1leHBlY3RlZC50eHQKQEAgLTksOSArOSw4IEBA
CiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEwIGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxl
Z2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21wb3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNDMs
NTApIHNpemUgMTM0eDEzNykKICAgKHJlY3QgYXQgKDUwLDUwKSBzaXplIDEwMHgxMDApCiAgIChj
b2xvciAjMDAwMEZGKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDQzLDUw
KSBzaXplIDEzNHgxMzcpCiAocmVzdG9yZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtZXhwZWN0ZWQudHh0
CmluZGV4IGUwNDUyYTE3M2ExYWZlMjM3ZjcyOGQzMGJjMjdlYzYwZWVjOTYyM2QuLjI4Y2NmNGMw
MTg1OWRlMTkwYjBhOWEyN2ZhMmZlYzAwNjNlZDhlMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9leHRlbnQtaW5jbHVkZXMtdHJhbnNmb3Jtcy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLWV4
cGVjdGVkLnR4dApAQCAtMTEsMTEgKzExLDEwIEBACiAgIChzaGFkb3ctb2Zmc2V0IHdpZHRoPTEw
IGhlaWdodD0yMCkKICAgKHNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMgMCkpCiAoZmlsbC1jb21w
b3NpdGVkLXJlY3QKLSAgKGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgxODUuNjUp
CiAgIChyZWN0IGF0ICgwLDApIHNpemUgMTAweDEwMCkKICAgKGNvbG9yICMwMDAwRkYpCiAgIChj
b21wb3NpdGUtb3BlcmF0aW9uIHNvdXJjZS1vdmVyKQotICAoYmxlbmQtbW9kZSBub3JtYWwpKQor
ICAoYmxlbmQtbW9kZSBub3JtYWwpIGV4dGVudCBhdCAoNy4xNCwwLjIwKSBzaXplIDE4NC41NXgx
ODUuNjUpCiAocmVzdG9yZSkKIChzZXQtY3RtCiAgIChzZXQtY3RtIHttPSgoMS4wMCwwLjAwKSgw
LjAwLDEuMDApKSB0PSgwLjAwLDIyLjAwKX0pKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2xheWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggYmQ4NzZkZjQw
M2E0YWRkMGJjMzkxZjdjNjJhYzJiNGMzYmNmN2RhMC4uYmMxN2I1MTE0OTlmODI1NmM5OTI5MGRh
ZTg2MTRkNDg5NGNhZjljYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2xh
eWVyLWRpc3BheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvbGF5ZXItZGlzcGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0zLDI5ICszLDI0IEBACiAgICh4
IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwtY29tcG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQg
KDAsMCkgc2l6ZSAxMDR4MTA0KQogICAocmVjdCBhdCAoMCwwKSBzaXplIDEwNHgxMDQpCiAgIChj
b2xvciAjMDA4MDAwKQogICAoY29tcG9zaXRlLW9wZXJhdGlvbiBzb3VyY2Utb3ZlcikKLSAgKGJs
ZW5kLW1vZGUgbm9ybWFsKSkKKyAgKGJsZW5kLW1vZGUgbm9ybWFsKSBleHRlbnQgYXQgKDAsMCkg
c2l6ZSAxMDR4MTA0KQogKHNldC1zdGF0ZQogICAoY2hhbmdlLWZsYWdzIDMyOTYwKQogICAoZmls
bC1jb2xvciAjMDAwMEZGKQogICAoc3Ryb2tlLXN0eWxlIDApCiAgIChzaG91bGQtYW50aWFsaWFz
IDApKQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgwLDApIHNpemUgMTA0eDIpCiAgIChyZWN0
IGF0ICgwLDApIHNpemUgMTA0eDIpCi0gIChib3JkZXItdGhpY2tuZXNzIDEuMDApKQorICAoYm9y
ZGVyLXRoaWNrbmVzcyAxLjAwKSBleHRlbnQgYXQgKDAsMCkgc2l6ZSAxMDR4MikKIChkcmF3LXJl
Y3QKLSAgKGV4dGVudCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCiAgIChyZWN0IGF0ICgwLDEwMikg
c2l6ZSAxMDR4MikKLSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tu
ZXNzIDEuMDApIGV4dGVudCBhdCAoMCwxMDIpIHNpemUgMTA0eDIpCiAoZHJhdy1yZWN0Ci0gIChl
eHRlbnQgYXQgKDAsMCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDAsMCkgc2l6ZSAyeDEwNCkK
LSAgKGJvcmRlci10aGlja25lc3MgMS4wMCkpCisgIChib3JkZXItdGhpY2tuZXNzIDEuMDApIGV4
dGVudCBhdCAoMCwwKSBzaXplIDJ4MTA0KQogKGRyYXctcmVjdAotICAoZXh0ZW50IGF0ICgxMDIs
MCkgc2l6ZSAyeDEwNCkKICAgKHJlY3QgYXQgKDEwMiwwKSBzaXplIDJ4MTA0KQotICAoYm9yZGVy
LXRoaWNrbmVzcyAxLjAwKSkKKyAgKGJvcmRlci10aGlja25lc3MgMS4wMCkgZXh0ZW50IGF0ICgx
MDIsMCkgc2l6ZSAyeDEwNCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9y
ZXBsYXktc2tpcC1jbGlwcGVkLXJlY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKaW5kZXggYWRkZDJj
YTQyNTBjMjRhMGM5ZWUyMjU1ZDQyNzVhNzZmNjA0M2VlZC4uYmI1OTNkMjBmNmRhNjQ4NjI5MmQz
NmMwMjIwZTJhOWQ4NzJmODJiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZGlzcGxheWxpc3RzL3JlcGxheS1za2lwLWNsaXBwZWQtcmVjdC1leHBlY3RlZC50eHQKQEAgLTMs
MTEgKzMsMTAgQEAgcmVjb3JkZWQ6CiAgICh4IDAuMDApCiAgICh5IDAuMDApKQogKGZpbGwtY29t
cG9zaXRlZC1yZWN0Ci0gIChleHRlbnQgYXQgKDQxMiwwKSBzaXplIDEwMHgxMDApCiAgIChyZWN0
IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogICAoY29sb3IgIzAwMDBGRikKICAgKGNvbXBvc2l0
ZS1vcGVyYXRpb24gc291cmNlLW92ZXIpCi0gIChibGVuZC1tb2RlIG5vcm1hbCkpCisgIChibGVu
ZC1tb2RlIG5vcm1hbCkgZXh0ZW50IGF0ICg0MTIsMCkgc2l6ZSAxMDB4MTAwKQogCiByZXBsYXll
ZDoKICgK
</data>

          </attachment>
      

    </bug>

</bugzilla>